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