The opcode names ("tLDM", "tLDM_UPD") used for conflict resolution have been stale...
authorJohnny Chen <johnny.chen@apple.com>
Thu, 24 Mar 2011 23:42:31 +0000 (23:42 +0000)
committerJohnny Chen <johnny.chen@apple.com>
Thu, 24 Mar 2011 23:42:31 +0000 (23:42 +0000)
the change to ("tLDMIA", "tLDMIA_UPD").  Update the conflict resolution code and add
test cases for that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128247 91177308-0d34-0410-b5e6-96231b3b80d8

test/MC/Disassembler/ARM/thumb-tests.txt
utils/TableGen/ARMDecoderEmitter.cpp

index 895769c3dea55928faef7e4ea321817726d7181b..ae28082decaca860c20837ada9e2d7e31fc9d456 100644 (file)
 
 # CHECK:       stmia   r5!, {r0, r1, r2, r3, r4}
 0x1f 0xc5
+
+# CHECK:       ldmia   r5, {r0, r1, r2, r3, r4, r5}
+0x3f 0xcd
+
+# CHECK:       ldmia   r5!, {r0, r1, r2, r3, r4}
+0x1f 0xcd
index 728e6698159c284f04b00a7d9e72a1528356db61..914ea0ee94095fe47d18e6e81d1fe59b2aad458c 100644 (file)
@@ -1382,7 +1382,7 @@ bool ARMFilterChooser::emit(raw_ostream &o, unsigned &Indentation) {
     // 2. source registers are identical => VMOVQ; otherwise => VORRq
     // 3. LDR, LDRcp => return LDR for now.
     // FIXME: How can we distinguish between LDR and LDRcp?  Do we need to?
-    // 4. tLDM, tLDM_UPD => Rn = Inst{10-8}, reglist = Inst{7-0},
+    // 4. tLDMIA, tLDMIA_UPD => Rn = Inst{10-8}, reglist = Inst{7-0},
     //    wback = registers<Rn> = 0
     // NOTE: (tLDM, tLDM_UPD) resolution must come before Advanced SIMD
     //       addressing mode resolution!!!
@@ -1423,7 +1423,7 @@ bool ARMFilterChooser::emit(raw_ostream &o, unsigned &Indentation) {
         << "; // Returning LDR for {LDR, LDRcp}\n";
       return true;
     }
-    if (name1 == "tLDM" && name2 == "tLDM_UPD") {
+    if (name1 == "tLDMIA" && name2 == "tLDMIA_UPD") {
       // Inserting the opening curly brace for this case block.
       --Indentation; --Indentation;
       o.indent(Indentation) << "{\n";