1 // RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve < %s \ 2 // RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST 3 // RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \ 4 // RUN: | FileCheck %s --check-prefix=CHECK-ERROR 5 // RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \ 6 // RUN: | llvm-objdump -d -mattr=+sve - | FileCheck %s --check-prefix=CHECK-INST 7 // RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve < %s \ 8 // RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN 9 10 11 // ---------------------------------------------------------------------------// 12 // Test 64-bit form (x0) and its aliases 13 // ---------------------------------------------------------------------------// 14 15 uqinch x0 16 // CHECK-INST: uqinch x0 17 // CHECK-ENCODING: [0xe0,0xf7,0x70,0x04] 18 // CHECK-ERROR: instruction requires: sve 19 // CHECK-UNKNOWN: e0 f7 70 04 <unknown> 20 21 uqinch x0, all 22 // CHECK-INST: uqinch x0 23 // CHECK-ENCODING: [0xe0,0xf7,0x70,0x04] 24 // CHECK-ERROR: instruction requires: sve 25 // CHECK-UNKNOWN: e0 f7 70 04 <unknown> 26 27 uqinch x0, all, mul #1 28 // CHECK-INST: uqinch x0 29 // CHECK-ENCODING: [0xe0,0xf7,0x70,0x04] 30 // CHECK-ERROR: instruction requires: sve 31 // CHECK-UNKNOWN: e0 f7 70 04 <unknown> 32 33 uqinch x0, all, mul #16 34 // CHECK-INST: uqinch x0, all, mul #16 35 // CHECK-ENCODING: [0xe0,0xf7,0x7f,0x04] 36 // CHECK-ERROR: instruction requires: sve 37 // CHECK-UNKNOWN: e0 f7 7f 04 <unknown> 38 39 40 // ---------------------------------------------------------------------------// 41 // Test 32-bit form (w0) and its aliases 42 // ---------------------------------------------------------------------------// 43 44 uqinch w0 45 // CHECK-INST: uqinch w0 46 // CHECK-ENCODING: [0xe0,0xf7,0x60,0x04] 47 // CHECK-ERROR: instruction requires: sve 48 // CHECK-UNKNOWN: e0 f7 60 04 <unknown> 49 50 uqinch w0, all 51 // CHECK-INST: uqinch w0 52 // CHECK-ENCODING: [0xe0,0xf7,0x60,0x04] 53 // CHECK-ERROR: instruction requires: sve 54 // CHECK-UNKNOWN: e0 f7 60 04 <unknown> 55 56 uqinch w0, all, mul #1 57 // CHECK-INST: uqinch w0 58 // CHECK-ENCODING: [0xe0,0xf7,0x60,0x04] 59 // CHECK-ERROR: instruction requires: sve 60 // CHECK-UNKNOWN: e0 f7 60 04 <unknown> 61 62 uqinch w0, all, mul #16 63 // CHECK-INST: uqinch w0, all, mul #16 64 // CHECK-ENCODING: [0xe0,0xf7,0x6f,0x04] 65 // CHECK-ERROR: instruction requires: sve 66 // CHECK-UNKNOWN: e0 f7 6f 04 <unknown> 67 68 uqinch w0, pow2 69 // CHECK-INST: uqinch w0, pow2 70 // CHECK-ENCODING: [0x00,0xf4,0x60,0x04] 71 // CHECK-ERROR: instruction requires: sve 72 // CHECK-UNKNOWN: 00 f4 60 04 <unknown> 73 74 uqinch w0, pow2, mul #16 75 // CHECK-INST: uqinch w0, pow2, mul #16 76 // CHECK-ENCODING: [0x00,0xf4,0x6f,0x04] 77 // CHECK-ERROR: instruction requires: sve 78 // CHECK-UNKNOWN: 00 f4 6f 04 <unknown> 79 80 81 // ---------------------------------------------------------------------------// 82 // Test vector form and aliases. 83 // ---------------------------------------------------------------------------// 84 85 uqinch z0.h 86 // CHECK-INST: uqinch z0.h 87 // CHECK-ENCODING: [0xe0,0xc7,0x60,0x04] 88 // CHECK-ERROR: instruction requires: sve 89 // CHECK-UNKNOWN: e0 c7 60 04 <unknown> 90 91 uqinch z0.h, all 92 // CHECK-INST: uqinch z0.h 93 // CHECK-ENCODING: [0xe0,0xc7,0x60,0x04] 94 // CHECK-ERROR: instruction requires: sve 95 // CHECK-UNKNOWN: e0 c7 60 04 <unknown> 96 97 uqinch z0.h, all, mul #1 98 // CHECK-INST: uqinch z0.h 99 // CHECK-ENCODING: [0xe0,0xc7,0x60,0x04] 100 // CHECK-ERROR: instruction requires: sve 101 // CHECK-UNKNOWN: e0 c7 60 04 <unknown> 102 103 uqinch z0.h, all, mul #16 104 // CHECK-INST: uqinch z0.h, all, mul #16 105 // CHECK-ENCODING: [0xe0,0xc7,0x6f,0x04] 106 // CHECK-ERROR: instruction requires: sve 107 // CHECK-UNKNOWN: e0 c7 6f 04 <unknown> 108 109 uqinch z0.h, pow2 110 // CHECK-INST: uqinch z0.h, pow2 111 // CHECK-ENCODING: [0x00,0xc4,0x60,0x04] 112 // CHECK-ERROR: instruction requires: sve 113 // CHECK-UNKNOWN: 00 c4 60 04 <unknown> 114 115 uqinch z0.h, pow2, mul #16 116 // CHECK-INST: uqinch z0.h, pow2, mul #16 117 // CHECK-ENCODING: [0x00,0xc4,0x6f,0x04] 118 // CHECK-ERROR: instruction requires: sve 119 // CHECK-UNKNOWN: 00 c4 6f 04 <unknown> 120 121 122 // ---------------------------------------------------------------------------// 123 // Test all patterns for 64-bit form 124 // ---------------------------------------------------------------------------// 125 126 uqinch x0, pow2 127 // CHECK-INST: uqinch x0, pow2 128 // CHECK-ENCODING: [0x00,0xf4,0x70,0x04] 129 // CHECK-ERROR: instruction requires: sve 130 // CHECK-UNKNOWN: 00 f4 70 04 <unknown> 131 132 uqinch x0, vl1 133 // CHECK-INST: uqinch x0, vl1 134 // CHECK-ENCODING: [0x20,0xf4,0x70,0x04] 135 // CHECK-ERROR: instruction requires: sve 136 // CHECK-UNKNOWN: 20 f4 70 04 <unknown> 137 138 uqinch x0, vl2 139 // CHECK-INST: uqinch x0, vl2 140 // CHECK-ENCODING: [0x40,0xf4,0x70,0x04] 141 // CHECK-ERROR: instruction requires: sve 142 // CHECK-UNKNOWN: 40 f4 70 04 <unknown> 143 144 uqinch x0, vl3 145 // CHECK-INST: uqinch x0, vl3 146 // CHECK-ENCODING: [0x60,0xf4,0x70,0x04] 147 // CHECK-ERROR: instruction requires: sve 148 // CHECK-UNKNOWN: 60 f4 70 04 <unknown> 149 150 uqinch x0, vl4 151 // CHECK-INST: uqinch x0, vl4 152 // CHECK-ENCODING: [0x80,0xf4,0x70,0x04] 153 // CHECK-ERROR: instruction requires: sve 154 // CHECK-UNKNOWN: 80 f4 70 04 <unknown> 155 156 uqinch x0, vl5 157 // CHECK-INST: uqinch x0, vl5 158 // CHECK-ENCODING: [0xa0,0xf4,0x70,0x04] 159 // CHECK-ERROR: instruction requires: sve 160 // CHECK-UNKNOWN: a0 f4 70 04 <unknown> 161 162 uqinch x0, vl6 163 // CHECK-INST: uqinch x0, vl6 164 // CHECK-ENCODING: [0xc0,0xf4,0x70,0x04] 165 // CHECK-ERROR: instruction requires: sve 166 // CHECK-UNKNOWN: c0 f4 70 04 <unknown> 167 168 uqinch x0, vl7 169 // CHECK-INST: uqinch x0, vl7 170 // CHECK-ENCODING: [0xe0,0xf4,0x70,0x04] 171 // CHECK-ERROR: instruction requires: sve 172 // CHECK-UNKNOWN: e0 f4 70 04 <unknown> 173 174 uqinch x0, vl8 175 // CHECK-INST: uqinch x0, vl8 176 // CHECK-ENCODING: [0x00,0xf5,0x70,0x04] 177 // CHECK-ERROR: instruction requires: sve 178 // CHECK-UNKNOWN: 00 f5 70 04 <unknown> 179 180 uqinch x0, vl16 181 // CHECK-INST: uqinch x0, vl16 182 // CHECK-ENCODING: [0x20,0xf5,0x70,0x04] 183 // CHECK-ERROR: instruction requires: sve 184 // CHECK-UNKNOWN: 20 f5 70 04 <unknown> 185 186 uqinch x0, vl32 187 // CHECK-INST: uqinch x0, vl32 188 // CHECK-ENCODING: [0x40,0xf5,0x70,0x04] 189 // CHECK-ERROR: instruction requires: sve 190 // CHECK-UNKNOWN: 40 f5 70 04 <unknown> 191 192 uqinch x0, vl64 193 // CHECK-INST: uqinch x0, vl64 194 // CHECK-ENCODING: [0x60,0xf5,0x70,0x04] 195 // CHECK-ERROR: instruction requires: sve 196 // CHECK-UNKNOWN: 60 f5 70 04 <unknown> 197 198 uqinch x0, vl128 199 // CHECK-INST: uqinch x0, vl128 200 // CHECK-ENCODING: [0x80,0xf5,0x70,0x04] 201 // CHECK-ERROR: instruction requires: sve 202 // CHECK-UNKNOWN: 80 f5 70 04 <unknown> 203 204 uqinch x0, vl256 205 // CHECK-INST: uqinch x0, vl256 206 // CHECK-ENCODING: [0xa0,0xf5,0x70,0x04] 207 // CHECK-ERROR: instruction requires: sve 208 // CHECK-UNKNOWN: a0 f5 70 04 <unknown> 209 210 uqinch x0, #14 211 // CHECK-INST: uqinch x0, #14 212 // CHECK-ENCODING: [0xc0,0xf5,0x70,0x04] 213 // CHECK-ERROR: instruction requires: sve 214 // CHECK-UNKNOWN: c0 f5 70 04 <unknown> 215 216 uqinch x0, #15 217 // CHECK-INST: uqinch x0, #15 218 // CHECK-ENCODING: [0xe0,0xf5,0x70,0x04] 219 // CHECK-ERROR: instruction requires: sve 220 // CHECK-UNKNOWN: e0 f5 70 04 <unknown> 221 222 uqinch x0, #16 223 // CHECK-INST: uqinch x0, #16 224 // CHECK-ENCODING: [0x00,0xf6,0x70,0x04] 225 // CHECK-ERROR: instruction requires: sve 226 // CHECK-UNKNOWN: 00 f6 70 04 <unknown> 227 228 uqinch x0, #17 229 // CHECK-INST: uqinch x0, #17 230 // CHECK-ENCODING: [0x20,0xf6,0x70,0x04] 231 // CHECK-ERROR: instruction requires: sve 232 // CHECK-UNKNOWN: 20 f6 70 04 <unknown> 233 234 uqinch x0, #18 235 // CHECK-INST: uqinch x0, #18 236 // CHECK-ENCODING: [0x40,0xf6,0x70,0x04] 237 // CHECK-ERROR: instruction requires: sve 238 // CHECK-UNKNOWN: 40 f6 70 04 <unknown> 239 240 uqinch x0, #19 241 // CHECK-INST: uqinch x0, #19 242 // CHECK-ENCODING: [0x60,0xf6,0x70,0x04] 243 // CHECK-ERROR: instruction requires: sve 244 // CHECK-UNKNOWN: 60 f6 70 04 <unknown> 245 246 uqinch x0, #20 247 // CHECK-INST: uqinch x0, #20 248 // CHECK-ENCODING: [0x80,0xf6,0x70,0x04] 249 // CHECK-ERROR: instruction requires: sve 250 // CHECK-UNKNOWN: 80 f6 70 04 <unknown> 251 252 uqinch x0, #21 253 // CHECK-INST: uqinch x0, #21 254 // CHECK-ENCODING: [0xa0,0xf6,0x70,0x04] 255 // CHECK-ERROR: instruction requires: sve 256 // CHECK-UNKNOWN: a0 f6 70 04 <unknown> 257 258 uqinch x0, #22 259 // CHECK-INST: uqinch x0, #22 260 // CHECK-ENCODING: [0xc0,0xf6,0x70,0x04] 261 // CHECK-ERROR: instruction requires: sve 262 // CHECK-UNKNOWN: c0 f6 70 04 <unknown> 263 264 uqinch x0, #23 265 // CHECK-INST: uqinch x0, #23 266 // CHECK-ENCODING: [0xe0,0xf6,0x70,0x04] 267 // CHECK-ERROR: instruction requires: sve 268 // CHECK-UNKNOWN: e0 f6 70 04 <unknown> 269 270 uqinch x0, #24 271 // CHECK-INST: uqinch x0, #24 272 // CHECK-ENCODING: [0x00,0xf7,0x70,0x04] 273 // CHECK-ERROR: instruction requires: sve 274 // CHECK-UNKNOWN: 00 f7 70 04 <unknown> 275 276 uqinch x0, #25 277 // CHECK-INST: uqinch x0, #25 278 // CHECK-ENCODING: [0x20,0xf7,0x70,0x04] 279 // CHECK-ERROR: instruction requires: sve 280 // CHECK-UNKNOWN: 20 f7 70 04 <unknown> 281 282 uqinch x0, #26 283 // CHECK-INST: uqinch x0, #26 284 // CHECK-ENCODING: [0x40,0xf7,0x70,0x04] 285 // CHECK-ERROR: instruction requires: sve 286 // CHECK-UNKNOWN: 40 f7 70 04 <unknown> 287 288 uqinch x0, #27 289 // CHECK-INST: uqinch x0, #27 290 // CHECK-ENCODING: [0x60,0xf7,0x70,0x04] 291 // CHECK-ERROR: instruction requires: sve 292 // CHECK-UNKNOWN: 60 f7 70 04 <unknown> 293 294 uqinch x0, #28 295 // CHECK-INST: uqinch x0, #28 296 // CHECK-ENCODING: [0x80,0xf7,0x70,0x04] 297 // CHECK-ERROR: instruction requires: sve 298 // CHECK-UNKNOWN: 80 f7 70 04 <unknown> 299 300 301 // --------------------------------------------------------------------------// 302 // Test compatibility with MOVPRFX instruction. 303 304 movprfx z0, z7 305 // CHECK-INST: movprfx z0, z7 306 // CHECK-ENCODING: [0xe0,0xbc,0x20,0x04] 307 // CHECK-ERROR: instruction requires: sve 308 // CHECK-UNKNOWN: e0 bc 20 04 <unknown> 309 310 uqinch z0.h 311 // CHECK-INST: uqinch z0.h 312 // CHECK-ENCODING: [0xe0,0xc7,0x60,0x04] 313 // CHECK-ERROR: instruction requires: sve 314 // CHECK-UNKNOWN: e0 c7 60 04 <unknown> 315 316 movprfx z0, z7 317 // CHECK-INST: movprfx z0, z7 318 // CHECK-ENCODING: [0xe0,0xbc,0x20,0x04] 319 // CHECK-ERROR: instruction requires: sve 320 // CHECK-UNKNOWN: e0 bc 20 04 <unknown> 321 322 uqinch z0.h, pow2, mul #16 323 // CHECK-INST: uqinch z0.h, pow2, mul #16 324 // CHECK-ENCODING: [0x00,0xc4,0x6f,0x04] 325 // CHECK-ERROR: instruction requires: sve 326 // CHECK-UNKNOWN: 00 c4 6f 04 <unknown> 327 328 movprfx z0, z7 329 // CHECK-INST: movprfx z0, z7 330 // CHECK-ENCODING: [0xe0,0xbc,0x20,0x04] 331 // CHECK-ERROR: instruction requires: sve 332 // CHECK-UNKNOWN: e0 bc 20 04 <unknown> 333 334 uqinch z0.h, pow2 335 // CHECK-INST: uqinch z0.h, pow2 336 // CHECK-ENCODING: [0x00,0xc4,0x60,0x04] 337 // CHECK-ERROR: instruction requires: sve 338 // CHECK-UNKNOWN: 00 c4 60 04 <unknown> 339