summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-10-20 00:40:56 +0000
committerChris Lattner <sabre@nondot.org>2009-10-20 00:40:56 +0000
commit2f69ed8f4cdcf20b39a7972c986975bdd58e7af6 (patch)
treece34644d5d16bac519b630f9a13f089ec1193435 /llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
parent772b2f84eb61229d3579478ccb3483fe765a3100 (diff)
downloadbcm5719-llvm-2f69ed8f4cdcf20b39a7972c986975bdd58e7af6.tar.gz
bcm5719-llvm-2f69ed8f4cdcf20b39a7972c986975bdd58e7af6.zip
implement printSORegOperand, add lowering for the nasty and despicable MOVi2pieces :)
llvm-svn: 84573
Diffstat (limited to 'llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp')
-rw-r--r--llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp b/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
index b227baec62a..abb0399fa45 100644
--- a/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
+++ b/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
@@ -79,6 +79,37 @@ void ARMInstPrinter::printSOImmOperand(const MCInst *MI, unsigned OpNum) {
printSOImm(O, MO.getImm(), VerboseAsm, &MAI);
}
+/// printSOImm2PartOperand - SOImm is broken into two pieces using a 'mov'
+/// followed by an 'orr' to materialize.
+void ARMInstPrinter::printSOImm2PartOperand(const MCInst *MI, unsigned OpNum) {
+ // FIXME: REMOVE this method.
+ abort();
+}
+
+// so_reg is a 4-operand unit corresponding to register forms of the A5.1
+// "Addressing Mode 1 - Data-processing operands" forms. This includes:
+// REG 0 0 - e.g. R5
+// REG REG 0,SH_OPC - e.g. R5, ROR R3
+// REG 0 IMM,SH_OPC - e.g. R5, LSL #3
+void ARMInstPrinter::printSORegOperand(const MCInst *MI, unsigned OpNum) {
+ const MCOperand &MO1 = MI->getOperand(OpNum);
+ const MCOperand &MO2 = MI->getOperand(OpNum+1);
+ const MCOperand &MO3 = MI->getOperand(OpNum+2);
+
+ O << getRegisterName(MO1.getReg());
+
+ // Print the shift opc.
+ O << ", "
+ << ARM_AM::getShiftOpcStr(ARM_AM::getSORegShOp(MO3.getImm()))
+ << ' ';
+
+ if (MO2.getReg()) {
+ O << getRegisterName(MO2.getReg());
+ assert(ARM_AM::getSORegOffset(MO3.getImm()) == 0);
+ } else {
+ O << "#" << ARM_AM::getSORegOffset(MO3.getImm());
+ }
+}
void ARMInstPrinter::printAddrMode2Operand(const MCInst *MI, unsigned Op) {
OpenPOWER on IntegriCloud