Home | History | Annotate | Download | only in SVE
      1 // RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
      2 
      3 // --------------------------------------------------------------------------//
      4 // Immediate out of lower bound [-8, 7].
      5 
      6 st1w z19.s, p2, [x18, #-9, MUL VL]
      7 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].
      8 // CHECK-NEXT: st1w z19.s, p2, [x18, #-9, MUL VL]
      9 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     10 
     11 // Immediate out of upper bound [-8, 7].
     12 st1w z1.s, p5, [x23, #8, MUL VL]
     13 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].
     14 // CHECK-NEXT: st1w z1.s, p5, [x23, #8, MUL VL]
     15 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     16 
     17 // Immediate out of lower bound [-8, 7].
     18 st1w z21.d, p2, [x29, #-9, MUL VL]
     19 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].
     20 // CHECK-NEXT: st1w z21.d, p2, [x29, #-9, MUL VL]
     21 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     22 
     23 // Immediate out of upper bound [-8, 7].
     24 st1w z10.d, p5, [x26, #8, MUL VL]
     25 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].
     26 // CHECK-NEXT: st1w z10.d, p5, [x26, #8, MUL VL]
     27 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     28 
     29 // --------------------------------------------------------------------------//
     30 // Restricted predicate has range [0, 7].
     31 
     32 st1w z1.s, p8, [x3, #1, MUL VL]
     33 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
     34 // CHECK-NEXT: st1w z1.s, p8, [x3, #1, MUL VL]
     35 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     36 
     37 st1w z12.d, p8, [x26, #3, MUL VL]
     38 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
     39 // CHECK-NEXT: st1w z12.d, p8, [x26, #3, MUL VL]
     40 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     41 
     42 // --------------------------------------------------------------------------//
     43 // Invalid vector list
     44 
     45 st1w { }, p0, [x0]
     46 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector register expected
     47 // CHECK-NEXT: st1w { }, p0, [x0]
     48 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     49 
     50 st1w { z1.s, z2.s }, p0, [x0]
     51 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
     52 // CHECK-NEXT: st1w { z1.s, z2.s }, p0, [x0]
     53 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     54 
     55 st1w { v0.4s }, p0, [x0]
     56 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
     57 // CHECK-NEXT: st1w { v0.4s }, p0, [x0]
     58 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     59 
     60 
     61 // --------------------------------------------------------------------------//
     62 // Invalid scalar + scalar addressing modes
     63 
     64 st1w z0.s, p0, [x0, x0]
     65 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     66 // CHECK-NEXT: st1w z0.s, p0, [x0, x0]
     67 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     68 
     69 st1w z0.s, p0, [x0, xzr]
     70 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     71 // CHECK-NEXT: st1w z0.s, p0, [x0, xzr]
     72 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     73 
     74 st1w z0.s, p0, [x0, x0, lsl #3]
     75 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     76 // CHECK-NEXT: st1w z0.s, p0, [x0, x0, lsl #3]
     77 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     78 
     79 st1w z0.s, p0, [x0, w0]
     80 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     81 // CHECK-NEXT: st1w z0.s, p0, [x0, w0]
     82 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     83 
     84 st1w z0.s, p0, [x0, w0, uxtw]
     85 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     86 // CHECK-NEXT: st1w z0.s, p0, [x0, w0, uxtw]
     87 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     88 
     89 
     90 // --------------------------------------------------------------------------//
     91 // Invalid scalar + vector addressing modes
     92 
     93 st1w z0.d, p0, [x0, z0.h]
     94 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
     95 // CHECK-NEXT: st1w z0.d, p0, [x0, z0.h]
     96 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     97 
     98 st1w z0.d, p0, [x0, z0.s]
     99 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
    100 // CHECK-NEXT: st1w z0.d, p0, [x0, z0.s]
    101 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    102 
    103 st1w z0.s, p0, [x0, z0.s]
    104 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw)'
    105 // CHECK-NEXT: st1w z0.s, p0, [x0, z0.s]
    106 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    107 
    108 st1w z0.s, p0, [x0, z0.s, uxtw #3]
    109 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'
    110 // CHECK-NEXT: st1w z0.s, p0, [x0, z0.s, uxtw #3]
    111 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    112 
    113 st1w z0.s, p0, [x0, z0.s, lsl #2]
    114 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'
    115 // CHECK-NEXT: st1w z0.s, p0, [x0, z0.s, lsl #2]
    116 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    117 
    118 st1w z0.d, p0, [x0, z0.d, lsl #3]
    119 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'
    120 // CHECK-NEXT: st1w z0.d, p0, [x0, z0.d, lsl #3]
    121 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    122 
    123 st1w z0.d, p0, [x0, z0.d, sxtw #3]
    124 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'
    125 // CHECK-NEXT: st1w z0.d, p0, [x0, z0.d, sxtw #3]
    126 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    127 
    128 
    129 // --------------------------------------------------------------------------//
    130 // Invalid vector + immediate addressing modes
    131 
    132 st1w z0.s, p0, [z0.s, #-1]
    133 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    134 // CHECK-NEXT: st1w z0.s, p0, [z0.s, #-1]
    135 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    136 
    137 st1w z0.s, p0, [z0.s, #-4]
    138 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    139 // CHECK-NEXT: st1w z0.s, p0, [z0.s, #-4]
    140 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    141 
    142 st1w z0.s, p0, [z0.s, #125]
    143 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    144 // CHECK-NEXT: st1w z0.s, p0, [z0.s, #125]
    145 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    146 
    147 st1w z0.s, p0, [z0.s, #128]
    148 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    149 // CHECK-NEXT: st1w z0.s, p0, [z0.s, #128]
    150 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    151 
    152 st1w z0.s, p0, [z0.s, #3]
    153 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    154 // CHECK-NEXT: st1w z0.s, p0, [z0.s, #3]
    155 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    156 
    157 st1w z0.d, p0, [z0.d, #-1]
    158 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    159 // CHECK-NEXT: st1w z0.d, p0, [z0.d, #-1]
    160 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    161 
    162 st1w z0.d, p0, [z0.d, #-4]
    163 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    164 // CHECK-NEXT: st1w z0.d, p0, [z0.d, #-4]
    165 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    166 
    167 st1w z0.d, p0, [z0.d, #125]
    168 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    169 // CHECK-NEXT: st1w z0.d, p0, [z0.d, #125]
    170 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    171 
    172 st1w z0.d, p0, [z0.d, #128]
    173 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    174 // CHECK-NEXT: st1w z0.d, p0, [z0.d, #128]
    175 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    176 
    177 st1w z0.d, p0, [z0.d, #3]
    178 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    179 // CHECK-NEXT: st1w z0.d, p0, [z0.d, #3]
    180 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    181 
    182 
    183 // --------------------------------------------------------------------------//
    184 // Negative tests for instructions that are incompatible with movprfx
    185 
    186 movprfx z31.d, p7/z, z6.d
    187 st1w    { z31.d }, p7, [z31.d, #124]
    188 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    189 // CHECK-NEXT: st1w    { z31.d }, p7, [z31.d, #124]
    190 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    191 
    192 movprfx z31, z6
    193 st1w    { z31.d }, p7, [z31.d, #124]
    194 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    195 // CHECK-NEXT: st1w    { z31.d }, p7, [z31.d, #124]
    196 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    197