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 sub z0.h, z0.h, z0.h 11 // CHECK-INST: sub z0.h, z0.h, z0.h 12 // CHECK-ENCODING: [0x00,0x04,0x60,0x04] 13 // CHECK-ERROR: instruction requires: sve 14 // CHECK-UNKNOWN: 00 04 60 04 <unknown> 15 16 sub z21.b, z10.b, z21.b 17 // CHECK-INST: sub z21.b, z10.b, z21.b 18 // CHECK-ENCODING: [0x55,0x05,0x35,0x04] 19 // CHECK-ERROR: instruction requires: sve 20 // CHECK-UNKNOWN: 55 05 35 04 <unknown> 21 22 sub z31.d, p7/m, z31.d, z31.d 23 // CHECK-INST: sub z31.d, p7/m, z31.d, z31.d 24 // CHECK-ENCODING: [0xff,0x1f,0xc1,0x04] 25 // CHECK-ERROR: instruction requires: sve 26 // CHECK-UNKNOWN: ff 1f c1 04 <unknown> 27 28 sub z23.h, p3/m, z23.h, z13.h 29 // CHECK-INST: sub z23.h, p3/m, z23.h, z13.h 30 // CHECK-ENCODING: [0xb7,0x0d,0x41,0x04] 31 // CHECK-ERROR: instruction requires: sve 32 // CHECK-UNKNOWN: b7 0d 41 04 <unknown> 33 34 sub z31.h, z31.h, z31.h 35 // CHECK-INST: sub z31.h, z31.h, z31.h 36 // CHECK-ENCODING: [0xff,0x07,0x7f,0x04] 37 // CHECK-ERROR: instruction requires: sve 38 // CHECK-UNKNOWN: ff 07 7f 04 <unknown> 39 40 sub z21.h, z10.h, z21.h 41 // CHECK-INST: sub z21.h, z10.h, z21.h 42 // CHECK-ENCODING: [0x55,0x05,0x75,0x04] 43 // CHECK-ERROR: instruction requires: sve 44 // CHECK-UNKNOWN: 55 05 75 04 <unknown> 45 46 sub z31.b, z31.b, z31.b 47 // CHECK-INST: sub z31.b, z31.b, z31.b 48 // CHECK-ENCODING: [0xff,0x07,0x3f,0x04] 49 // CHECK-ERROR: instruction requires: sve 50 // CHECK-UNKNOWN: ff 07 3f 04 <unknown> 51 52 sub z0.s, z0.s, z0.s 53 // CHECK-INST: sub z0.s, z0.s, z0.s 54 // CHECK-ENCODING: [0x00,0x04,0xa0,0x04] 55 // CHECK-ERROR: instruction requires: sve 56 // CHECK-UNKNOWN: 00 04 a0 04 <unknown> 57 58 sub z23.s, p3/m, z23.s, z13.s 59 // CHECK-INST: sub z23.s, p3/m, z23.s, z13.s 60 // CHECK-ENCODING: [0xb7,0x0d,0x81,0x04] 61 // CHECK-ERROR: instruction requires: sve 62 // CHECK-UNKNOWN: b7 0d 81 04 <unknown> 63 64 sub z23.b, z13.b, z8.b 65 // CHECK-INST: sub z23.b, z13.b, z8.b 66 // CHECK-ENCODING: [0xb7,0x05,0x28,0x04] 67 // CHECK-ERROR: instruction requires: sve 68 // CHECK-UNKNOWN: b7 05 28 04 <unknown> 69 70 sub z21.d, z10.d, z21.d 71 // CHECK-INST: sub z21.d, z10.d, z21.d 72 // CHECK-ENCODING: [0x55,0x05,0xf5,0x04] 73 // CHECK-ERROR: instruction requires: sve 74 // CHECK-UNKNOWN: 55 05 f5 04 <unknown> 75 76 sub z21.s, z10.s, z21.s 77 // CHECK-INST: sub z21.s, z10.s, z21.s 78 // CHECK-ENCODING: [0x55,0x05,0xb5,0x04] 79 // CHECK-ERROR: instruction requires: sve 80 // CHECK-UNKNOWN: 55 05 b5 04 <unknown> 81 82 sub z21.s, p5/m, z21.s, z10.s 83 // CHECK-INST: sub z21.s, p5/m, z21.s, z10.s 84 // CHECK-ENCODING: [0x55,0x15,0x81,0x04] 85 // CHECK-ERROR: instruction requires: sve 86 // CHECK-UNKNOWN: 55 15 81 04 <unknown> 87 88 sub z31.s, p7/m, z31.s, z31.s 89 // CHECK-INST: sub z31.s, p7/m, z31.s, z31.s 90 // CHECK-ENCODING: [0xff,0x1f,0x81,0x04] 91 // CHECK-ERROR: instruction requires: sve 92 // CHECK-UNKNOWN: ff 1f 81 04 <unknown> 93 94 sub z0.d, p0/m, z0.d, z0.d 95 // CHECK-INST: sub z0.d, p0/m, z0.d, z0.d 96 // CHECK-ENCODING: [0x00,0x00,0xc1,0x04] 97 // CHECK-ERROR: instruction requires: sve 98 // CHECK-UNKNOWN: 00 00 c1 04 <unknown> 99 100 sub z0.b, z0.b, z0.b 101 // CHECK-INST: sub z0.b, z0.b, z0.b 102 // CHECK-ENCODING: [0x00,0x04,0x20,0x04] 103 // CHECK-ERROR: instruction requires: sve 104 // CHECK-UNKNOWN: 00 04 20 04 <unknown> 105 106 sub z23.d, z13.d, z8.d 107 // CHECK-INST: sub z23.d, z13.d, z8.d 108 // CHECK-ENCODING: [0xb7,0x05,0xe8,0x04] 109 // CHECK-ERROR: instruction requires: sve 110 // CHECK-UNKNOWN: b7 05 e8 04 <unknown> 111 112 sub z23.d, p3/m, z23.d, z13.d 113 // CHECK-INST: sub z23.d, p3/m, z23.d, z13.d 114 // CHECK-ENCODING: [0xb7,0x0d,0xc1,0x04] 115 // CHECK-ERROR: instruction requires: sve 116 // CHECK-UNKNOWN: b7 0d c1 04 <unknown> 117 118 sub z23.s, z13.s, z8.s 119 // CHECK-INST: sub z23.s, z13.s, z8.s 120 // CHECK-ENCODING: [0xb7,0x05,0xa8,0x04] 121 // CHECK-ERROR: instruction requires: sve 122 // CHECK-UNKNOWN: b7 05 a8 04 <unknown> 123 124 sub z31.b, p7/m, z31.b, z31.b 125 // CHECK-INST: sub z31.b, p7/m, z31.b, z31.b 126 // CHECK-ENCODING: [0xff,0x1f,0x01,0x04] 127 // CHECK-ERROR: instruction requires: sve 128 // CHECK-UNKNOWN: ff 1f 01 04 <unknown> 129 130 sub z0.h, p0/m, z0.h, z0.h 131 // CHECK-INST: sub z0.h, p0/m, z0.h, z0.h 132 // CHECK-ENCODING: [0x00,0x00,0x41,0x04] 133 // CHECK-ERROR: instruction requires: sve 134 // CHECK-UNKNOWN: 00 00 41 04 <unknown> 135 136 sub z31.d, z31.d, z31.d 137 // CHECK-INST: sub z31.d, z31.d, z31.d 138 // CHECK-ENCODING: [0xff,0x07,0xff,0x04] 139 // CHECK-ERROR: instruction requires: sve 140 // CHECK-UNKNOWN: ff 07 ff 04 <unknown> 141 142 sub z31.h, p7/m, z31.h, z31.h 143 // CHECK-INST: sub z31.h, p7/m, z31.h, z31.h 144 // CHECK-ENCODING: [0xff,0x1f,0x41,0x04] 145 // CHECK-ERROR: instruction requires: sve 146 // CHECK-UNKNOWN: ff 1f 41 04 <unknown> 147 148 sub z23.h, z13.h, z8.h 149 // CHECK-INST: sub z23.h, z13.h, z8.h 150 // CHECK-ENCODING: [0xb7,0x05,0x68,0x04] 151 // CHECK-ERROR: instruction requires: sve 152 // CHECK-UNKNOWN: b7 05 68 04 <unknown> 153 154 sub z21.b, p5/m, z21.b, z10.b 155 // CHECK-INST: sub z21.b, p5/m, z21.b, z10.b 156 // CHECK-ENCODING: [0x55,0x15,0x01,0x04] 157 // CHECK-ERROR: instruction requires: sve 158 // CHECK-UNKNOWN: 55 15 01 04 <unknown> 159 160 sub z21.d, p5/m, z21.d, z10.d 161 // CHECK-INST: sub z21.d, p5/m, z21.d, z10.d 162 // CHECK-ENCODING: [0x55,0x15,0xc1,0x04] 163 // CHECK-ERROR: instruction requires: sve 164 // CHECK-UNKNOWN: 55 15 c1 04 <unknown> 165 166 sub z0.d, z0.d, z0.d 167 // CHECK-INST: sub z0.d, z0.d, z0.d 168 // CHECK-ENCODING: [0x00,0x04,0xe0,0x04] 169 // CHECK-ERROR: instruction requires: sve 170 // CHECK-UNKNOWN: 00 04 e0 04 <unknown> 171 172 sub z31.s, z31.s, z31.s 173 // CHECK-INST: sub z31.s, z31.s, z31.s 174 // CHECK-ENCODING: [0xff,0x07,0xbf,0x04] 175 // CHECK-ERROR: instruction requires: sve 176 // CHECK-UNKNOWN: ff 07 bf 04 <unknown> 177 178 sub z0.b, p0/m, z0.b, z0.b 179 // CHECK-INST: sub z0.b, p0/m, z0.b, z0.b 180 // CHECK-ENCODING: [0x00,0x00,0x01,0x04] 181 // CHECK-ERROR: instruction requires: sve 182 // CHECK-UNKNOWN: 00 00 01 04 <unknown> 183 184 sub z0.s, p0/m, z0.s, z0.s 185 // CHECK-INST: sub z0.s, p0/m, z0.s, z0.s 186 // CHECK-ENCODING: [0x00,0x00,0x81,0x04] 187 // CHECK-ERROR: instruction requires: sve 188 // CHECK-UNKNOWN: 00 00 81 04 <unknown> 189 190 sub z21.h, p5/m, z21.h, z10.h 191 // CHECK-INST: sub z21.h, p5/m, z21.h, z10.h 192 // CHECK-ENCODING: [0x55,0x15,0x41,0x04] 193 // CHECK-ERROR: instruction requires: sve 194 // CHECK-UNKNOWN: 55 15 41 04 <unknown> 195 196 sub z23.b, p3/m, z23.b, z13.b 197 // CHECK-INST: sub z23.b, p3/m, z23.b, z13.b 198 // CHECK-ENCODING: [0xb7,0x0d,0x01,0x04] 199 // CHECK-ERROR: instruction requires: sve 200 // CHECK-UNKNOWN: b7 0d 01 04 <unknown> 201 202 // ----------------------- 203 // 204 205 sub z0.b, z0.b, #0 206 // CHECK-INST: sub z0.b, z0.b, #0 207 // CHECK-ENCODING: [0x00,0xc0,0x21,0x25] 208 // CHECK-ERROR: instruction requires: sve 209 // CHECK-UNKNOWN: 00 c0 21 25 <unknown> 210 211 sub z31.b, z31.b, #255 212 // CHECK-INST: sub z31.b, z31.b, #255 213 // CHECK-ENCODING: [0xff,0xdf,0x21,0x25] 214 // CHECK-ERROR: instruction requires: sve 215 // CHECK-UNKNOWN: ff df 21 25 <unknown> 216 217 sub z0.h, z0.h, #0 218 // CHECK-INST: sub z0.h, z0.h, #0 219 // CHECK-ENCODING: [0x00,0xc0,0x61,0x25] 220 // CHECK-ERROR: instruction requires: sve 221 // CHECK-UNKNOWN: 00 c0 61 25 <unknown> 222 223 sub z0.h, z0.h, #0, lsl #8 224 // CHECK-INST: sub z0.h, z0.h, #0, lsl #8 225 // CHECK-ENCODING: [0x00,0xe0,0x61,0x25] 226 // CHECK-ERROR: instruction requires: sve 227 // CHECK-UNKNOWN: 00 e0 61 25 <unknown> 228 229 sub z31.h, z31.h, #255, lsl #8 230 // CHECK-INST: sub z31.h, z31.h, #65280 231 // CHECK-ENCODING: [0xff,0xff,0x61,0x25] 232 // CHECK-ERROR: instruction requires: sve 233 // CHECK-UNKNOWN: ff ff 61 25 <unknown> 234 235 sub z31.h, z31.h, #65280 236 // CHECK-INST: sub z31.h, z31.h, #65280 237 // CHECK-ENCODING: [0xff,0xff,0x61,0x25] 238 // CHECK-ERROR: instruction requires: sve 239 // CHECK-UNKNOWN: ff ff 61 25 <unknown> 240 241 sub z0.s, z0.s, #0 242 // CHECK-INST: sub z0.s, z0.s, #0 243 // CHECK-ENCODING: [0x00,0xc0,0xa1,0x25] 244 // CHECK-ERROR: instruction requires: sve 245 // CHECK-UNKNOWN: 00 c0 a1 25 <unknown> 246 247 sub z0.s, z0.s, #0, lsl #8 248 // CHECK-INST: sub z0.s, z0.s, #0, lsl #8 249 // CHECK-ENCODING: [0x00,0xe0,0xa1,0x25] 250 // CHECK-ERROR: instruction requires: sve 251 // CHECK-UNKNOWN: 00 e0 a1 25 <unknown> 252 253 sub z31.s, z31.s, #255, lsl #8 254 // CHECK-INST: sub z31.s, z31.s, #65280 255 // CHECK-ENCODING: [0xff,0xff,0xa1,0x25] 256 // CHECK-ERROR: instruction requires: sve 257 // CHECK-UNKNOWN: ff ff a1 25 <unknown> 258 259 sub z31.s, z31.s, #65280 260 // CHECK-INST: sub z31.s, z31.s, #65280 261 // CHECK-ENCODING: [0xff,0xff,0xa1,0x25] 262 // CHECK-ERROR: instruction requires: sve 263 // CHECK-UNKNOWN: ff ff a1 25 <unknown> 264 265 sub z0.d, z0.d, #0 266 // CHECK-INST: sub z0.d, z0.d, #0 267 // CHECK-ENCODING: [0x00,0xc0,0xe1,0x25] 268 // CHECK-ERROR: instruction requires: sve 269 // CHECK-UNKNOWN: 00 c0 e1 25 <unknown> 270 271 sub z0.d, z0.d, #0, lsl #8 272 // CHECK-INST: sub z0.d, z0.d, #0, lsl #8 273 // CHECK-ENCODING: [0x00,0xe0,0xe1,0x25] 274 // CHECK-ERROR: instruction requires: sve 275 // CHECK-UNKNOWN: 00 e0 e1 25 <unknown> 276 277 sub z31.d, z31.d, #255, lsl #8 278 // CHECK-INST: sub z31.d, z31.d, #65280 279 // CHECK-ENCODING: [0xff,0xff,0xe1,0x25] 280 // CHECK-ERROR: instruction requires: sve 281 // CHECK-UNKNOWN: ff ff e1 25 <unknown> 282 283 sub z31.d, z31.d, #65280 284 // CHECK-INST: sub z31.d, z31.d, #65280 285 // CHECK-ENCODING: [0xff,0xff,0xe1,0x25] 286 // CHECK-ERROR: instruction requires: sve 287 // CHECK-UNKNOWN: ff ff e1 25 <unknown> 288 289 290 291 // --------------------------------------------------------------------------// 292 // Test compatibility with MOVPRFX instruction. 293 294 movprfx z23.b, p3/z, z30.b 295 // CHECK-INST: movprfx z23.b, p3/z, z30.b 296 // CHECK-ENCODING: [0xd7,0x2f,0x10,0x04] 297 // CHECK-ERROR: instruction requires: sve 298 // CHECK-UNKNOWN: d7 2f 10 04 <unknown> 299 300 sub z23.b, p3/m, z23.b, z13.b 301 // CHECK-INST: sub z23.b, p3/m, z23.b, z13.b 302 // CHECK-ENCODING: [0xb7,0x0d,0x01,0x04] 303 // CHECK-ERROR: instruction requires: sve 304 // CHECK-UNKNOWN: b7 0d 01 04 <unknown> 305 306 movprfx z23, z30 307 // CHECK-INST: movprfx z23, z30 308 // CHECK-ENCODING: [0xd7,0xbf,0x20,0x04] 309 // CHECK-ERROR: instruction requires: sve 310 // CHECK-UNKNOWN: d7 bf 20 04 <unknown> 311 312 sub z23.b, p3/m, z23.b, z13.b 313 // CHECK-INST: sub z23.b, p3/m, z23.b, z13.b 314 // CHECK-ENCODING: [0xb7,0x0d,0x01,0x04] 315 // CHECK-ERROR: instruction requires: sve 316 // CHECK-UNKNOWN: b7 0d 01 04 <unknown> 317 318 movprfx z31, z6 319 // CHECK-INST: movprfx z31, z6 320 // CHECK-ENCODING: [0xdf,0xbc,0x20,0x04] 321 // CHECK-ERROR: instruction requires: sve 322 // CHECK-UNKNOWN: df bc 20 04 <unknown> 323 324 sub z31.d, z31.d, #65280 325 // CHECK-INST: sub z31.d, z31.d, #65280 326 // CHECK-ENCODING: [0xff,0xff,0xe1,0x25] 327 // CHECK-ERROR: instruction requires: sve 328 // CHECK-UNKNOWN: ff ff e1 25 <unknown> 329