1*9880d681SAndroid Build Coastguard Worker@ RUN: not llvm-mc < %s -triple thumbv8-unknown-unknown -show-encoding -mattr=+fp-only-sp,-neon 2> %t > %t2 2*9880d681SAndroid Build Coastguard Worker@ RUN: FileCheck %s < %t --check-prefix=CHECK-ERRORS 3*9880d681SAndroid Build Coastguard Worker@ RUN: FileCheck %s < %t2 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker vadd.f64 d0, d1, d2 6*9880d681SAndroid Build Coastguard Worker vsub.f64 d2, d3, d4 7*9880d681SAndroid Build Coastguard Worker vdiv.f64 d4, d5, d6 8*9880d681SAndroid Build Coastguard Worker vmul.f64 d6, d7, d8 9*9880d681SAndroid Build Coastguard Worker vnmul.f64 d8, d9, d10 10*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 11*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vadd.f64 d0, d1, d2 12*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 13*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vsub.f64 d2, d3, d4 14*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 15*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vdiv.f64 d4, d5, d6 16*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 17*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmul.f64 d6, d7, d8 18*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 19*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vnmul.f64 d8, d9, d10 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker vmla.f64 d11, d10, d9 22*9880d681SAndroid Build Coastguard Worker vmls.f64 d8, d7, d6 23*9880d681SAndroid Build Coastguard Worker vnmla.f64 d5, d4, d3 24*9880d681SAndroid Build Coastguard Worker vnmls.f64 d2, d1, d0 25*9880d681SAndroid Build Coastguard Worker vfma.f64 d1, d2, d3 26*9880d681SAndroid Build Coastguard Worker vfms.f64 d4, d5, d6 27*9880d681SAndroid Build Coastguard Worker vfnma.f64 d7, d8, d9 28*9880d681SAndroid Build Coastguard Worker vfnms.f64 d10, d11, d12 29*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 30*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmla.f64 d11, d10, d9 31*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 32*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmls.f64 d8, d7, d6 33*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 34*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vnmla.f64 d5, d4, d3 35*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 36*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vnmls.f64 d2, d1, d0 37*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 38*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfma.f64 d1, d2, d3 39*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 40*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfms.f64 d4, d5, d6 41*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 42*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfnma.f64 d7, d8, d9 43*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 44*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfnms.f64 d10, d11, d12 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker vneg.f64 d15, d14 47*9880d681SAndroid Build Coastguard Worker vsqrt.f64 d13, d12 48*9880d681SAndroid Build Coastguard Worker vsqrt d13, d14 49*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 50*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vneg.f64 d15, d14 51*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 52*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vsqrt.f64 d13, d12 53*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 54*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vsqrt d13, d14 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker vcmpe.f64 d0, d1 57*9880d681SAndroid Build Coastguard Worker vcmp.f64 d2, d3 58*9880d681SAndroid Build Coastguard Worker vabs.f64 d4, d5 59*9880d681SAndroid Build Coastguard Worker vcmpe.f64 d5, #0 60*9880d681SAndroid Build Coastguard Worker vcmp.f64 d6, #0 61*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 62*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmpe.f64 d0, d1 63*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 64*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmp.f64 d2, d3 65*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 66*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vabs.f64 d4, d5 67*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 68*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmpe.f64 d5, #0 69*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 70*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmp.f64 d6, #0 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker @ FIXME: overlapping aliases and a probable TableGen indeterminacy mean 73*9880d681SAndroid Build Coastguard Worker @ that the actual reason can vary by platform. 74*9880d681SAndroid Build Coastguard Worker vmov.f64 d11, d10 75*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: 76*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmov.f64 d11, d10 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker vcvt.f64.s32 d9, s8 79*9880d681SAndroid Build Coastguard Worker vcvt.f64.u32 d7, s6 80*9880d681SAndroid Build Coastguard Worker vcvt.s32.f64 s5, d4 81*9880d681SAndroid Build Coastguard Worker vcvt.u32.f64 s3, d2 82*9880d681SAndroid Build Coastguard Worker vcvtr.s32.f64 s1, d0 83*9880d681SAndroid Build Coastguard Worker vcvtr.u32.f64 s1, d2 84*9880d681SAndroid Build Coastguard Worker vcvt.s16.f64 d3, d4, #1 85*9880d681SAndroid Build Coastguard Worker vcvt.u16.f64 d5, d6, #2 86*9880d681SAndroid Build Coastguard Worker vcvt.s32.f64 d7, d8, #3 87*9880d681SAndroid Build Coastguard Worker vcvt.u32.f64 d9, d10, #4 88*9880d681SAndroid Build Coastguard Worker vcvt.f64.s16 d11, d12, #3 89*9880d681SAndroid Build Coastguard Worker vcvt.f64.u16 d13, d14, #2 90*9880d681SAndroid Build Coastguard Worker vcvt.f64.s32 d15, d14, #1 91*9880d681SAndroid Build Coastguard Worker vcvt.f64.u32 d13, d12, #1 92*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 93*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.s32 d9, s8 94*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 95*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.u32 d7, s6 96*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 97*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.s32.f64 s5, d4 98*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 99*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.u32.f64 s3, d2 100*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 101*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtr.s32.f64 s1, d0 102*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 103*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtr.u32.f64 s1, d2 104*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 105*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.s16.f64 d3, d4, #1 106*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 107*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.u16.f64 d5, d6, #2 108*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 109*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.s32.f64 d7, d8, #3 110*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 111*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.u32.f64 d9, d10, #4 112*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 113*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.s16 d11, d12, #3 114*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 115*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.u16 d13, d14, #2 116*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 117*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.s32 d15, d14, #1 118*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 119*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.u32 d13, d12, #1 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker @ v8 operations, also double precision so make sure they're rejected. 122*9880d681SAndroid Build Coastguard Worker vselgt.f64 d0, d1, d2 123*9880d681SAndroid Build Coastguard Worker vselge.f64 d3, d4, d5 124*9880d681SAndroid Build Coastguard Worker vseleq.f64 d6, d7, d8 125*9880d681SAndroid Build Coastguard Worker vselvs.f64 d9, d10, d11 126*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 127*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vselgt.f64 d0, d1, d2 128*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 129*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vselge.f64 d3, d4, d5 130*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 131*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vseleq.f64 d6, d7, d8 132*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 133*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vselvs.f64 d9, d10, d11 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker vmaxnm.f64 d12, d13, d14 136*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 137*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmaxnm.f64 d12, d13, d14 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker vcvtb.f64.f16 d7, s8 140*9880d681SAndroid Build Coastguard Worker vcvtb.f16.f64 s9, d10 141*9880d681SAndroid Build Coastguard Worker vcvtt.f64.f16 d11, s12 142*9880d681SAndroid Build Coastguard Worker vcvtt.f16.f64 s13, d14 143*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 144*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtb.f64.f16 d7, s8 145*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 146*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtb.f16.f64 s9, d10 147*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 148*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtt.f64.f16 d11, s12 149*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 150*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtt.f16.f64 s13, d14 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker vrintz.f64 d15, d14 153*9880d681SAndroid Build Coastguard Worker vrintr.f64.f64 d13, d12 154*9880d681SAndroid Build Coastguard Worker vrintx.f64 d11, d10 155*9880d681SAndroid Build Coastguard Worker vrinta.f64.f64 d9, d8 156*9880d681SAndroid Build Coastguard Worker vrintn.f64 d7, d6 157*9880d681SAndroid Build Coastguard Worker vrintp.f64.f64 d5, d4 158*9880d681SAndroid Build Coastguard Worker vrintm.f64 d3, d2 159*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 160*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintz.f64 d15, d14 161*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 162*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintr.f64.f64 d13, d12 163*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 164*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintx.f64 d11, d10 165*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 166*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrinta.f64.f64 d9, d8 167*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 168*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintn.f64 d7, d6 169*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 170*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintp.f64.f64 d5, d4 171*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP 172*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintm.f64 d3, d2 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker @ Double precisionish operations that actually *are* allowed. 175*9880d681SAndroid Build Coastguard Worker vldr d0, [sp] 176*9880d681SAndroid Build Coastguard Worker vstr d3, [sp] 177*9880d681SAndroid Build Coastguard Worker vldm r0, {d0, d1} 178*9880d681SAndroid Build Coastguard Worker vstm r4, {d3, d4} 179*9880d681SAndroid Build Coastguard Worker vpush {d6, d7} 180*9880d681SAndroid Build Coastguard Worker vpop {d8, d9} 181*9880d681SAndroid Build Coastguard Worker vmov r1, r0, d1 182*9880d681SAndroid Build Coastguard Worker vmov d2, r3, r4 183*9880d681SAndroid Build Coastguard Worker vmov.f64 r5, r6, d7 184*9880d681SAndroid Build Coastguard Worker vmov.f64 d8, r9, r10 185*9880d681SAndroid Build Coastguard Worker@ CHECK: vldr d0, [sp] 186*9880d681SAndroid Build Coastguard Worker@ CHECK: vstr d3, [sp] 187*9880d681SAndroid Build Coastguard Worker@ CHECK: vldmia r0, {d0, d1} 188*9880d681SAndroid Build Coastguard Worker@ CHECK: vstmia r4, {d3, d4} 189*9880d681SAndroid Build Coastguard Worker@ CHECK: vpush {d6, d7} 190*9880d681SAndroid Build Coastguard Worker@ CHECK: vpop {d8, d9} 191*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov r1, r0, d1 192*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov d2, r3, r4 193*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov r5, r6, d7 194*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov d8, r9, r10 195