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