[llvm-commits] [llvm] r136969 - in /llvm/trunk/lib/Target/ARM: AsmParser/ARMAsmParser.cpp Disassembler/ARMDisassemblerCore.cpp InstPrinter/ARMInstPrinter.cpp MCTargetDesc/ARMMCCodeEmitter.cpp

Jim Grosbach grosbach at apple.com
Fri Aug 5 09:11:38 PDT 2011


Author: grosbach
Date: Fri Aug  5 11:11:38 2011
New Revision: 136969

URL: http://llvm.org/viewvc/llvm-project?rev=136969&view=rev
Log:
ARM simplify the postidx_reg operand encoding.

The immediate portion of the operand is just a boolean (the 'U' bit indicating
add vs. subtract). Treat it as such.

Modified:
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
    llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
    llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
    llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=136969&r1=136968&r2=136969&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Fri Aug  5 11:11:38 2011
@@ -1093,8 +1093,7 @@
     OS << ">";
     break;
   case PostIndexRegister:
-    OS << "post-idx register " 
-       << getAddrOpcStr(ARM_AM::getAM3Op(PostIdxReg.Imm))
+    OS << "post-idx register " << (PostIdxReg.Imm ? "" : "-")
        << PostIdxReg.RegNum
        << ">";
     break;
@@ -1872,14 +1871,14 @@
   AsmToken Tok = Parser.getTok();
   SMLoc S = Tok.getLoc();
   bool haveEaten = false;
-  unsigned Imm = ARM_AM::getAM3Opc(ARM_AM::add, 0);
+  bool isAdd = true;
   int Reg = -1;
   if (Tok.is(AsmToken::Plus)) {
     Parser.Lex(); // Eat the '+' token.
     haveEaten = true;
   } else if (Tok.is(AsmToken::Minus)) {
     Parser.Lex(); // Eat the '-' token.
-    Imm = ARM_AM::getAM3Opc(ARM_AM::sub, 0);
+    isAdd = false;
     haveEaten = true;
   }
   if (Parser.getTok().is(AsmToken::Identifier))
@@ -1892,7 +1891,7 @@
   }
   SMLoc E = Parser.getTok().getLoc();
 
-  Operands.push_back(ARMOperand::CreatePostIdxReg(Reg, Imm, S, E));
+  Operands.push_back(ARMOperand::CreatePostIdxReg(Reg, isAdd, S, E));
 
   return MatchOperand_Success;
 }

Modified: llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp?rev=136969&r1=136968&r2=136969&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp (original)
+++ llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp Fri Aug  5 11:11:38 2011
@@ -1543,10 +1543,16 @@
     ++OpIdx;
   } else {
     // Disassemble the offset reg (Rm).
-    unsigned Offset = ARM_AM::getAM3Opc(AddrOpcode, 0);
     MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID,
                                                        decodeRm(insn))));
-    MI.addOperand(MCOperand::CreateImm(Offset));
+    // FIXME: Remove the 'else' once done w/ addrmode3 refactor.
+    if (Opcode == ARM::STRHTr || Opcode == ARM::LDRSBTr ||
+        Opcode == ARM::LDRHTr || Opcode == ARM::LDRSHTr)
+      MI.addOperand(MCOperand::CreateImm(getUBit(insn)));
+    else {
+      unsigned Offset = ARM_AM::getAM3Opc(AddrOpcode, 0);
+      MI.addOperand(MCOperand::CreateImm(Offset));
+    }
     OpIdx += 2;
   }
 

Modified: llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp?rev=136969&r1=136968&r2=136969&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp Fri Aug  5 11:11:38 2011
@@ -387,8 +387,7 @@
   const MCOperand &MO1 = MI->getOperand(OpNum);
   const MCOperand &MO2 = MI->getOperand(OpNum+1);
 
-  O << getAddrOpcStr(ARM_AM::getAM3Op(MO2.getImm()))
-    << getRegisterName(MO1.getReg());
+  O << (MO2.getImm() ? "" : "-") << getRegisterName(MO1.getReg());
 }
 
 void ARMInstPrinter::printPostIdxImm8s4Operand(const MCInst *MI,

Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp?rev=136969&r1=136968&r2=136969&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp Fri Aug  5 11:11:38 2011
@@ -812,8 +812,7 @@
   // {3-0}    Rm
   const MCOperand &MO = MI.getOperand(OpIdx);
   const MCOperand &MO1 = MI.getOperand(OpIdx+1);
-  unsigned Imm = MO1.getImm();
-  bool isAdd = ARM_AM::getAM3Op(Imm) == ARM_AM::add;
+  bool isAdd = MO1.getImm() != 0;
   return getARMRegisterNumbering(MO.getReg()) | (isAdd << 4);
 }
 





More information about the llvm-commits mailing list