diff options
Diffstat (limited to 'llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp')
| -rw-r--r-- | llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp b/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp index e8004a7d1b4..6f1c8ebfd08 100644 --- a/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp +++ b/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp @@ -47,7 +47,10 @@ namespace { return "MSP430 Assembly Printer"; } - void printOperand(const MachineInstr *MI, int OpNum); + void printOperand(const MachineInstr *MI, int OpNum, + const char* Modifier = 0); + void printSrcMemOperand(const MachineInstr *MI, int OpNum, + const char* Modifier = 0); bool printInstruction(const MachineInstr *MI); // autogenerated. void printMachineInstruction(const MachineInstr * MI); bool runOnMachineFunction(MachineFunction &F); @@ -119,7 +122,8 @@ void MSP430AsmPrinter::printMachineInstruction(const MachineInstr *MI) { assert(0 && "Should not happen"); } -void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum) { +void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum, + const char* Modifier) { const MachineOperand &MO = MI->getOperand(OpNum); switch (MO.getType()) { case MachineOperand::MO_Register: @@ -129,7 +133,9 @@ void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum) { assert(0 && "not implemented"); break; case MachineOperand::MO_Immediate: - O << "#" << MO.getImm(); + if (!Modifier || strcmp(Modifier, "nohash")) + O << '#'; + O << MO.getImm(); break; case MachineOperand::MO_MachineBasicBlock: printBasicBlockLabel(MO.getMBB()); @@ -138,3 +144,21 @@ void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum) { assert(0 && "Not implemented yet!"); } } + +void MSP430AsmPrinter::printSrcMemOperand(const MachineInstr *MI, int OpNum, + const char* Modifier) { + const MachineOperand &Disp = MI->getOperand(OpNum); + assert(Disp.isImm() && "Displacement can be only immediate!"); + + // Special case: 0(Reg) -> @Reg + if (Disp.getImm() == 0) { + O << "@"; + printOperand(MI, OpNum + 1); + } else { + printOperand(MI, OpNum, "nohash"); + O << '('; + printOperand(MI, OpNum + 1); + O << ')'; + } +} + |

