simple-fp-encoding.s revision 270e3625b23174688aa5b6f1e1d0cd42086541de
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@ CHECK: vldr d17, [r0] @ encoding: [0x00,0x1b,0xd0,0xed] 200@ CHECK: vldr s0, [lr] @ encoding: [0x00,0x0a,0x9e,0xed] 201@ CHECK: vldr d0, [lr] @ encoding: [0x00,0x0b,0x9e,0xed] 202 203 vldr.64 d17, [r0] 204 vldr.i32 s0, [lr] 205 vldr.d d0, [lr] 206 207@ CHECK: vldr d1, [r2, #32] @ encoding: [0x08,0x1b,0x92,0xed] 208@ CHECK: vldr d1, [r2, #-32] @ encoding: [0x08,0x1b,0x12,0xed] 209 vldr.64 d1, [r2, #32] 210 vldr.f64 d1, [r2, #-32] 211 212@ CHECK: vldr d2, [r3] @ encoding: [0x00,0x2b,0x93,0xed] 213 vldr.64 d2, [r3] 214 215@ CHECK: vldr d3, [pc] @ encoding: [0x00,0x3b,0x9f,0xed] 216@ CHECK: vldr d3, [pc] @ encoding: [0x00,0x3b,0x9f,0xed] 217@ CHECK: vldr d3, [pc, #-0] @ encoding: [0x00,0x3b,0x1f,0xed] 218 vldr.64 d3, [pc] 219 vldr.64 d3, [pc,#0] 220 vldr.64 d3, [pc,#-0] 221 222@ CHECK: vldr s13, [r0] @ encoding: [0x00,0x6a,0xd0,0xed] 223 vldr.32 s13, [r0] 224 225@ CHECK: vldr s1, [r2, #32] @ encoding: [0x08,0x0a,0xd2,0xed] 226@ CHECK: vldr s1, [r2, #-32] @ encoding: [0x08,0x0a,0x52,0xed] 227 vldr.32 s1, [r2, #32] 228 vldr.32 s1, [r2, #-32] 229 230@ CHECK: vldr s2, [r3] @ encoding: [0x00,0x1a,0x93,0xed] 231 vldr.32 s2, [r3] 232 233@ CHECK: vldr s5, [pc] @ encoding: [0x00,0x2a,0xdf,0xed] 234@ CHECK: vldr s5, [pc] @ encoding: [0x00,0x2a,0xdf,0xed] 235@ CHECK: vldr s5, [pc, #-0] @ encoding: [0x00,0x2a,0x5f,0xed] 236 vldr.32 s5, [pc] 237 vldr.32 s5, [pc,#0] 238 vldr.32 s5, [pc,#-0] 239 240@ CHECK: vstr d4, [r1] @ encoding: [0x00,0x4b,0x81,0xed] 241@ CHECK: vstr d4, [r1, #24] @ encoding: [0x06,0x4b,0x81,0xed] 242@ CHECK: vstr d4, [r1, #-24] @ encoding: [0x06,0x4b,0x01,0xed] 243@ CHECK: vstr s0, [lr] @ encoding: [0x00,0x0a,0x8e,0xed] 244@ CHECK: vstr d0, [lr] @ encoding: [0x00,0x0b,0x8e,0xed] 245 246 vstr.64 d4, [r1] 247 vstr.64 d4, [r1, #24] 248 vstr.64 d4, [r1, #-24] 249 vstr s0, [lr] 250 vstr d0, [lr] 251 252@ CHECK: vstr s4, [r1] @ encoding: [0x00,0x2a,0x81,0xed] 253@ CHECK: vstr s4, [r1, #24] @ encoding: [0x06,0x2a,0x81,0xed] 254@ CHECK: vstr s4, [r1, #-24] @ encoding: [0x06,0x2a,0x01,0xed] 255 vstr.32 s4, [r1] 256 vstr.32 s4, [r1, #24] 257 vstr.32 s4, [r1, #-24] 258 259@ CHECK: vldmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x91,0xec] 260@ CHECK: vldmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x91,0xec] 261 vldmia r1, {d2,d3-d6,d7} 262 vldmia r1, {s2,s3-s6,s7} 263 264@ CHECK: vstmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x81,0xec] 265@ CHECK: vstmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x81,0xec] 266@ CHECK: vpush {d8, d9, d10, d11, d12, d13, d14, d15} @ encoding: [0x10,0x8b,0x2d,0xed] 267 vstmia r1, {d2,d3-d6,d7} 268 vstmia r1, {s2,s3-s6,s7} 269 vstmdb sp!, {q4-q7} 270 271@ CHECK: vcvtr.s32.f64 s0, d0 @ encoding: [0x40,0x0b,0xbd,0xee] 272@ CHECK: vcvtr.s32.f32 s0, s1 @ encoding: [0x60,0x0a,0xbd,0xee] 273@ CHECK: vcvtr.u32.f64 s0, d0 @ encoding: [0x40,0x0b,0xbc,0xee] 274@ CHECK: vcvtr.u32.f32 s0, s1 @ encoding: [0x60,0x0a,0xbc,0xee] 275 vcvtr.s32.f64 s0, d0 276 vcvtr.s32.f32 s0, s1 277 vcvtr.u32.f64 s0, d0 278 vcvtr.u32.f32 s0, s1 279 280@ CHECK: vmovne s25, s26, r2, r5 281 vmovne s25, s26, r2, r5 @ encoding: [0x39,0x2a,0x45,0x1c] 282 283@ VMOV w/ optional data type suffix. 284 vmov.32 s1, r8 285 vmov.s16 s2, r4 286 vmov.16 s3, r6 287 vmov.u32 s4, r1 288 vmov.p8 s5, r2 289 vmov.8 s6, r3 290 291 vmov.32 r1, s8 292 vmov.s16 r2, s4 293 vmov.16 r3, s6 294 vmov.u32 r4, s1 295 vmov.p8 r5, s2 296 vmov.8 r6, s3 297 298@ CHECK: vmov s1, r8 @ encoding: [0x90,0x8a,0x00,0xee] 299@ CHECK: vmov s2, r4 @ encoding: [0x10,0x4a,0x01,0xee] 300@ CHECK: vmov s3, r6 @ encoding: [0x90,0x6a,0x01,0xee] 301@ CHECK: vmov s4, r1 @ encoding: [0x10,0x1a,0x02,0xee] 302@ CHECK: vmov s5, r2 @ encoding: [0x90,0x2a,0x02,0xee] 303@ CHECK: vmov s6, r3 @ encoding: [0x10,0x3a,0x03,0xee] 304@ CHECK: vmov r1, s8 @ encoding: [0x10,0x1a,0x14,0xee] 305@ CHECK: vmov r2, s4 @ encoding: [0x10,0x2a,0x12,0xee] 306@ CHECK: vmov r3, s6 @ encoding: [0x10,0x3a,0x13,0xee] 307@ CHECK: vmov r4, s1 @ encoding: [0x90,0x4a,0x10,0xee] 308@ CHECK: vmov r5, s2 @ encoding: [0x10,0x5a,0x11,0xee] 309@ CHECK: vmov r6, s3 @ encoding: [0x90,0x6a,0x11,0xee] 310 311 312@ VCVT (between floating-point and fixed-point) 313 vcvt.f32.u32 s0, s0, #20 314 vcvt.f64.s32 d0, d0, #32 315 vcvt.f32.u16 s0, s0, #1 316 vcvt.f64.s16 d0, d0, #16 317 vcvt.f32.s32 s1, s1, #20 318 vcvt.f64.u32 d20, d20, #32 319 vcvt.f32.s16 s17, s17, #1 320 vcvt.f64.u16 d23, d23, #16 321 vcvt.u32.f32 s12, s12, #20 322 vcvt.s32.f64 d2, d2, #32 323 vcvt.u16.f32 s28, s28, #1 324 vcvt.s16.f64 d15, d15, #16 325 vcvt.s32.f32 s1, s1, #20 326 vcvt.u32.f64 d20, d20, #32 327 vcvt.s16.f32 s17, s17, #1 328 vcvt.u16.f64 d23, d23, #16 329 330@ CHECK: vcvt.f32.u32 s0, s0, #20 @ encoding: [0xc6,0x0a,0xbb,0xee] 331@ CHECK: vcvt.f64.s32 d0, d0, #32 @ encoding: [0xc0,0x0b,0xba,0xee] 332@ CHECK: vcvt.f32.u16 s0, s0, #1 @ encoding: [0x67,0x0a,0xbb,0xee] 333@ CHECK: vcvt.f64.s16 d0, d0, #16 @ encoding: [0x40,0x0b,0xba,0xee] 334@ CHECK: vcvt.f32.s32 s1, s1, #20 @ encoding: [0xc6,0x0a,0xfa,0xee] 335@ CHECK: vcvt.f64.u32 d20, d20, #32 @ encoding: [0xc0,0x4b,0xfb,0xee] 336@ CHECK: vcvt.f32.s16 s17, s17, #1 @ encoding: [0x67,0x8a,0xfa,0xee] 337@ CHECK: vcvt.f64.u16 d23, d23, #16 @ encoding: [0x40,0x7b,0xfb,0xee] 338 339@ CHECK: vcvt.u32.f32 s12, s12, #20 @ encoding: [0xc6,0x6a,0xbf,0xee] 340@ CHECK: vcvt.s32.f64 d2, d2, #32 @ encoding: [0xc0,0x2b,0xbe,0xee] 341@ CHECK: vcvt.u16.f32 s28, s28, #1 @ encoding: [0x67,0xea,0xbf,0xee] 342@ CHECK: vcvt.s16.f64 d15, d15, #16 @ encoding: [0x40,0xfb,0xbe,0xee] 343@ CHECK: vcvt.s32.f32 s1, s1, #20 @ encoding: [0xc6,0x0a,0xfe,0xee] 344@ CHECK: vcvt.u32.f64 d20, d20, #32 @ encoding: [0xc0,0x4b,0xff,0xee] 345@ CHECK: vcvt.s16.f32 s17, s17, #1 @ encoding: [0x67,0x8a,0xfe,0xee] 346@ CHECK: vcvt.u16.f64 d23, d23, #16 @ encoding: [0x40,0x7b,0xff,0xee] 347 348 349@ Use NEON to load some f32 immediates that don't fit the f8 representation. 350 vmov.f32 d4, #0.0 351 vmov.f32 d4, #32.0 352 353@ CHECK: vmov.i32 d4, #0x0 @ encoding: [0x10,0x40,0x80,0xf2] 354@ CHECK: vmov.i32 d4, #0x42000000 @ encoding: [0x12,0x46,0x84,0xf2] 355