Initial support for addrmode handling. Tests by Brian Lucas!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86382 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp b/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp
index 6ea930b..0a403c4 100644
--- a/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp
+++ b/lib/Target/MSP430/AsmPrinter/MSP430InstPrinter.cpp
@@ -63,25 +63,22 @@
const MCOperand &Base = MI->getOperand(OpNo);
const MCOperand &Disp = MI->getOperand(OpNo+1);
- // FIXME: move global to displacement field!
- if (Base.isExpr()) {
+ // Print displacement first
+ if (Disp.isExpr()) {
O << '&';
- Base.getExpr()->print(O, &MAI);
- } else if (Disp.isImm() && !Base.isReg())
- printOperand(MI, OpNo);
- else if (Base.isReg()) {
- if (Disp.getImm()) {
- O << Disp.getImm() << '(';
- printOperand(MI, OpNo);
- O << ')';
- } else {
- O << '@';
- printOperand(MI, OpNo);
- }
+ Disp.getExpr()->print(O, &MAI);
} else {
- Base.dump();
- Disp.dump();
- llvm_unreachable("Unsupported memory operand");
+ assert(Disp.isImm() && "Expected immediate in displacement field");
+ if (!Base.getReg())
+ O << '&';
+
+ O << Disp.getImm();
+ }
+
+
+ // Print register base field
+ if (Base.getReg()) {
+ O << '(' << getRegisterName(Base.getReg()) << ')';
}
}