1*dd4d0937SMikhail Maltsev// RUN: not llvm-mc -triple=thumbv8m.main -mattr=+cdecp0 -mattr=+cdecp1 -show-encoding < %s 2>%t | FileCheck %s 2*dd4d0937SMikhail Maltsev// RUN: FileCheck <%t --check-prefix=ERROR %s 3*dd4d0937SMikhail Maltsev 4*dd4d0937SMikhail Maltsev// CHECK-LABEL: test_gcp 5*dd4d0937SMikhail Maltsevtest_gcp: 6*dd4d0937SMikhail Maltsev// CHECK-NEXT: mrc p3, #1, r3, c15, c15, #5 @ encoding: [0x3f,0xee,0xbf,0x33] 7*dd4d0937SMikhail Maltsevmrc p3, #1, r3, c15, c15, #5 8*dd4d0937SMikhail Maltsev// CHECK-NEXT: mcr2 p3, #2, r2, c7, c11, #7 @ encoding: [0x47,0xfe,0xfb,0x23] 9*dd4d0937SMikhail Maltsevmcr2 p3, #2, r2, c7, c11, #7 10*dd4d0937SMikhail Maltsev 11*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 12*dd4d0937SMikhail Maltsevmrc p0, #1, r2, c3, c4, #5 13*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 14*dd4d0937SMikhail Maltsevldc2 p1, c8, [r1, #4] 15*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 16*dd4d0937SMikhail Maltsevldc2 p0, c7, [r2] 17*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 18*dd4d0937SMikhail Maltsevldc2 p1, c6, [r3, #-224] 19*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 20*dd4d0937SMikhail Maltsevldc2 p0, c5, [r4, #-120]! 21*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 22*dd4d0937SMikhail Maltsevldc2l p1, c2, [r7, #4] 23*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 24*dd4d0937SMikhail Maltsevldc2l p0, c1, [r8] 25*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 26*dd4d0937SMikhail Maltsevldc2l p1, c0, [r9, #-224] 27*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 28*dd4d0937SMikhail Maltsevldc2l p0, c1, [r10, #-120]! 29*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 30*dd4d0937SMikhail Maltsevstc2 p1, c8, [r1, #4] 31*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 32*dd4d0937SMikhail Maltsevstc2 p0, c7, [r2] 33*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 34*dd4d0937SMikhail Maltsevstc2 p1, c6, [r3, #-224] 35*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 36*dd4d0937SMikhail Maltsevstc2 p0, c5, [r4, #-120]! 37*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 38*dd4d0937SMikhail Maltsevstc2l p1, c2, [r7, #4] 39*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 40*dd4d0937SMikhail Maltsevstc2l p0, c1, [r8] 41*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 42*dd4d0937SMikhail Maltsevstc2l p1, c0, [r9, #-224] 43*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as GCP 44*dd4d0937SMikhail Maltsevstc2l p0, c1, [r10, #-120]! 45*dd4d0937SMikhail Maltsev 46*dd4d0937SMikhail Maltsev// CHECK-LABEL: test_predication1: 47*dd4d0937SMikhail Maltsevtest_predication1: 48*dd4d0937SMikhail Maltsevittt eq 49*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable 50*dd4d0937SMikhail Maltsevcx1 p0, r3, #8191 51*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable 52*dd4d0937SMikhail Maltsevcx2 p0, r2, r3, #123 53*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable 54*dd4d0937SMikhail Maltsevcx3 p0, r1, r5, r7, #63 55*dd4d0937SMikhail Maltsevnop 56*dd4d0937SMikhail Maltsevnop 57*dd4d0937SMikhail Maltsevnop 58*dd4d0937SMikhail Maltsevittt eq 59*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable 60*dd4d0937SMikhail Maltsevcx1d p0, r0, r1, #8191 61*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable 62*dd4d0937SMikhail Maltsevcx2d p0, r0, r1, r3, #123 63*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable 64*dd4d0937SMikhail Maltsevcx3d p0, r0, r1, r5, r7, #63 65*dd4d0937SMikhail Maltsevnop 66*dd4d0937SMikhail Maltsevnop 67*dd4d0937SMikhail Maltsevnop 68*dd4d0937SMikhail Maltsev 69*dd4d0937SMikhail Maltsev// CHECK-LABEL: test_predication2: 70*dd4d0937SMikhail Maltsevtest_predication2: 71*dd4d0937SMikhail Maltsev// CHECK: itte eq @ encoding: [0x06,0xbf] 72*dd4d0937SMikhail Maltsevitte eq 73*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx1aeq p0, r3, #8191 @ encoding: [0x3f,0xfe,0xbf,0x30] 74*dd4d0937SMikhail Maltsevcx1aeq p0, r3, #8191 75*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx2aeq p0, r2, r3, #123 @ encoding: [0x43,0xfe,0xbb,0x20] 76*dd4d0937SMikhail Maltsevcx2aeq p0, r2, r3, #123 77*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3ane p0, r1, r5, r7, #63 @ encoding: [0xf5,0xfe,0xb1,0x70] 78*dd4d0937SMikhail Maltsevcx3ane p0, r1, r5, r7, #63 79*dd4d0937SMikhail Maltsev// CHECK-NEXT: itte eq @ encoding: [0x06,0xbf] 80*dd4d0937SMikhail Maltsevitte eq 81*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx1daeq p0, r0, r1, #8191 @ encoding: [0x3f,0xfe,0xff,0x00] 82*dd4d0937SMikhail Maltsevcx1daeq p0, r0, r1, #8191 83*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx2daeq p0, r0, r1, r3, #123 @ encoding: [0x43,0xfe,0xfb,0x00] 84*dd4d0937SMikhail Maltsevcx2daeq p0, r0, r1, r3, #123 85*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3dane p0, r0, r1, r5, r7, #63 @ encoding: [0xf5,0xfe,0xf0,0x70] 86*dd4d0937SMikhail Maltsevcx3dane p0, r0, r1, r5, r7, #63 87*dd4d0937SMikhail Maltsev 88*dd4d0937SMikhail Maltsev 89*dd4d0937SMikhail Maltsev// CHECK-LABEL: test_cx1: 90*dd4d0937SMikhail Maltsevtest_cx1: 91*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx1 p0, r3, #8191 @ encoding: [0x3f,0xee,0xbf,0x30] 92*dd4d0937SMikhail Maltsevcx1 p0, r3, #8191 93*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx1a p1, r2, #0 @ encoding: [0x00,0xfe,0x00,0x21] 94*dd4d0937SMikhail Maltsevcx1a p1, r2, #0 95*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx1d p0, r4, r5, #1234 @ encoding: [0x09,0xee,0xd2,0x40] 96*dd4d0937SMikhail Maltsevcx1d p0, r4, r5, #1234 97*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx1da p1, r2, r3, #1234 @ encoding: [0x09,0xfe,0xd2,0x21] 98*dd4d0937SMikhail Maltsevcx1da p1, r2, r3, #1234 99*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx1 p0, apsr_nzcv, #8191 @ encoding: [0x3f,0xee,0xbf,0xf0] 100*dd4d0937SMikhail Maltsevcx1 p0, apsr_nzcv, #8191 101*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be in the range [p0, p7] 102*dd4d0937SMikhail Maltsevcx1 p8, r1, #1234 103*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: coprocessor must be configured as CDE 104*dd4d0937SMikhail Maltsevcx1 p2, r0, #1 105*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,8191] 106*dd4d0937SMikhail Maltsevcx1 p0, r1, #8192 107*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a register in the range [r0, r12], r14 or apsr_nzcv 108*dd4d0937SMikhail Maltsevcx1 p0, r13, #1234 109*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a consecutive register 110*dd4d0937SMikhail Maltsevcx1d p1, r0, #1234, #123 111*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an even-numbered register in the range [r0, r10] 112*dd4d0937SMikhail Maltsevcx1d p1, r1, #1234 113*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a consecutive register 114*dd4d0937SMikhail Maltsevcx1d p1, r2, r4, #1234 115*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an even-numbered register in the range [r0, r10] 116*dd4d0937SMikhail Maltsevcx1da p0, r1, #1234 117*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 118*dd4d0937SMikhail Maltsevcx1 p0, r0, r0, #1234 119*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 120*dd4d0937SMikhail Maltsevcx1d p0, r0, r1, r2, #1234 121*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 122*dd4d0937SMikhail Maltsevcx1a p0, r0, r2, #1234 123*dd4d0937SMikhail Maltsev 124*dd4d0937SMikhail Maltsev// CHECK-LABEL: test_cx2: 125*dd4d0937SMikhail Maltsevtest_cx2: 126*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx2 p0, r3, r7, #0 @ encoding: [0x47,0xee,0x00,0x30] 127*dd4d0937SMikhail Maltsevcx2 p0, r3, r7, #0 128*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx2a p0, r1, r4, #511 @ encoding: [0x74,0xfe,0xbf,0x10] 129*dd4d0937SMikhail Maltsevcx2a p0, r1, r4, #511 130*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx2d p0, r2, r3, r1, #123 @ encoding: [0x41,0xee,0xfb,0x20] 131*dd4d0937SMikhail Maltsevcx2d p0, r2, r3, r1, #123 132*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx2da p0, r2, r3, r7, #123 @ encoding: [0x47,0xfe,0xfb,0x20] 133*dd4d0937SMikhail Maltsevcx2da p0, r2, r3, r7, #123 134*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx2da p1, r10, r11, apsr_nzcv, #123 @ encoding: [0x4f,0xfe,0xfb,0xa1] 135*dd4d0937SMikhail Maltsevcx2da p1, r10, r11, apsr_nzcv, #123 136*dd4d0937SMikhail Maltsev 137*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,511] 138*dd4d0937SMikhail Maltsevcx2 p0, r1, r4, #512 139*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an even-numbered register in the range [r0, r10] 140*dd4d0937SMikhail Maltsevcx2d p0, r12, r7, #123 141*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an even-numbered register in the range [r0, r10] 142*dd4d0937SMikhail Maltsevcx2da p0, r7, r7, #123 143*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an even-numbered register in the range [r0, r10] 144*dd4d0937SMikhail Maltsevcx2da p1, apsr_nzcv, r7, #123 145*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 146*dd4d0937SMikhail Maltsevcx2 p0, r0, r0, r7, #1 147*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a consecutive register 148*dd4d0937SMikhail Maltsevcx2d p0, r0, r0, r7, #1 149*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 150*dd4d0937SMikhail Maltsevcx2a p0, r0, r2, r7, #1 151*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a consecutive register 152*dd4d0937SMikhail Maltsevcx2da p0, r0, r2, r7, #1 153*dd4d0937SMikhail Maltsev 154*dd4d0937SMikhail Maltsev// CHECK-LABEL: test_cx3: 155*dd4d0937SMikhail Maltsevtest_cx3: 156*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3 p0, r1, r2, r3, #0 @ encoding: [0x82,0xee,0x01,0x30] 157*dd4d0937SMikhail Maltsevcx3 p0, r1, r2, r3, #0 158*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3a p0, r1, r5, r7, #63 @ encoding: [0xf5,0xfe,0xb1,0x70] 159*dd4d0937SMikhail Maltsevcx3a p0, r1, r5, r7, #63 160*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3d p1, r0, r1, r7, r1, #12 @ encoding: [0x97,0xee,0xc0,0x11] 161*dd4d0937SMikhail Maltsevcx3d p1, r0, r1, r7, r1, #12 162*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3da p0, r8, r9, r2, r3, #12 @ encoding: [0x92,0xfe,0xc8,0x30] 163*dd4d0937SMikhail Maltsevcx3da p0, r8, r9, r2, r3, #12 164*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3 p1, apsr_nzcv, r7, apsr_nzcv, #12 @ encoding: [0x97,0xee,0x8f,0xf1] 165*dd4d0937SMikhail Maltsevcx3 p1, apsr_nzcv, r7, apsr_nzcv, #12 166*dd4d0937SMikhail Maltsev// CHECK-NEXT: cx3d p0, r8, r9, apsr_nzcv, apsr_nzcv, #12 @ encoding: [0x9f,0xee,0xc8,0xf0] 167*dd4d0937SMikhail Maltsevcx3d p0, r8, r9, apsr_nzcv, apsr_nzcv, #12 168*dd4d0937SMikhail Maltsev 169*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,63] 170*dd4d0937SMikhail Maltsevcx3 p0, r1, r5, r7, #64 171*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an even-numbered register in the range [r0, r10] 172*dd4d0937SMikhail Maltsevcx3da p1, r14, r2, r3, #12 173*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a register in the range [r0, r12], r14 or apsr_nzcv 174*dd4d0937SMikhail Maltsevcx3a p0, r15, r2, r3, #12 175*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 176*dd4d0937SMikhail Maltsevcx2 p0, r0, r0, r7, r3, #1 177*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a consecutive register 178*dd4d0937SMikhail Maltsevcx2d p0, r0, r0, r7, r3, #1 179*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 180*dd4d0937SMikhail Maltsevcx3a p0, r1, r2, r5, r7, #63 181*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a consecutive register 182*dd4d0937SMikhail Maltsevcx3da p0, r8, apsr_nzcv, r2, r3, #12 183*dd4d0937SMikhail Maltsev 184*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 185*dd4d0937SMikhail Maltsevvcx1 p0, s0, #0 186*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 187*dd4d0937SMikhail Maltsevvcx1 p0, d0, #0 188*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 189*dd4d0937SMikhail Maltsevvcx1 p0, q0, #0 190*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 191*dd4d0937SMikhail Maltsevvcx1a p0, s0, #0 192*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 193*dd4d0937SMikhail Maltsevvcx1a p0, d0, #0 194*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 195*dd4d0937SMikhail Maltsevvcx1a p0, q0, #0 196*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 197*dd4d0937SMikhail Maltsevvcx2 p0, s0, s1, #0 198*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 199*dd4d0937SMikhail Maltsevvcx2 p0, d0, d1, #0 200*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 201*dd4d0937SMikhail Maltsevvcx2 p0, q0, q1, #0 202*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 203*dd4d0937SMikhail Maltsevvcx2a p0, s0, s1, #0 204*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 205*dd4d0937SMikhail Maltsevvcx2a p0, d0, d1, #0 206*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 207*dd4d0937SMikhail Maltsevvcx2 p0, q0, q1, #0 208*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 209*dd4d0937SMikhail Maltsevvcx3 p0, s0, s1, s2, #0 210*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 211*dd4d0937SMikhail Maltsevvcx3 p0, d0, d1, d2, #0 212*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 213*dd4d0937SMikhail Maltsevvcx3 p0, q0, q1, q2, #0 214*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 215*dd4d0937SMikhail Maltsevvcx3a p0, s0, s1, s2, #0 216*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 217*dd4d0937SMikhail Maltsevvcx3a p0, d0, d1, d2, #0 218*dd4d0937SMikhail Maltsev// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction 219*dd4d0937SMikhail Maltsevvcx3a p0, q0, q1, q2, #0 220