Fix disassembly of some VST1 instructions.
authorOwen Anderson <resistor@mac.com>
Tue, 1 Nov 2011 22:18:13 +0000 (22:18 +0000)
committerOwen Anderson <resistor@mac.com>
Tue, 1 Nov 2011 22:18:13 +0000 (22:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143507 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/Disassembler/ARMDisassembler.cpp
test/MC/Disassembler/ARM/neon.txt

index e81cc76c9fb663c4c5cf145b0da07d6dfe672cf2..6927d2d053ce2e022c7659829e1be38af4216362 100644 (file)
@@ -2240,13 +2240,27 @@ static DecodeStatus DecodeVSTInstruction(llvm::MCInst &Inst, unsigned Insn,
     return MCDisassembler::Fail;
 
   // AddrMode6 Offset (register)
-  if (Rm == 0xD)
-    Inst.addOperand(MCOperand::CreateReg(0));
-  else if (Rm != 0xF) {
-    if (!Check(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
-    return MCDisassembler::Fail;
+  switch (Inst.getOpcode()) {
+    default:
+      if (Rm == 0xD)
+        Inst.addOperand(MCOperand::CreateReg(0));
+      else if (Rm != 0xF) {
+        if (!Check(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
+          return MCDisassembler::Fail;
+      }
+      break;
+    case ARM::VST1d8wb_fixed:
+    case ARM::VST1d16wb_fixed:
+    case ARM::VST1d32wb_fixed:
+    case ARM::VST1d64wb_fixed:
+    case ARM::VST1q8wb_fixed:
+    case ARM::VST1q16wb_fixed:
+    case ARM::VST1q32wb_fixed:
+    case ARM::VST1q64wb_fixed:
+      break;
   }
 
+
   // First input register
   if (!Check(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
     return MCDisassembler::Fail;
index fe315f8eeb0d92cbf065167447bfca3d5e732165..1623a0ce4346d12dab0f33b6e852d774640c15db 100644 (file)
 # CHECK: vld1.8        {d23, d24, d25}, [r6, :64]!
 0x9d 0x62 0x6f 0xf4
 # CHECK: vld1.32       {d22, d23, d24, d25}, [pc, :64]!
-
+0x9d 0xaa 0x41 0xf4
+# CHECK: vst1.32       {d26, d27}, [r1, :64]!