Fix ARM disassembly of VLD instructions with writebacks.  And add test a case
authorKevin Enderby <enderby@apple.com>
Wed, 11 Apr 2012 00:25:40 +0000 (00:25 +0000)
committerKevin Enderby <enderby@apple.com>
Wed, 11 Apr 2012 00:25:40 +0000 (00:25 +0000)
for all opcodes handed by DecodeVLDInstruction() in ARMDisassembler.cpp .

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

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

index dba5b6ef821eb03252d5f5561e7e98bbce7e3113..e1d63fac9060a77d0011f7d2559ea4553c39c03e 100644 (file)
@@ -2262,6 +2262,8 @@ static DecodeStatus DecodeVLDInstruction(MCInst &Inst, unsigned Insn,
     case ARM::VLD2b8wb_register:
     case ARM::VLD2b16wb_register:
     case ARM::VLD2b32wb_register:
+      Inst.addOperand(MCOperand::CreateImm(0));
+      break;
     case ARM::VLD3d8_UPD:
     case ARM::VLD3d16_UPD:
     case ARM::VLD3d32_UPD:
@@ -2330,6 +2332,16 @@ static DecodeStatus DecodeVLDInstruction(MCInst &Inst, unsigned Insn,
         !Check(S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
       return MCDisassembler::Fail;
     break;
+  case ARM::VLD2d8wb_fixed:
+  case ARM::VLD2d16wb_fixed:
+  case ARM::VLD2d32wb_fixed:
+  case ARM::VLD2b8wb_fixed:
+  case ARM::VLD2b16wb_fixed:
+  case ARM::VLD2b32wb_fixed:
+  case ARM::VLD2q8wb_fixed:
+  case ARM::VLD2q16wb_fixed:
+  case ARM::VLD2q32wb_fixed:
+    break;
   }
 
   return S;
index 998e9e86f0a008a8bfb81dce82089e313a5e0dc8..58fe20eaa275890751c3ec8f8dcaf5fbe1ea0f19 100644 (file)
 # CHECK: vst4.16       {d8, d10, d12, d14}, [r4] 
 0x8f 0x81 0x04 0xf4
 # CHECK: vst4.32       {d8, d10, d12, d14}, [r4] 
+
+# rdar://11204059
+0x0d 0x87 0x24 0xf4
+# CHECK: vld1.8        {d8}, [r4]!             
+0x4d 0x87 0x24 0xf4
+# CHECK: vld1.16       {d8}, [r4]!             
+0x8d 0x87 0x24 0xf4
+# CHECK: vld1.32       {d8}, [r4]!             
+0xcd 0x87 0x24 0xf4
+# CHECK: vld1.64       {d8}, [r4]!             
+0x06 0x87 0x24 0xf4
+# CHECK: vld1.8        {d8}, [r4], r6          
+0x46 0x87 0x24 0xf4
+# CHECK: vld1.16       {d8}, [r4], r6          
+0x86 0x87 0x24 0xf4
+# CHECK: vld1.32       {d8}, [r4], r6          
+0xc6 0x87 0x24 0xf4
+# CHECK: vld1.64       {d8}, [r4], r6          
+0x0d 0x8a 0x24 0xf4
+# CHECK: vld1.8        {d8, d9}, [r4]!         
+0x4d 0x8a 0x24 0xf4
+# CHECK: vld1.16       {d8, d9}, [r4]!         
+0x8d 0x8a 0x24 0xf4
+# CHECK: vld1.32       {d8, d9}, [r4]!         
+0xcd 0x8a 0x24 0xf4
+# CHECK: vld1.64       {d8, d9}, [r4]!         
+0x06 0x8a 0x24 0xf4
+# CHECK: vld1.8        {d8, d9}, [r4], r6      
+0x46 0x8a 0x24 0xf4
+# CHECK: vld1.16       {d8, d9}, [r4], r6      
+0x86 0x8a 0x24 0xf4
+# CHECK: vld1.32       {d8, d9}, [r4], r6      
+0xc6 0x8a 0x24 0xf4
+# CHECK: vld1.64       {d8, d9}, [r4], r6      
+0x0d 0x86 0x24 0xf4
+# CHECK: vld1.8        {d8, d9, d10}, [r4]!    
+0x4d 0x86 0x24 0xf4
+# CHECK: vld1.16       {d8, d9, d10}, [r4]!    
+0x8d 0x86 0x24 0xf4
+# CHECK: vld1.32       {d8, d9, d10}, [r4]!    
+0xcd 0x86 0x24 0xf4
+# CHECK: vld1.64       {d8, d9, d10}, [r4]!    
+0x06 0x86 0x24 0xf4
+# CHECK: vld1.8        {d8, d9, d10}, [r4], r6 
+0x46 0x86 0x24 0xf4
+# CHECK: vld1.16       {d8, d9, d10}, [r4], r6 
+0x86 0x86 0x24 0xf4
+# CHECK: vld1.32       {d8, d9, d10}, [r4], r6 
+0xc6 0x86 0x24 0xf4
+# CHECK: vld1.64       {d8, d9, d10}, [r4], r6 
+0x0d 0x82 0x24 0xf4
+# CHECK: vld1.8        {d8, d9, d10, d11}, [r4]! 
+0x4d 0x82 0x24 0xf4
+# CHECK: vld1.16       {d8, d9, d10, d11}, [r4]! 
+0x8d 0x82 0x24 0xf4
+# CHECK: vld1.32       {d8, d9, d10, d11}, [r4]! 
+0xcd 0x82 0x24 0xf4
+# CHECK: vld1.64       {d8, d9, d10, d11}, [r4]! 
+0x06 0x82 0x24 0xf4
+# CHECK: vld1.8        {d8, d9, d10, d11}, [r4], r6 
+0x46 0x82 0x24 0xf4
+# CHECK: vld1.16       {d8, d9, d10, d11}, [r4], r6 
+0x86 0x82 0x24 0xf4
+# CHECK: vld1.32       {d8, d9, d10, d11}, [r4], r6 
+0xc6 0x82 0x24 0xf4
+# CHECK: vld1.64       {d8, d9, d10, d11}, [r4], r6 
+0x0d 0x88 0x24 0xf4
+# CHECK: vld2.8        {d8, d9}, [r4]!         
+0x4d 0x88 0x24 0xf4
+# CHECK: vld2.16       {d8, d9}, [r4]!         
+0x8d 0x88 0x24 0xf4
+# CHECK: vld2.32       {d8, d9}, [r4]!         
+0x06 0x88 0x24 0xf4
+# CHECK: vld2.8        {d8, d9}, [r4], r6      
+0x46 0x88 0x24 0xf4
+# CHECK: vld2.16       {d8, d9}, [r4], r6      
+0x86 0x88 0x24 0xf4
+# CHECK: vld2.32       {d8, d9}, [r4], r6      
+0x0d 0x89 0x24 0xf4
+# CHECK: vld2.8        {d8, d10}, [r4]!        
+0x4d 0x89 0x24 0xf4
+# CHECK: vld2.16       {d8, d10}, [r4]!        
+0x8d 0x89 0x24 0xf4
+# CHECK: vld2.32       {d8, d10}, [r4]!        
+0x06 0x89 0x24 0xf4
+# CHECK: vld2.8        {d8, d10}, [r4], r6     
+0x46 0x89 0x24 0xf4
+# CHECK: vld2.16       {d8, d10}, [r4], r6     
+0x86 0x89 0x24 0xf4
+# CHECK: vld2.32       {d8, d10}, [r4], r6     
+0x0d 0x84 0x24 0xf4
+# CHECK: vld3.8        {d8, d9, d10}, [r4]!    
+0x4d 0x84 0x24 0xf4
+# CHECK: vld3.16       {d8, d9, d10}, [r4]!    
+0x8d 0x84 0x24 0xf4
+# CHECK: vld3.32       {d8, d9, d10}, [r4]!    
+0x06 0x85 0x24 0xf4
+# CHECK: vld3.8        {d8, d10, d12}, [r4], r6 
+0x46 0x85 0x24 0xf4
+# CHECK: vld3.16       {d8, d10, d12}, [r4], r6 
+0x86 0x85 0x24 0xf4
+# CHECK: vld3.32       {d8, d10, d12}, [r4], r6 
+0x0d 0x80 0x24 0xf4
+# CHECK: vld4.8        {d8, d9, d10, d11}, [r4]! 
+0x4d 0x80 0x24 0xf4
+# CHECK: vld4.16       {d8, d9, d10, d11}, [r4]! 
+0x8d 0x80 0x24 0xf4
+# CHECK: vld4.32       {d8, d9, d10, d11}, [r4]! 
+0x06 0x81 0x24 0xf4
+# CHECK: vld4.8        {d8, d10, d12, d14}, [r4], r6 
+0x46 0x81 0x24 0xf4
+# CHECK: vld4.16       {d8, d10, d12, d14}, [r4], r6 
+0x86 0x81 0x24 0xf4
+# CHECK: vld4.32       {d8, d10, d12, d14}, [r4], r6 
+0x4f 0x8a 0x24 0xf4
+# CHECK: vld1.16       {d8, d9}, [r4]          
+0x8f 0x8a 0x24 0xf4
+# CHECK: vld1.32       {d8, d9}, [r4]          
+0xcf 0x8a 0x24 0xf4
+# CHECK: vld1.64       {d8, d9}, [r4]          
+0x0f 0x8a 0x24 0xf4
+# CHECK: vld1.8        {d8, d9}, [r4]          
+0x4f 0x88 0x24 0xf4
+# CHECK: vld2.16       {d8, d9}, [r4]          
+0x8f 0x88 0x24 0xf4
+# CHECK: vld2.32       {d8, d9}, [r4]          
+0x0f 0x88 0x24 0xf4
+# CHECK: vld2.8        {d8, d9}, [r4]          
+0x4d 0x88 0x24 0xf4
+# CHECK: vld2.16       {d8, d9}, [r4]!         
+0x46 0x88 0x24 0xf4
+# CHECK: vld2.16       {d8, d9}, [r4], r6      
+0x8d 0x88 0x24 0xf4
+# CHECK: vld2.32       {d8, d9}, [r4]!         
+0x86 0x88 0x24 0xf4
+# CHECK: vld2.32       {d8, d9}, [r4], r6      
+0x0d 0x88 0x24 0xf4
+# CHECK: vld2.8        {d8, d9}, [r4]!         
+0x06 0x88 0x24 0xf4
+# CHECK: vld2.8        {d8, d9}, [r4], r6      
+0x4f 0x89 0x24 0xf4
+# CHECK: vld2.16       {d8, d10}, [r4]         
+0x8f 0x89 0x24 0xf4
+# CHECK: vld2.32       {d8, d10}, [r4]         
+0x0f 0x89 0x24 0xf4
+# CHECK: vld2.8        {d8, d10}, [r4]         
+0x4d 0x83 0x24 0xf4
+# CHECK: vld2.16       {d8, d9, d10, d11}, [r4]! 
+0x46 0x83 0x24 0xf4
+# CHECK: vld2.16       {d8, d9, d10, d11}, [r4], r6 
+0x8d 0x83 0x24 0xf4
+# CHECK: vld2.32       {d8, d9, d10, d11}, [r4]! 
+0x86 0x83 0x24 0xf4
+# CHECK: vld2.32       {d8, d9, d10, d11}, [r4], r6 
+0x0d 0x83 0x24 0xf4
+# CHECK: vld2.8        {d8, d9, d10, d11}, [r4]! 
+0x06 0x83 0x24 0xf4
+# CHECK: vld2.8        {d8, d9, d10, d11}, [r4], r6 
+0x0f 0x84 0x24 0xf4
+# CHECK: vld3.8        {d8, d9, d10}, [r4]     
+0x4f 0x84 0x24 0xf4
+# CHECK: vld3.16       {d8, d9, d10}, [r4]     
+0x8f 0x84 0x24 0xf4
+# CHECK: vld3.32       {d8, d9, d10}, [r4]     
+0x0f 0x80 0x24 0xf4
+# CHECK: vld4.8        {d8, d9, d10, d11}, [r4] 
+0x4f 0x80 0x24 0xf4
+# CHECK: vld4.16       {d8, d9, d10, d11}, [r4] 
+0x8f 0x80 0x24 0xf4
+# CHECK: vld4.32       {d8, d9, d10, d11}, [r4] 
+0x0f 0x85 0x24 0xf4
+# CHECK: vld3.8        {d8, d10, d12}, [r4]    
+0x4f 0x85 0x24 0xf4
+# CHECK: vld3.16       {d8, d10, d12}, [r4]    
+0x8f 0x85 0x24 0xf4
+# CHECK: vld3.32       {d8, d10, d12}, [r4]    
+0x0f 0x81 0x24 0xf4
+# CHECK: vld4.8        {d8, d10, d12, d14}, [r4] 
+0x4f 0x81 0x24 0xf4
+# CHECK: vld4.16       {d8, d10, d12, d14}, [r4] 
+0x8f 0x81 0x24 0xf4
+# CHECK: vld4.32       {d8, d10, d12, d14}, [r4] 
index f8e7dbe5474db3a37c15a14447595dc2aeba855a..efe7e60ddaed4968e6fcdf6302d6b560190f3d7b 100644 (file)
 # CHECK: vst4.16       {d8, d10, d12, d14}, [r4]
 0x04 0xf9 0x8f 0x81
 # CHECK: vst4.32       {d8, d10, d12, d14}, [r4]
+
+# rdar://11204059
+0x24 0xf9 0x0d 0x87
+# CHECK: vld1.8        {d8}, [r4]!             
+0x24 0xf9 0x4d 0x87
+# CHECK: vld1.16       {d8}, [r4]!             
+0x24 0xf9 0x8d 0x87
+# CHECK: vld1.32       {d8}, [r4]!             
+0x24 0xf9 0xcd 0x87
+# CHECK: vld1.64       {d8}, [r4]!             
+0x24 0xf9 0x06 0x87
+# CHECK: vld1.8        {d8}, [r4], r6          
+0x24 0xf9 0x46 0x87
+# CHECK: vld1.16       {d8}, [r4], r6          
+0x24 0xf9 0x86 0x87
+# CHECK: vld1.32       {d8}, [r4], r6          
+0x24 0xf9 0xc6 0x87
+# CHECK: vld1.64       {d8}, [r4], r6          
+0x24 0xf9 0x0d 0x8a
+# CHECK: vld1.8        {d8, d9}, [r4]!         
+0x24 0xf9 0x4d 0x8a
+# CHECK: vld1.16       {d8, d9}, [r4]!         
+0x24 0xf9 0x8d 0x8a
+# CHECK: vld1.32       {d8, d9}, [r4]!         
+0x24 0xf9 0xcd 0x8a
+# CHECK: vld1.64       {d8, d9}, [r4]!         
+0x24 0xf9 0x06 0x8a
+# CHECK: vld1.8        {d8, d9}, [r4], r6      
+0x24 0xf9 0x46 0x8a
+# CHECK: vld1.16       {d8, d9}, [r4], r6      
+0x24 0xf9 0x86 0x8a
+# CHECK: vld1.32       {d8, d9}, [r4], r6      
+0x24 0xf9 0xc6 0x8a
+# CHECK: vld1.64       {d8, d9}, [r4], r6      
+0x24 0xf9 0x0d 0x86
+# CHECK: vld1.8        {d8, d9, d10}, [r4]!    
+0x24 0xf9 0x4d 0x86
+# CHECK: vld1.16       {d8, d9, d10}, [r4]!    
+0x24 0xf9 0x8d 0x86
+# CHECK: vld1.32       {d8, d9, d10}, [r4]!    
+0x24 0xf9 0xcd 0x86
+# CHECK: vld1.64       {d8, d9, d10}, [r4]!    
+0x24 0xf9 0x06 0x86
+# CHECK: vld1.8        {d8, d9, d10}, [r4], r6 
+0x24 0xf9 0x46 0x86
+# CHECK: vld1.16       {d8, d9, d10}, [r4], r6 
+0x24 0xf9 0x86 0x86
+# CHECK: vld1.32       {d8, d9, d10}, [r4], r6 
+0x24 0xf9 0xc6 0x86
+# CHECK: vld1.64       {d8, d9, d10}, [r4], r6 
+0x24 0xf9 0x0d 0x82
+# CHECK: vld1.8        {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x4d 0x82
+# CHECK: vld1.16       {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x8d 0x82
+# CHECK: vld1.32       {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0xcd 0x82
+# CHECK: vld1.64       {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x06 0x82
+# CHECK: vld1.8        {d8, d9, d10, d11}, [r4], r6 
+0x24 0xf9 0x46 0x82
+# CHECK: vld1.16       {d8, d9, d10, d11}, [r4], r6 
+0x24 0xf9 0x86 0x82
+# CHECK: vld1.32       {d8, d9, d10, d11}, [r4], r6 
+0x24 0xf9 0xc6 0x82
+# CHECK: vld1.64       {d8, d9, d10, d11}, [r4], r6 
+0x24 0xf9 0x0d 0x88
+# CHECK: vld2.8        {d8, d9}, [r4]!         
+0x24 0xf9 0x4d 0x88
+# CHECK: vld2.16       {d8, d9}, [r4]!         
+0x24 0xf9 0x8d 0x88
+# CHECK: vld2.32       {d8, d9}, [r4]!         
+0x24 0xf9 0x06 0x88
+# CHECK: vld2.8        {d8, d9}, [r4], r6      
+0x24 0xf9 0x46 0x88
+# CHECK: vld2.16       {d8, d9}, [r4], r6      
+0x24 0xf9 0x86 0x88
+# CHECK: vld2.32       {d8, d9}, [r4], r6      
+0x24 0xf9 0x0d 0x89
+# CHECK: vld2.8        {d8, d10}, [r4]!        
+0x24 0xf9 0x4d 0x89
+# CHECK: vld2.16       {d8, d10}, [r4]!        
+0x24 0xf9 0x8d 0x89
+# CHECK: vld2.32       {d8, d10}, [r4]!        
+0x24 0xf9 0x06 0x89
+# CHECK: vld2.8        {d8, d10}, [r4], r6     
+0x24 0xf9 0x46 0x89
+# CHECK: vld2.16       {d8, d10}, [r4], r6     
+0x24 0xf9 0x86 0x89
+# CHECK: vld2.32       {d8, d10}, [r4], r6     
+0x24 0xf9 0x0d 0x84
+# CHECK: vld3.8        {d8, d9, d10}, [r4]!    
+0x24 0xf9 0x4d 0x84
+# CHECK: vld3.16       {d8, d9, d10}, [r4]!    
+0x24 0xf9 0x8d 0x84
+# CHECK: vld3.32       {d8, d9, d10}, [r4]!    
+0x24 0xf9 0x06 0x85
+# CHECK: vld3.8        {d8, d10, d12}, [r4], r6 
+0x24 0xf9 0x46 0x85
+# CHECK: vld3.16       {d8, d10, d12}, [r4], r6 
+0x24 0xf9 0x86 0x85
+# CHECK: vld3.32       {d8, d10, d12}, [r4], r6 
+0x24 0xf9 0x0d 0x80
+# CHECK: vld4.8        {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x4d 0x80
+# CHECK: vld4.16       {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x8d 0x80
+# CHECK: vld4.32       {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x06 0x81
+# CHECK: vld4.8        {d8, d10, d12, d14}, [r4], r6 
+0x24 0xf9 0x46 0x81
+# CHECK: vld4.16       {d8, d10, d12, d14}, [r4], r6 
+0x24 0xf9 0x86 0x81
+# CHECK: vld4.32       {d8, d10, d12, d14}, [r4], r6 
+0x24 0xf9 0x4f 0x8a
+# CHECK: vld1.16       {d8, d9}, [r4]          
+0x24 0xf9 0x8f 0x8a
+# CHECK: vld1.32       {d8, d9}, [r4]          
+0x24 0xf9 0xcf 0x8a
+# CHECK: vld1.64       {d8, d9}, [r4]          
+0x24 0xf9 0x0f 0x8a
+# CHECK: vld1.8        {d8, d9}, [r4]          
+0x24 0xf9 0x4f 0x88
+# CHECK: vld2.16       {d8, d9}, [r4]          
+0x24 0xf9 0x8f 0x88
+# CHECK: vld2.32       {d8, d9}, [r4]          
+0x24 0xf9 0x0f 0x88
+# CHECK: vld2.8        {d8, d9}, [r4]          
+0x24 0xf9 0x4d 0x88
+# CHECK: vld2.16       {d8, d9}, [r4]!         
+0x24 0xf9 0x46 0x88
+# CHECK: vld2.16       {d8, d9}, [r4], r6      
+0x24 0xf9 0x8d 0x88
+# CHECK: vld2.32       {d8, d9}, [r4]!         
+0x24 0xf9 0x86 0x88
+# CHECK: vld2.32       {d8, d9}, [r4], r6      
+0x24 0xf9 0x0d 0x88
+# CHECK: vld2.8        {d8, d9}, [r4]!         
+0x24 0xf9 0x06 0x88
+# CHECK: vld2.8        {d8, d9}, [r4], r6      
+0x24 0xf9 0x4f 0x89
+# CHECK: vld2.16       {d8, d10}, [r4]         
+0x24 0xf9 0x8f 0x89
+# CHECK: vld2.32       {d8, d10}, [r4]         
+0x24 0xf9 0x0f 0x89
+# CHECK: vld2.8        {d8, d10}, [r4]         
+0x24 0xf9 0x4d 0x83
+# CHECK: vld2.16       {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x46 0x83
+# CHECK: vld2.16       {d8, d9, d10, d11}, [r4], r6 
+0x24 0xf9 0x8d 0x83
+# CHECK: vld2.32       {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x86 0x83
+# CHECK: vld2.32       {d8, d9, d10, d11}, [r4], r6 
+0x24 0xf9 0x0d 0x83
+# CHECK: vld2.8        {d8, d9, d10, d11}, [r4]! 
+0x24 0xf9 0x06 0x83
+# CHECK: vld2.8        {d8, d9, d10, d11}, [r4], r6 
+0x24 0xf9 0x0f 0x84
+# CHECK: vld3.8        {d8, d9, d10}, [r4]     
+0x24 0xf9 0x4f 0x84
+# CHECK: vld3.16       {d8, d9, d10}, [r4]     
+0x24 0xf9 0x8f 0x84
+# CHECK: vld3.32       {d8, d9, d10}, [r4]     
+0x24 0xf9 0x0f 0x80
+# CHECK: vld4.8        {d8, d9, d10, d11}, [r4] 
+0x24 0xf9 0x4f 0x80
+# CHECK: vld4.16       {d8, d9, d10, d11}, [r4] 
+0x24 0xf9 0x8f 0x80
+# CHECK: vld4.32       {d8, d9, d10, d11}, [r4] 
+0x24 0xf9 0x0f 0x85
+# CHECK: vld3.8        {d8, d10, d12}, [r4]    
+0x24 0xf9 0x4f 0x85
+# CHECK: vld3.16       {d8, d10, d12}, [r4]    
+0x24 0xf9 0x8f 0x85
+# CHECK: vld3.32       {d8, d10, d12}, [r4]    
+0x24 0xf9 0x0f 0x81
+# CHECK: vld4.8        {d8, d10, d12, d14}, [r4] 
+0x24 0xf9 0x4f 0x81
+# CHECK: vld4.16       {d8, d10, d12, d14}, [r4] 
+0x24 0xf9 0x8f 0x81
+# CHECK: vld4.32       {d8, d10, d12, d14}, [r4]