simple-fp-encoding.s revision fae96f17b4b022fccd94a143698112a17d8ddf05
1@ RUN: llvm-mc -mcpu=cortex-a8 -triple armv7-apple-darwin -show-encoding < %s | FileCheck %s 2 3 vadd.f64 d16, d17, d16 4 vadd.f32 s0, s1, s0 5@ CHECK: vadd.f64 d16, d17, d16 @ encoding: [0xa0,0x0b,0x71,0xee] 6@ CHECK: vadd.f32 s0, s1, s0 @ encoding: [0x80,0x0a,0x30,0xee] 7 8 vsub.f64 d16, d17, d16 9 vsub.f32 s0, s1, s0 10@ CHECK: vsub.f64 d16, d17, d16 @ encoding: [0xe0,0x0b,0x71,0xee] 11@ CHECK: vsub.f32 s0, s1, s0 @ encoding: [0xc0,0x0a,0x30,0xee] 12 13 vdiv.f64 d16, d17, d16 14 vdiv.f32 s0, s1, s0 15 vdiv.f32 s5, s7 16 vdiv.f64 d5, d7 17 18@ CHECK: vdiv.f64 d16, d17, d16 @ encoding: [0xa0,0x0b,0xc1,0xee] 19@ CHECK: vdiv.f32 s0, s1, s0 @ encoding: [0x80,0x0a,0x80,0xee] 20@ CHECK: vdiv.f32 s5, s5, s7 @ encoding: [0xa3,0x2a,0xc2,0xee] 21@ CHECK: vdiv.f64 d5, d5, d7 @ encoding: [0x07,0x5b,0x85,0xee] 22 23 24 vmul.f64 d16, d17, d16 25 vmul.f64 d20, d17 26 vmul.f32 s0, s1, s0 27 vmul.f32 s11, s21 28 29 30@ CHECK: vmul.f64 d16, d17, d16 @ encoding: [0xa0,0x0b,0x61,0xee] 31@ CHECK: vmul.f64 d20, d20, d17 @ encoding: [0xa1,0x4b,0x64,0xee] 32@ CHECK: vmul.f32 s0, s1, s0 @ encoding: [0x80,0x0a,0x20,0xee] 33@ CHECK: vmul.f32 s11, s11, s21 @ encoding: [0xaa,0x5a,0x65,0xee] 34 35 vnmul.f64 d16, d17, d16 36 vnmul.f32 s0, s1, s0 37 38@ CHECK: vnmul.f64 d16, d17, d16 @ encoding: [0xe0,0x0b,0x61,0xee] 39@ CHECK: vnmul.f32 s0, s1, s0 @ encoding: [0xc0,0x0a,0x20,0xee] 40 41 vcmpe.f64 d17, d16 42 vcmpe.f32 s1, s0 43 44@ CHECK: vcmpe.f64 d17, d16 @ encoding: [0xe0,0x1b,0xf4,0xee] 45@ CHECK: vcmpe.f32 s1, s0 @ encoding: [0xc0,0x0a,0xf4,0xee] 46 47 vcmpe.f64 d16, #0 48 vcmpe.f32 s0, #0 49 50@ CHECK: vcmpe.f64 d16, #0 @ encoding: [0xc0,0x0b,0xf5,0xee] 51@ CHECK: vcmpe.f32 s0, #0 @ encoding: [0xc0,0x0a,0xb5,0xee] 52 53 vabs.f64 d16, d16 54 vabs.f32 s0, s0 55 56@ CHECK: vabs.f64 d16, d16 @ encoding: [0xe0,0x0b,0xf0,0xee] 57@ CHECK: vabs.f32 s0, s0 @ encoding: [0xc0,0x0a,0xb0,0xee] 58 59 vcvt.f32.f64 s0, d16 60 vcvt.f64.f32 d16, s0 61 62@ CHECK: vcvt.f32.f64 s0, d16 @ encoding: [0xe0,0x0b,0xb7,0xee] 63@ CHECK: vcvt.f64.f32 d16, s0 @ encoding: [0xc0,0x0a,0xf7,0xee] 64 65 vneg.f64 d16, d16 66 vneg.f32 s0, s0 67 68@ CHECK: vneg.f64 d16, d16 @ encoding: [0x60,0x0b,0xf1,0xee] 69@ CHECK: vneg.f32 s0, s0 @ encoding: [0x40,0x0a,0xb1,0xee] 70 71 vsqrt.f64 d16, d16 72 vsqrt.f32 s0, s0 73 74@ CHECK: vsqrt.f64 d16, d16 @ encoding: [0xe0,0x0b,0xf1,0xee] 75@ CHECK: vsqrt.f32 s0, s0 @ encoding: [0xc0,0x0a,0xb1,0xee] 76 77 vcvt.f64.s32 d16, s0 78 vcvt.f32.s32 s0, s0 79 vcvt.f64.u32 d16, s0 80 vcvt.f32.u32 s0, s0 81 vcvt.s32.f64 s0, d16 82 vcvt.s32.f32 s0, s0 83 vcvt.u32.f64 s0, d16 84 vcvt.u32.f32 s0, s0 85 86@ CHECK: vcvt.f64.s32 d16, s0 @ encoding: [0xc0,0x0b,0xf8,0xee] 87@ CHECK: vcvt.f32.s32 s0, s0 @ encoding: [0xc0,0x0a,0xb8,0xee] 88@ CHECK: vcvt.f64.u32 d16, s0 @ encoding: [0x40,0x0b,0xf8,0xee] 89@ CHECK: vcvt.f32.u32 s0, s0 @ encoding: [0x40,0x0a,0xb8,0xee] 90@ CHECK: vcvt.s32.f64 s0, d16 @ encoding: [0xe0,0x0b,0xbd,0xee] 91@ CHECK: vcvt.s32.f32 s0, s0 @ encoding: [0xc0,0x0a,0xbd,0xee] 92@ CHECK: vcvt.u32.f64 s0, d16 @ encoding: [0xe0,0x0b,0xbc,0xee] 93@ CHECK: vcvt.u32.f32 s0, s0 @ encoding: [0xc0,0x0a,0xbc,0xee] 94 95 96 vmla.f64 d16, d18, d17 97 vmla.f32 s1, s2, s0 98 99@ CHECK: vmla.f64 d16, d18, d17 @ encoding: [0xa1,0x0b,0x42,0xee] 100@ CHECK: vmla.f32 s1, s2, s0 @ encoding: [0x00,0x0a,0x41,0xee] 101 102 vmls.f64 d16, d18, d17 103 vmls.f32 s1, s2, s0 104 105@ CHECK: vmls.f64 d16, d18, d17 @ encoding: [0xe1,0x0b,0x42,0xee] 106@ CHECK: vmls.f32 s1, s2, s0 @ encoding: [0x40,0x0a,0x41,0xee] 107 108 vnmla.f64 d16, d18, d17 109 vnmla.f32 s1, s2, s0 110 111@ CHECK: vnmla.f64 d16, d18, d17 @ encoding: [0xe1,0x0b,0x52,0xee] 112@ CHECK: vnmla.f32 s1, s2, s0 @ encoding: [0x40,0x0a,0x51,0xee] 113 114 vnmls.f64 d16, d18, d17 115 vnmls.f32 s1, s2, s0 116 117@ CHECK: vnmls.f64 d16, d18, d17 @ encoding: [0xa1,0x0b,0x52,0xee] 118@ CHECK: vnmls.f32 s1, s2, s0 @ encoding: [0x00,0x0a,0x51,0xee] 119 120 vmrs APSR_nzcv, fpscr 121 vmrs apsr_nzcv, fpscr 122 fmstat 123 vmrs r2, fpsid 124 vmrs r3, FPSID 125 vmrs r4, mvfr0 126 vmrs r5, MVFR1 127 128@ CHECK: vmrs APSR_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee] 129@ CHECK: vmrs APSR_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee] 130@ CHECK: vmrs APSR_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee] 131@ CHECK: vmrs r2, fpsid @ encoding: [0x10,0x2a,0xf0,0xee] 132@ CHECK: vmrs r3, fpsid @ encoding: [0x10,0x3a,0xf0,0xee] 133@ CHECK: vmrs r4, mvfr0 @ encoding: [0x10,0x4a,0xf7,0xee] 134@ CHECK: vmrs r5, mvfr1 @ encoding: [0x10,0x5a,0xf6,0xee] 135 136@ CHECK: vnegne.f64 d16, d16 @ encoding: [0x60,0x0b,0xf1,0x1e] 137 vnegne.f64 d16, d16 138 139@ CHECK: vmovne s0, r0 @ encoding: [0x10,0x0a,0x00,0x1e] 140@ CHECK: vmoveq s0, r1 @ encoding: [0x10,0x1a,0x00,0x0e] 141 vmovne s0, r0 142 vmoveq s0, r1 143 144 vmov.f32 r1, s2 145 vmov.f32 s4, r3 146 vmov.f64 r1, r5, d2 147 vmov.f64 d4, r3, r9 148 149@ CHECK: vmov r1, s2 @ encoding: [0x10,0x1a,0x11,0xee] 150@ CHECK: vmov s4, r3 @ encoding: [0x10,0x3a,0x02,0xee] 151@ CHECK: vmov r1, r5, d2 @ encoding: [0x12,0x1b,0x55,0xec] 152@ CHECK: vmov d4, r3, r9 @ encoding: [0x14,0x3b,0x49,0xec] 153 154@ CHECK: vmrs r0, fpscr @ encoding: [0x10,0x0a,0xf1,0xee] 155 vmrs r0, fpscr 156@ CHECK: vmrs r0, fpexc @ encoding: [0x10,0x0a,0xf8,0xee] 157 vmrs r0, fpexc 158@ CHECK: vmrs r0, fpsid @ encoding: [0x10,0x0a,0xf0,0xee] 159 vmrs r0, fpsid 160 161@ CHECK: vmsr fpscr, r0 @ encoding: [0x10,0x0a,0xe1,0xee] 162 vmsr fpscr, r0 163@ CHECK: vmsr fpexc, r0 @ encoding: [0x10,0x0a,0xe8,0xee] 164 vmsr fpexc, r0 165@ CHECK: vmsr fpsid, r0 @ encoding: [0x10,0x0a,0xe0,0xee] 166 vmsr fpsid, r0 167 168 vmov.f64 d16, #3.000000e+00 169 vmov.f32 s0, #3.000000e+00 170 vmov.f64 d16, #-3.000000e+00 171 vmov.f32 s0, #-3.000000e+00 172 173@ CHECK: vmov.f64 d16, #3.000000e+00 @ encoding: [0x08,0x0b,0xf0,0xee] 174@ CHECK: vmov.f32 s0, #3.000000e+00 @ encoding: [0x08,0x0a,0xb0,0xee] 175@ CHECK: vmov.f64 d16, #-3.000000e+00 @ encoding: [0x08,0x0b,0xf8,0xee] 176@ CHECK: vmov.f32 s0, #-3.000000e+00 @ encoding: [0x08,0x0a,0xb8,0xee] 177 178@ CHECK: vmov s0, r0 @ encoding: [0x10,0x0a,0x00,0xee] 179@ CHECK: vmov s1, r1 @ encoding: [0x90,0x1a,0x00,0xee] 180@ CHECK: vmov s2, r2 @ encoding: [0x10,0x2a,0x01,0xee] 181@ CHECK: vmov s3, r3 @ encoding: [0x90,0x3a,0x01,0xee] 182 vmov s0, r0 183 vmov s1, r1 184 vmov s2, r2 185 vmov s3, r3 186 187@ CHECK: vmov r0, s0 @ encoding: [0x10,0x0a,0x10,0xee] 188@ CHECK: vmov r1, s1 @ encoding: [0x90,0x1a,0x10,0xee] 189@ CHECK: vmov r2, s2 @ encoding: [0x10,0x2a,0x11,0xee] 190@ CHECK: vmov r3, s3 @ encoding: [0x90,0x3a,0x11,0xee] 191 vmov r0, s0 192 vmov r1, s1 193 vmov r2, s2 194 vmov r3, s3 195 196@ CHECK: vmov r0, r1, d16 @ encoding: [0x30,0x0b,0x51,0xec] 197 vmov r0, r1, d16 198 199@ Between two single precision registers and two core registers 200 vmov s3, s4, r1, r2 201 vmov s2, s3, r1, r2 202 vmov r1, r2, s3, s4 203 vmov r1, r2, s2, s3 204@ CHECK: vmov s3, s4, r1, r2 @ encoding: [0x31,0x1a,0x42,0xec] 205@ CHECK: vmov s2, s3, r1, r2 @ encoding: [0x11,0x1a,0x42,0xec] 206@ CHECK: vmov r1, r2, s3, s4 @ encoding: [0x31,0x1a,0x52,0xec] 207@ CHECK: vmov r1, r2, s2, s3 @ encoding: [0x11,0x1a,0x52,0xec] 208 209@ Between one double precision register and two core registers 210 vmov d15, r1, r2 211 vmov d16, r1, r2 212 vmov r1, r2, d15 213 vmov r1, r2, d16 214@ CHECK: vmov d15, r1, r2 @ encoding: [0x1f,0x1b,0x42,0xec] 215@ CHECK: vmov d16, r1, r2 @ encoding: [0x30,0x1b,0x42,0xec] 216@ CHECK: vmov r1, r2, d15 @ encoding: [0x1f,0x1b,0x52,0xec] 217@ CHECK: vmov r1, r2, d16 @ encoding: [0x30,0x1b,0x52,0xec] 218 219 220@ CHECK: vldr d17, [r0] @ encoding: [0x00,0x1b,0xd0,0xed] 221@ CHECK: vldr s0, [lr] @ encoding: [0x00,0x0a,0x9e,0xed] 222@ CHECK: vldr d0, [lr] @ encoding: [0x00,0x0b,0x9e,0xed] 223 224 vldr.64 d17, [r0] 225 vldr.i32 s0, [lr] 226 vldr.d d0, [lr] 227 228@ CHECK: vldr d1, [r2, #32] @ encoding: [0x08,0x1b,0x92,0xed] 229@ CHECK: vldr d1, [r2, #-32] @ encoding: [0x08,0x1b,0x12,0xed] 230 vldr.64 d1, [r2, #32] 231 vldr.f64 d1, [r2, #-32] 232 233@ CHECK: vldr d2, [r3] @ encoding: [0x00,0x2b,0x93,0xed] 234 vldr.64 d2, [r3] 235 236@ CHECK: vldr d3, [pc] @ encoding: [0x00,0x3b,0x9f,0xed] 237@ CHECK: vldr d3, [pc] @ encoding: [0x00,0x3b,0x9f,0xed] 238@ CHECK: vldr d3, [pc, #-0] @ encoding: [0x00,0x3b,0x1f,0xed] 239 vldr.64 d3, [pc] 240 vldr.64 d3, [pc,#0] 241 vldr.64 d3, [pc,#-0] 242 243@ CHECK: vldr s13, [r0] @ encoding: [0x00,0x6a,0xd0,0xed] 244 vldr.32 s13, [r0] 245 246@ CHECK: vldr s1, [r2, #32] @ encoding: [0x08,0x0a,0xd2,0xed] 247@ CHECK: vldr s1, [r2, #-32] @ encoding: [0x08,0x0a,0x52,0xed] 248 vldr.32 s1, [r2, #32] 249 vldr.32 s1, [r2, #-32] 250 251@ CHECK: vldr s2, [r3] @ encoding: [0x00,0x1a,0x93,0xed] 252 vldr.32 s2, [r3] 253 254@ CHECK: vldr s5, [pc] @ encoding: [0x00,0x2a,0xdf,0xed] 255@ CHECK: vldr s5, [pc] @ encoding: [0x00,0x2a,0xdf,0xed] 256@ CHECK: vldr s5, [pc, #-0] @ encoding: [0x00,0x2a,0x5f,0xed] 257 vldr.32 s5, [pc] 258 vldr.32 s5, [pc,#0] 259 vldr.32 s5, [pc,#-0] 260 261@ CHECK: vstr d4, [r1] @ encoding: [0x00,0x4b,0x81,0xed] 262@ CHECK: vstr d4, [r1, #24] @ encoding: [0x06,0x4b,0x81,0xed] 263@ CHECK: vstr d4, [r1, #-24] @ encoding: [0x06,0x4b,0x01,0xed] 264@ CHECK: vstr s0, [lr] @ encoding: [0x00,0x0a,0x8e,0xed] 265@ CHECK: vstr d0, [lr] @ encoding: [0x00,0x0b,0x8e,0xed] 266 267 vstr.64 d4, [r1] 268 vstr.64 d4, [r1, #24] 269 vstr.64 d4, [r1, #-24] 270 vstr s0, [lr] 271 vstr d0, [lr] 272 273@ CHECK: vstr s4, [r1] @ encoding: [0x00,0x2a,0x81,0xed] 274@ CHECK: vstr s4, [r1, #24] @ encoding: [0x06,0x2a,0x81,0xed] 275@ CHECK: vstr s4, [r1, #-24] @ encoding: [0x06,0x2a,0x01,0xed] 276 vstr.32 s4, [r1] 277 vstr.32 s4, [r1, #24] 278 vstr.32 s4, [r1, #-24] 279 280@ CHECK: vldmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x91,0xec] 281@ CHECK: vldmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x91,0xec] 282 vldmia r1, {d2,d3-d6,d7} 283 vldmia r1, {s2,s3-s6,s7} 284 285@ CHECK: vstmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x81,0xec] 286@ CHECK: vstmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x81,0xec] 287@ CHECK: vpush {d8, d9, d10, d11, d12, d13, d14, d15} @ encoding: [0x10,0x8b,0x2d,0xed] 288 vstmia r1, {d2,d3-d6,d7} 289 vstmia r1, {s2,s3-s6,s7} 290 vstmdb sp!, {q4-q7} 291 292@ CHECK: vcvtr.s32.f64 s0, d0 @ encoding: [0x40,0x0b,0xbd,0xee] 293@ CHECK: vcvtr.s32.f32 s0, s1 @ encoding: [0x60,0x0a,0xbd,0xee] 294@ CHECK: vcvtr.u32.f64 s0, d0 @ encoding: [0x40,0x0b,0xbc,0xee] 295@ CHECK: vcvtr.u32.f32 s0, s1 @ encoding: [0x60,0x0a,0xbc,0xee] 296 vcvtr.s32.f64 s0, d0 297 vcvtr.s32.f32 s0, s1 298 vcvtr.u32.f64 s0, d0 299 vcvtr.u32.f32 s0, s1 300 301@ CHECK: vmovne s25, s26, r2, r5 302 vmovne s25, s26, r2, r5 @ encoding: [0x39,0x2a,0x45,0x1c] 303 304@ VMOV w/ optional data type suffix. 305 vmov.32 s1, r8 306 vmov.s16 s2, r4 307 vmov.16 s3, r6 308 vmov.u32 s4, r1 309 vmov.p8 s5, r2 310 vmov.8 s6, r3 311 312 vmov.32 r1, s8 313 vmov.s16 r2, s4 314 vmov.16 r3, s6 315 vmov.u32 r4, s1 316 vmov.p8 r5, s2 317 vmov.8 r6, s3 318 319@ CHECK: vmov s1, r8 @ encoding: [0x90,0x8a,0x00,0xee] 320@ CHECK: vmov s2, r4 @ encoding: [0x10,0x4a,0x01,0xee] 321@ CHECK: vmov s3, r6 @ encoding: [0x90,0x6a,0x01,0xee] 322@ CHECK: vmov s4, r1 @ encoding: [0x10,0x1a,0x02,0xee] 323@ CHECK: vmov s5, r2 @ encoding: [0x90,0x2a,0x02,0xee] 324@ CHECK: vmov s6, r3 @ encoding: [0x10,0x3a,0x03,0xee] 325@ CHECK: vmov r1, s8 @ encoding: [0x10,0x1a,0x14,0xee] 326@ CHECK: vmov r2, s4 @ encoding: [0x10,0x2a,0x12,0xee] 327@ CHECK: vmov r3, s6 @ encoding: [0x10,0x3a,0x13,0xee] 328@ CHECK: vmov r4, s1 @ encoding: [0x90,0x4a,0x10,0xee] 329@ CHECK: vmov r5, s2 @ encoding: [0x10,0x5a,0x11,0xee] 330@ CHECK: vmov r6, s3 @ encoding: [0x90,0x6a,0x11,0xee] 331 332 333@ VCVT (between floating-point and fixed-point) 334 vcvt.f32.u32 s0, s0, #20 335 vcvt.f64.s32 d0, d0, #32 336 vcvt.f32.u16 s0, s0, #1 337 vcvt.f64.s16 d0, d0, #16 338 vcvt.f32.s32 s1, s1, #20 339 vcvt.f64.u32 d20, d20, #32 340 vcvt.f32.s16 s17, s17, #1 341 vcvt.f64.u16 d23, d23, #16 342 vcvt.u32.f32 s12, s12, #20 343 vcvt.s32.f64 d2, d2, #32 344 vcvt.u16.f32 s28, s28, #1 345 vcvt.s16.f64 d15, d15, #16 346 vcvt.s32.f32 s1, s1, #20 347 vcvt.u32.f64 d20, d20, #32 348 vcvt.s16.f32 s17, s17, #1 349 vcvt.u16.f64 d23, d23, #16 350 351@ CHECK: vcvt.f32.u32 s0, s0, #20 @ encoding: [0xc6,0x0a,0xbb,0xee] 352@ CHECK: vcvt.f64.s32 d0, d0, #32 @ encoding: [0xc0,0x0b,0xba,0xee] 353@ CHECK: vcvt.f32.u16 s0, s0, #1 @ encoding: [0x67,0x0a,0xbb,0xee] 354@ CHECK: vcvt.f64.s16 d0, d0, #16 @ encoding: [0x40,0x0b,0xba,0xee] 355@ CHECK: vcvt.f32.s32 s1, s1, #20 @ encoding: [0xc6,0x0a,0xfa,0xee] 356@ CHECK: vcvt.f64.u32 d20, d20, #32 @ encoding: [0xc0,0x4b,0xfb,0xee] 357@ CHECK: vcvt.f32.s16 s17, s17, #1 @ encoding: [0x67,0x8a,0xfa,0xee] 358@ CHECK: vcvt.f64.u16 d23, d23, #16 @ encoding: [0x40,0x7b,0xfb,0xee] 359 360@ CHECK: vcvt.u32.f32 s12, s12, #20 @ encoding: [0xc6,0x6a,0xbf,0xee] 361@ CHECK: vcvt.s32.f64 d2, d2, #32 @ encoding: [0xc0,0x2b,0xbe,0xee] 362@ CHECK: vcvt.u16.f32 s28, s28, #1 @ encoding: [0x67,0xea,0xbf,0xee] 363@ CHECK: vcvt.s16.f64 d15, d15, #16 @ encoding: [0x40,0xfb,0xbe,0xee] 364@ CHECK: vcvt.s32.f32 s1, s1, #20 @ encoding: [0xc6,0x0a,0xfe,0xee] 365@ CHECK: vcvt.u32.f64 d20, d20, #32 @ encoding: [0xc0,0x4b,0xff,0xee] 366@ CHECK: vcvt.s16.f32 s17, s17, #1 @ encoding: [0x67,0x8a,0xfe,0xee] 367@ CHECK: vcvt.u16.f64 d23, d23, #16 @ encoding: [0x40,0x7b,0xff,0xee] 368 369 370@ Use NEON to load some f32 immediates that don't fit the f8 representation. 371 vmov.f32 d4, #0.0 372 vmov.f32 d4, #32.0 373 374@ CHECK: vmov.i32 d4, #0x0 @ encoding: [0x10,0x40,0x80,0xf2] 375@ CHECK: vmov.i32 d4, #0x42000000 @ encoding: [0x12,0x46,0x84,0xf2] 376