llvm.org GIT mirror llvm / fae96f1
Fix instruction description of VMOV (between two ARM core registers and two single-precision resiters) (and do it properly this time! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159989 91177308-0d34-0410-b5e6-96231b3b80d8 Richard Barton 8 years ago
4 changed file(s) with 49 addition(s) and 9 deletion(s). Raw diff Collapse all Expand all
566566 bits<4> Rt2;
567567
568568 // Encode instruction operands.
569 let Inst{3-0} = src1{3-0};
570 let Inst{5} = src1{4};
569 let Inst{3-0} = src1{4-1};
570 let Inst{5} = src1{0};
571571 let Inst{15-12} = Rt;
572572 let Inst{19-16} = Rt2;
573573
616616 bits<4> src2;
617617
618618 // Encode instruction operands.
619 let Inst{3-0} = dst1{3-0};
620 let Inst{5} = dst1{4};
619 let Inst{3-0} = dst1{4-1};
620 let Inst{5} = dst1{0};
621621 let Inst{15-12} = src1;
622622 let Inst{19-16} = src2;
623623
41974197 DecodeStatus S = MCDisassembler::Success;
41984198 unsigned Rt = fieldFromInstruction32(Insn, 12, 4);
41994199 unsigned Rt2 = fieldFromInstruction32(Insn, 16, 4);
4200 unsigned Rm = fieldFromInstruction32(Insn, 0, 4);
4200 unsigned Rm = fieldFromInstruction32(Insn, 5, 1);
42014201 unsigned pred = fieldFromInstruction32(Insn, 28, 4);
4202 Rm |= fieldFromInstruction32(Insn, 5, 1) << 4;
4202 Rm |= fieldFromInstruction32(Insn, 0, 4) << 1;
42034203
42044204 if (Rt == 0xF || Rt2 == 0xF || Rm == 0x1F)
42054205 S = MCDisassembler::SoftFail;
42234223 DecodeStatus S = MCDisassembler::Success;
42244224 unsigned Rt = fieldFromInstruction32(Insn, 12, 4);
42254225 unsigned Rt2 = fieldFromInstruction32(Insn, 16, 4);
4226 unsigned Rm = fieldFromInstruction32(Insn, 0, 4);
4226 unsigned Rm = fieldFromInstruction32(Insn, 5, 1);
42274227 unsigned pred = fieldFromInstruction32(Insn, 28, 4);
4228 Rm |= fieldFromInstruction32(Insn, 5, 1) << 4;
4228 Rm |= fieldFromInstruction32(Insn, 0, 4) << 1;
42294229
42304230 if (Rt == 0xF || Rt2 == 0xF || Rm == 0x1F)
42314231 S = MCDisassembler::SoftFail;
194194
195195 @ CHECK: vmov r0, r1, d16 @ encoding: [0x30,0x0b,0x51,0xec]
196196 vmov r0, r1, d16
197
198 @ Between two single precision registers and two core registers
199 vmov s3, s4, r1, r2
200 vmov s2, s3, r1, r2
201 vmov r1, r2, s3, s4
202 vmov r1, r2, s2, s3
203 @ CHECK: vmov s3, s4, r1, r2 @ encoding: [0x31,0x1a,0x42,0xec]
204 @ CHECK: vmov s2, s3, r1, r2 @ encoding: [0x11,0x1a,0x42,0xec]
205 @ CHECK: vmov r1, r2, s3, s4 @ encoding: [0x31,0x1a,0x52,0xec]
206 @ CHECK: vmov r1, r2, s2, s3 @ encoding: [0x11,0x1a,0x52,0xec]
207
208 @ Between one double precision register and two core registers
209 vmov d15, r1, r2
210 vmov d16, r1, r2
211 vmov r1, r2, d15
212 vmov r1, r2, d16
213 @ CHECK: vmov d15, r1, r2 @ encoding: [0x1f,0x1b,0x42,0xec]
214 @ CHECK: vmov d16, r1, r2 @ encoding: [0x30,0x1b,0x42,0xec]
215 @ CHECK: vmov r1, r2, d15 @ encoding: [0x1f,0x1b,0x52,0xec]
216 @ CHECK: vmov r1, r2, d16 @ encoding: [0x30,0x1b,0x52,0xec]
217
197218
198219 @ CHECK: vldr d17, [r0] @ encoding: [0x00,0x1b,0xd0,0xed]
199220 @ CHECK: vldr s0, [lr] @ encoding: [0x00,0x0a,0x9e,0xed]
18941894 # CHECK: vst4.8 {d0[0], d1[0], d2[0], d3[0]}, [r0]!
18951895
18961896 0x3d 0x2a 0x5e 0x6c
1897 # CHECK: vmovvs r2, lr, s29, s30
1897 # CHECK: vmovvs r2, lr, s27, s28
1898
1899 0x31 0x1a 0x42 0xec
1900 0x11 0x1a 0x42 0xec
1901 0x31 0x1a 0x52 0xec
1902 0x11 0x1a 0x52 0xec
1903 # CHECK: vmov s3, s4, r1, r2
1904 # CHECK: vmov s2, s3, r1, r2
1905 # CHECK: vmov r1, r2, s3, s4
1906 # CHECK: vmov r1, r2, s2, s3
1907
1908 0x1f 0x1b 0x42 0xec
1909 0x30 0x1b 0x42 0xec
1910 0x1f 0x1b 0x52 0xec
1911 0x30 0x1b 0x52 0xec
1912 # CHECK: vmov d15, r1, r2
1913 # CHECK: vmov d16, r1, r2
1914 # CHECK: vmov r1, r2, d15
1915 # CHECK: vmov r1, r2, d16
1916
18981917
18991918 0xe9 0x1a 0xb2 0x4e
19001919 # CHECK: vcvttmi.f32.f16 s2, s19