-
-static bool isReg(const MachineOperand &MO) {
- return MO.getType() == MachineOperand::MO_VirtualRegister ||
- MO.getType() == MachineOperand::MO_MachineRegister;
-}
-
-static bool isImmediate(const MachineOperand &MO) {
- return MO.getType() == MachineOperand::MO_SignExtendedImmed ||
- MO.getType() == MachineOperand::MO_UnextendedImmed;
-}
-
-
-// getX86RegNum - This function maps LLVM register identifiers to their X86
-// specific numbering, which is used in various places encoding instructions.
-//
-static unsigned getX86RegNum(unsigned RegNo) {
- switch(RegNo) {
- case X86::EAX: case X86::AX: case X86::AL: return 0;
- case X86::ECX: case X86::CX: case X86::CL: return 1;
- case X86::EDX: case X86::DX: case X86::DL: return 2;
- case X86::EBX: case X86::BX: case X86::BL: return 3;
- case X86::ESP: case X86::SP: case X86::AH: return 4;
- case X86::EBP: case X86::BP: case X86::CH: return 5;
- case X86::ESI: case X86::SI: case X86::DH: return 6;
- case X86::EDI: case X86::DI: case X86::BH: return 7;
- default:
- assert(RegNo >= MRegisterInfo::FirstVirtualRegister &&
- "Unknown physical register!");
- DEBUG(std::cerr << "Register allocator hasn't allocated " << RegNo
- << " correctly yet!\n");
- return 0;
+ if (IndexReg.getReg()) {
+ if (NeedPlus) O << " + ";
+ if (IndexReg.getImmedValue() != 1)
+ O << IndexReg.getImmedValue() << "*";
+ printOp(O, IndexReg, RI);
+ NeedPlus = true;