static_inst.cc (11793:ef606668d247) | static_inst.cc (12104:edd63f9c6184) |
---|---|
1/* 2 * Copyright (c) 2010-2014, 2016 ARM Limited 3 * Copyright (c) 2013 Advanced Micro Devices, Inc. 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating --- 277 unchanged lines hidden (view full) --- 286 default: 287 ccprintf(std::cerr, "Unhandled shift type\n"); 288 exit(1); 289 break; 290 } 291 return 0; 292} 293 | 1/* 2 * Copyright (c) 2010-2014, 2016 ARM Limited 3 * Copyright (c) 2013 Advanced Micro Devices, Inc. 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating --- 277 unchanged lines hidden (view full) --- 286 default: 287 ccprintf(std::cerr, "Unhandled shift type\n"); 288 exit(1); 289 break; 290 } 291 return 0; 292} 293 |
294 | |
295void | 294void |
296ArmStaticInst::printReg(std::ostream &os, int reg) const | 295ArmStaticInst::printIntReg(std::ostream &os, RegIndex reg_idx) const |
297{ | 296{ |
298 RegIndex rel_reg; 299 300 switch (regIdxToClass(reg, &rel_reg)) { 301 case IntRegClass: 302 if (aarch64) { 303 if (reg == INTREG_UREG0) 304 ccprintf(os, "ureg0"); 305 else if (reg == INTREG_SPX) 306 ccprintf(os, "%s%s", (intWidth == 32) ? "w" : "", "sp"); 307 else if (reg == INTREG_X31) 308 ccprintf(os, "%szr", (intWidth == 32) ? "w" : "x"); 309 else 310 ccprintf(os, "%s%d", (intWidth == 32) ? "w" : "x", reg); 311 } else { 312 switch (rel_reg) { 313 case PCReg: 314 ccprintf(os, "pc"); 315 break; 316 case StackPointerReg: 317 ccprintf(os, "sp"); 318 break; 319 case FramePointerReg: 320 ccprintf(os, "fp"); 321 break; 322 case ReturnAddressReg: 323 ccprintf(os, "lr"); 324 break; 325 default: 326 ccprintf(os, "r%d", reg); 327 break; 328 } | 297 if (aarch64) { 298 if (reg_idx == INTREG_UREG0) 299 ccprintf(os, "ureg0"); 300 else if (reg_idx == INTREG_SPX) 301 ccprintf(os, "%s%s", (intWidth == 32) ? "w" : "", "sp"); 302 else if (reg_idx == INTREG_X31) 303 ccprintf(os, "%szr", (intWidth == 32) ? "w" : "x"); 304 else 305 ccprintf(os, "%s%d", (intWidth == 32) ? "w" : "x", reg_idx); 306 } else { 307 switch (reg_idx) { 308 case PCReg: 309 ccprintf(os, "pc"); 310 break; 311 case StackPointerReg: 312 ccprintf(os, "sp"); 313 break; 314 case FramePointerReg: 315 ccprintf(os, "fp"); 316 break; 317 case ReturnAddressReg: 318 ccprintf(os, "lr"); 319 break; 320 default: 321 ccprintf(os, "r%d", reg_idx); 322 break; |
329 } | 323 } |
330 break; 331 case FloatRegClass: 332 ccprintf(os, "f%d", rel_reg); 333 break; 334 case MiscRegClass: 335 assert(rel_reg < NUM_MISCREGS); 336 ccprintf(os, "%s", ArmISA::miscRegName[rel_reg]); 337 break; 338 case CCRegClass: 339 ccprintf(os, "cc_%s", ArmISA::ccRegName[rel_reg]); 340 break; | |
341 } 342} 343 344void | 324 } 325} 326 327void |
328ArmStaticInst::printFloatReg(std::ostream &os, RegIndex reg_idx) const 329{ 330 ccprintf(os, "f%d", reg_idx); 331} 332 333void 334ArmStaticInst::printCCReg(std::ostream &os, RegIndex reg_idx) const 335{ 336 ccprintf(os, "cc_%s", ArmISA::ccRegName[reg_idx]); 337} 338 339void 340ArmStaticInst::printMiscReg(std::ostream &os, RegIndex reg_idx) const 341{ 342 assert(reg_idx < NUM_MISCREGS); 343 ccprintf(os, "%s", ArmISA::miscRegName[reg_idx]); 344} 345 346void |
|
345ArmStaticInst::printMnemonic(std::ostream &os, 346 const std::string &suffix, 347 bool withPred, 348 bool withCond64, 349 ConditionCode cond64) const 350{ 351 os << " " << mnemonic; 352 if (withPred && !aarch64) { --- 113 unchanged lines hidden (view full) --- 466 bool immShift, 467 uint32_t shiftAmt, 468 IntRegIndex rs, 469 ArmShiftType type) const 470{ 471 bool firstOp = false; 472 473 if (rm != INTREG_ZERO) { | 347ArmStaticInst::printMnemonic(std::ostream &os, 348 const std::string &suffix, 349 bool withPred, 350 bool withCond64, 351 ConditionCode cond64) const 352{ 353 os << " " << mnemonic; 354 if (withPred && !aarch64) { --- 113 unchanged lines hidden (view full) --- 468 bool immShift, 469 uint32_t shiftAmt, 470 IntRegIndex rs, 471 ArmShiftType type) const 472{ 473 bool firstOp = false; 474 475 if (rm != INTREG_ZERO) { |
474 printReg(os, rm); | 476 printIntReg(os, rm); |
475 } 476 477 bool done = false; 478 479 if ((type == LSR || type == ASR) && immShift && shiftAmt == 0) 480 shiftAmt = 32; 481 482 switch (type) { --- 32 unchanged lines hidden (view full) --- 515 panic("Tried to disassemble unrecognized shift type.\n"); 516 } 517 if (!done) { 518 if (!firstOp) 519 os << " "; 520 if (immShift) 521 os << "#" << shiftAmt; 522 else | 477 } 478 479 bool done = false; 480 481 if ((type == LSR || type == ASR) && immShift && shiftAmt == 0) 482 shiftAmt = 32; 483 484 switch (type) { --- 32 unchanged lines hidden (view full) --- 517 panic("Tried to disassemble unrecognized shift type.\n"); 518 } 519 if (!done) { 520 if (!firstOp) 521 os << " "; 522 if (immShift) 523 os << "#" << shiftAmt; 524 else |
523 printReg(os, rs); | 525 printIntReg(os, rs); |
524 } 525} 526 527void 528ArmStaticInst::printExtendOperand(bool firstOperand, std::ostream &os, 529 IntRegIndex rm, ArmExtendType type, 530 int64_t shiftAmt) const 531{ 532 if (!firstOperand) 533 ccprintf(os, ", "); | 526 } 527} 528 529void 530ArmStaticInst::printExtendOperand(bool firstOperand, std::ostream &os, 531 IntRegIndex rm, ArmExtendType type, 532 int64_t shiftAmt) const 533{ 534 if (!firstOperand) 535 ccprintf(os, ", "); |
534 printReg(os, rm); | 536 printIntReg(os, rm); |
535 if (type == UXTX && shiftAmt == 0) 536 return; 537 switch (type) { 538 case UXTB: ccprintf(os, ", UXTB"); 539 break; 540 case UXTH: ccprintf(os, ", UXTH"); 541 break; 542 case UXTW: ccprintf(os, ", UXTW"); --- 20 unchanged lines hidden (view full) --- 563 ArmShiftType type, uint64_t imm) const 564{ 565 printMnemonic(os, s ? "s" : ""); 566 bool firstOp = true; 567 568 // Destination 569 if (rd != INTREG_ZERO) { 570 firstOp = false; | 537 if (type == UXTX && shiftAmt == 0) 538 return; 539 switch (type) { 540 case UXTB: ccprintf(os, ", UXTB"); 541 break; 542 case UXTH: ccprintf(os, ", UXTH"); 543 break; 544 case UXTW: ccprintf(os, ", UXTW"); --- 20 unchanged lines hidden (view full) --- 565 ArmShiftType type, uint64_t imm) const 566{ 567 printMnemonic(os, s ? "s" : ""); 568 bool firstOp = true; 569 570 // Destination 571 if (rd != INTREG_ZERO) { 572 firstOp = false; |
571 printReg(os, rd); | 573 printIntReg(os, rd); |
572 } 573 574 // Source 1. 575 if (rn != INTREG_ZERO) { 576 if (!firstOp) 577 os << ", "; 578 firstOp = false; | 574 } 575 576 // Source 1. 577 if (rn != INTREG_ZERO) { 578 if (!firstOp) 579 os << ", "; 580 firstOp = false; |
579 printReg(os, rn); | 581 printIntReg(os, rn); |
580 } 581 582 if (!firstOp) 583 os << ", "; 584 if (withImm) { 585 ccprintf(os, "#%ld", imm); 586 } else { 587 printShiftOperand(os, rm, immShift, shiftAmt, rs, type); --- 255 unchanged lines hidden --- | 582 } 583 584 if (!firstOp) 585 os << ", "; 586 if (withImm) { 587 ccprintf(os, "#%ld", imm); 588 } else { 589 printShiftOperand(os, rm, immShift, shiftAmt, rs, type); --- 255 unchanged lines hidden --- |