Correct writeback handling of duplicating VLD instructions. Discovered by randomized...
authorOwen Anderson <resistor@mac.com>
Mon, 22 Aug 2011 18:22:06 +0000 (18:22 +0000)
committerOwen Anderson <resistor@mac.com>
Mon, 22 Aug 2011 18:22:06 +0000 (18:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138251 91177308-0d34-0410-b5e6-96231b3b80d8

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

index ebcb798969cbc84ecb8f6ce8a9a8aadd03d75eaf..725a8a2abd4aaec3e902c063bd6d712ff88a4310 100644 (file)
@@ -1992,7 +1992,7 @@ static DecodeStatus DecodeVLD1DupInstruction(llvm::MCInst &Inst, unsigned Insn,
   if (regs == 2) {
     CHECK(S, DecodeDPRRegisterClass(Inst, (Rd+1)%32, Address, Decoder));
   }
-  if (Rm == 0xD) {
+  if (Rm != 0xF) {
     CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
   }
 
@@ -2023,7 +2023,7 @@ static DecodeStatus DecodeVLD2DupInstruction(llvm::MCInst &Inst, unsigned Insn,
 
   CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
   CHECK(S, DecodeDPRRegisterClass(Inst, (Rd+inc)%32, Address, Decoder));
-  if (Rm == 0xD) {
+  if (Rm != 0xF) {
     CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
   }
 
@@ -2052,7 +2052,7 @@ static DecodeStatus DecodeVLD3DupInstruction(llvm::MCInst &Inst, unsigned Insn,
   CHECK(S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder));
   CHECK(S, DecodeDPRRegisterClass(Inst, (Rd+inc)%32, Address, Decoder));
   CHECK(S, DecodeDPRRegisterClass(Inst, (Rd+2*inc)%32, Address, Decoder));
-  if (Rm == 0xD) {
+  if (Rm != 0xF) {
     CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
   }
 
@@ -2097,7 +2097,7 @@ static DecodeStatus DecodeVLD4DupInstruction(llvm::MCInst &Inst, unsigned Insn,
   CHECK(S, DecodeDPRRegisterClass(Inst, (Rd+inc)%32, Address, Decoder));
   CHECK(S, DecodeDPRRegisterClass(Inst, (Rd+2*inc)%32, Address, Decoder));
   CHECK(S, DecodeDPRRegisterClass(Inst, (Rd+3*inc)%32, Address, Decoder));
-  if (Rm == 0xD) {
+  if (Rm != 0xF) {
     CHECK(S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder));
   }
 
index d9482d7006cecf2c1e047e4e46677899c99e1678..b909c4bb4bc3483485d2cbbaf9cb5946c4098837 100644 (file)
 # CHECK: vst4.16       {d17[3], d19[3], d21[3], d23[3]}, [r0, :64]
 0x4f 0x1b 0xc0 0xf4
 # CHECK: vst4.32       {d17[0], d19[0], d21[0], d23[0]}, [r0]
+
+0x0 0xc 0xa0 0xf4
+# CHECK: vld1.8        {d0[]}, [r0], r0
+