1// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.3a -o - %s 2>&1 | \ 2// RUN: FileCheck --check-prefixes=CHECK,ALL %s 3 4// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding %s -o - > %t.1 2>%t.2 5// RUN: FileCheck --check-prefixes=NO83,ALL %s < %t.1 6// RUN: FileCheck --check-prefix=CHECK-REQ %s < %t.2 7 8.text 9 mrs x0, apiakeylo_el1 10 mrs x0, apiakeyhi_el1 11 mrs x0, apibkeylo_el1 12 mrs x0, apibkeyhi_el1 13 mrs x0, apdakeylo_el1 14 mrs x0, apdakeyhi_el1 15 mrs x0, apdbkeylo_el1 16 mrs x0, apdbkeyhi_el1 17 mrs x0, apgakeylo_el1 18 mrs x0, apgakeyhi_el1 19// ALL: .text 20// CHECK-NEXT: mrs x0, APIAKeyLo_EL1 // encoding: [0x00,0x21,0x38,0xd5] 21// CHECK-NEXT: mrs x0, APIAKeyHi_EL1 // encoding: [0x20,0x21,0x38,0xd5] 22// CHECK-NEXT: mrs x0, APIBKeyLo_EL1 // encoding: [0x40,0x21,0x38,0xd5] 23// CHECK-NEXT: mrs x0, APIBKeyHi_EL1 // encoding: [0x60,0x21,0x38,0xd5] 24// CHECK-NEXT: mrs x0, APDAKeyLo_EL1 // encoding: [0x00,0x22,0x38,0xd5] 25// CHECK-NEXT: mrs x0, APDAKeyHi_EL1 // encoding: [0x20,0x22,0x38,0xd5] 26// CHECK-NEXT: mrs x0, APDBKeyLo_EL1 // encoding: [0x40,0x22,0x38,0xd5] 27// CHECK-NEXT: mrs x0, APDBKeyHi_EL1 // encoding: [0x60,0x22,0x38,0xd5] 28// CHECK-NEXT: mrs x0, APGAKeyLo_EL1 // encoding: [0x00,0x23,0x38,0xd5] 29// CHECK-NEXT: mrs x0, APGAKeyHi_EL1 // encoding: [0x20,0x23,0x38,0xd5] 30 31// CHECK-REQ: error: expected readable system register 32// CHECK-REQ-NEXT: mrs x0, apiakeylo_el1 33// CHECK-REQ: error: expected readable system register 34// CHECK-REQ-NEXT: mrs x0, apiakeyhi_el1 35// CHECK-REQ: error: expected readable system register 36// CHECK-REQ-NEXT: mrs x0, apibkeylo_el1 37// CHECK-REQ: error: expected readable system register 38// CHECK-REQ-NEXT: mrs x0, apibkeyhi_el1 39// CHECK-REQ: error: expected readable system register 40// CHECK-REQ-NEXT: mrs x0, apdakeylo_el1 41// CHECK-REQ: error: expected readable system register 42// CHECK-REQ-NEXT: mrs x0, apdakeyhi_el1 43// CHECK-REQ: error: expected readable system register 44// CHECK-REQ-NEXT: mrs x0, apdbkeylo_el1 45// CHECK-REQ: error: expected readable system register 46// CHECK-REQ-NEXT: mrs x0, apdbkeyhi_el1 47// CHECK-REQ: error: expected readable system register 48// CHECK-REQ-NEXT: mrs x0, apgakeylo_el1 49// CHECK-REQ: error: expected readable system register 50// CHECK-REQ-NEXT: mrs x0, apgakeyhi_el1 51 52 msr apiakeylo_el1, x0 53 msr apiakeyhi_el1, x0 54 msr apibkeylo_el1, x0 55 msr apibkeyhi_el1, x0 56 msr apdakeylo_el1, x0 57 msr apdakeyhi_el1, x0 58 msr apdbkeylo_el1, x0 59 msr apdbkeyhi_el1, x0 60 msr apgakeylo_el1, x0 61 msr apgakeyhi_el1, x0 62// ALL-EMPTY: 63// ALL-EMPTY: 64// CHECK-NEXT: msr APIAKeyLo_EL1, x0 // encoding: [0x00,0x21,0x18,0xd5] 65// CHECK-NEXT: msr APIAKeyHi_EL1, x0 // encoding: [0x20,0x21,0x18,0xd5] 66// CHECK-NEXT: msr APIBKeyLo_EL1, x0 // encoding: [0x40,0x21,0x18,0xd5] 67// CHECK-NEXT: msr APIBKeyHi_EL1, x0 // encoding: [0x60,0x21,0x18,0xd5] 68// CHECK-NEXT: msr APDAKeyLo_EL1, x0 // encoding: [0x00,0x22,0x18,0xd5] 69// CHECK-NEXT: msr APDAKeyHi_EL1, x0 // encoding: [0x20,0x22,0x18,0xd5] 70// CHECK-NEXT: msr APDBKeyLo_EL1, x0 // encoding: [0x40,0x22,0x18,0xd5] 71// CHECK-NEXT: msr APDBKeyHi_EL1, x0 // encoding: [0x60,0x22,0x18,0xd5] 72// CHECK-NEXT: msr APGAKeyLo_EL1, x0 // encoding: [0x00,0x23,0x18,0xd5] 73// CHECK-NEXT: msr APGAKeyHi_EL1, x0 // encoding: [0x20,0x23,0x18,0xd5] 74 75// CHECK-REQ: error: expected writable system register or pstate 76// CHECK-REQ-NEXT: msr apiakeylo_el1, x0 77// CHECK-REQ: error: expected writable system register or pstate 78// CHECK-REQ-NEXT: msr apiakeyhi_el1, x0 79// CHECK-REQ: error: expected writable system register or pstate 80// CHECK-REQ-NEXT: msr apibkeylo_el1, x0 81// CHECK-REQ: error: expected writable system register or pstate 82// CHECK-REQ-NEXT: msr apibkeyhi_el1, x0 83// CHECK-REQ: error: expected writable system register or pstate 84// CHECK-REQ-NEXT: msr apdakeylo_el1, x0 85// CHECK-REQ: error: expected writable system register or pstate 86// CHECK-REQ-NEXT: msr apdakeyhi_el1, x0 87// CHECK-REQ: error: expected writable system register or pstate 88// CHECK-REQ-NEXT: msr apdbkeylo_el1, x0 89// CHECK-REQ: error: expected writable system register or pstate 90// CHECK-REQ-NEXT: msr apdbkeyhi_el1, x0 91// CHECK-REQ: error: expected writable system register or pstate 92// CHECK-REQ-NEXT: msr apgakeylo_el1, x0 93// CHECK-REQ: error: expected writable system register or pstate 94// CHECK-REQ-NEXT: msr apgakeyhi_el1, x0 95 96// ALL-EMPTY: 97// ALL-EMPTY: 98 hint #7 99 xpaclri 100// CHECK-NEXT: xpaclri // encoding: [0xff,0x20,0x03,0xd5] 101// CHECK-NEXT: xpaclri // encoding: [0xff,0x20,0x03,0xd5] 102// NO83-NEXT: hint #7 // encoding: [0xff,0x20,0x03,0xd5] 103// NO83-NEXT: hint #7 // encoding: [0xff,0x20,0x03,0xd5] 104 hint #8 105 pacia1716 106// CHECK-NEXT: pacia1716 // encoding: [0x1f,0x21,0x03,0xd5] 107// CHECK-NEXT: pacia1716 // encoding: [0x1f,0x21,0x03,0xd5] 108// NO83-NEXT: hint #8 // encoding: [0x1f,0x21,0x03,0xd5] 109// NO83-NEXT: hint #8 // encoding: [0x1f,0x21,0x03,0xd5] 110 hint #10 111 pacib1716 112// CHECK-NEXT: pacib1716 // encoding: [0x5f,0x21,0x03,0xd5] 113// CHECK-NEXT: pacib1716 // encoding: [0x5f,0x21,0x03,0xd5] 114// NO83-NEXT: hint #10 // encoding: [0x5f,0x21,0x03,0xd5] 115// NO83-NEXT: hint #10 // encoding: [0x5f,0x21,0x03,0xd5] 116 hint #12 117 autia1716 118// CHECK-NEXT: autia1716 // encoding: [0x9f,0x21,0x03,0xd5] 119// CHECK-NEXT: autia1716 // encoding: [0x9f,0x21,0x03,0xd5] 120// NO83-NEXT: hint #12 // encoding: [0x9f,0x21,0x03,0xd5] 121// NO83-NEXT: hint #12 // encoding: [0x9f,0x21,0x03,0xd5] 122 hint #14 123 autib1716 124// CHECK-NEXT: autib1716 // encoding: [0xdf,0x21,0x03,0xd5] 125// CHECK-NEXT: autib1716 // encoding: [0xdf,0x21,0x03,0xd5] 126// NO83-NEXT: hint #14 // encoding: [0xdf,0x21,0x03,0xd5] 127// NO83-NEXT: hint #14 // encoding: [0xdf,0x21,0x03,0xd5] 128 hint #24 129 paciaz 130// CHECK-NEXT: paciaz // encoding: [0x1f,0x23,0x03,0xd5] 131// CHECK-NEXT: paciaz // encoding: [0x1f,0x23,0x03,0xd5] 132// NO83-NEXT: hint #24 // encoding: [0x1f,0x23,0x03,0xd5] 133// NO83-NEXT: hint #24 // encoding: [0x1f,0x23,0x03,0xd5] 134 hint #25 135 paciasp 136// CHECK-NEXT: paciasp // encoding: [0x3f,0x23,0x03,0xd5] 137// CHECK-NEXT: paciasp // encoding: [0x3f,0x23,0x03,0xd5] 138// NO83-NEXT: hint #25 // encoding: [0x3f,0x23,0x03,0xd5] 139// NO83-NEXT: hint #25 // encoding: [0x3f,0x23,0x03,0xd5] 140 hint #26 141 pacibz 142// CHECK-NEXT: pacibz // encoding: [0x5f,0x23,0x03,0xd5] 143// CHECK-NEXT: pacibz // encoding: [0x5f,0x23,0x03,0xd5] 144// NO83-NEXT: hint #26 // encoding: [0x5f,0x23,0x03,0xd5] 145// NO83-NEXT: hint #26 // encoding: [0x5f,0x23,0x03,0xd5] 146 hint #27 147 pacibsp 148// CHECK-NEXT: pacibsp // encoding: [0x7f,0x23,0x03,0xd5] 149// CHECK-NEXT: pacibsp // encoding: [0x7f,0x23,0x03,0xd5] 150// NO83-NEXT: hint #27 // encoding: [0x7f,0x23,0x03,0xd5] 151// NO83-NEXT: hint #27 // encoding: [0x7f,0x23,0x03,0xd5] 152 hint #28 153 autiaz 154// CHECK-NEXT: autiaz // encoding: [0x9f,0x23,0x03,0xd5] 155// CHECK-NEXT: autiaz // encoding: [0x9f,0x23,0x03,0xd5] 156// NO83-NEXT: hint #28 // encoding: [0x9f,0x23,0x03,0xd5] 157// NO83-NEXT: hint #28 // encoding: [0x9f,0x23,0x03,0xd5] 158 hint #29 159 autiasp 160// CHECK-NEXT: autiasp // encoding: [0xbf,0x23,0x03,0xd5] 161// CHECK-NEXT: autiasp // encoding: [0xbf,0x23,0x03,0xd5] 162// NO83-NEXT: hint #29 // encoding: [0xbf,0x23,0x03,0xd5] 163// NO83-NEXT: hint #29 // encoding: [0xbf,0x23,0x03,0xd5] 164 hint #30 165 autibz 166// CHECK-NEXT: autibz // encoding: [0xdf,0x23,0x03,0xd5] 167// CHECK-NEXT: autibz // encoding: [0xdf,0x23,0x03,0xd5] 168// NO83-NEXT: hint #30 // encoding: [0xdf,0x23,0x03,0xd5] 169// NO83-NEXT: hint #30 // encoding: [0xdf,0x23,0x03,0xd5] 170 hint #31 171 autibsp 172// CHECK-NEXT: autibsp // encoding: [0xff,0x23,0x03,0xd5] 173// CHECK-NEXT: autibsp // encoding: [0xff,0x23,0x03,0xd5] 174// NO83-NEXT: hint #31 // encoding: [0xff,0x23,0x03,0xd5] 175// NO83-NEXT: hint #31 // encoding: [0xff,0x23,0x03,0xd5] 176 177// ALL-EMPTY: 178 pacia x0, x1 179// CHECK-NEXT: pacia x0, x1 // encoding: [0x20,0x00,0xc1,0xda] 180// CHECK-REQ-NEXT: ^ 181// CHECK-REQ-NEXT: error: instruction requires: pa 182// CHECK-REQ-NEXT: pacia x0, x1 183 autia x0, x1 184// CHECK-NEXT: autia x0, x1 // encoding: [0x20,0x10,0xc1,0xda] 185// CHECK-REQ: error: instruction requires: pa 186// CHECK-REQ-NEXT: autia x0, x1 187 pacda x0, x1 188// CHECK-NEXT: pacda x0, x1 // encoding: [0x20,0x08,0xc1,0xda] 189// CHECK-REQ: error: instruction requires: pa 190// CHECK-REQ-NEXT: pacda x0, x1 191 autda x0, x1 192// CHECK-NEXT: autda x0, x1 // encoding: [0x20,0x18,0xc1,0xda] 193// CHECK-REQ: error: instruction requires: pa 194// CHECK-REQ-NEXT: autda x0, x1 195 pacib x0, x1 196// CHECK-NEXT: pacib x0, x1 // encoding: [0x20,0x04,0xc1,0xda] 197// CHECK-REQ: error: instruction requires: pa 198// CHECK-REQ-NEXT: pacib x0, x1 199 autib x0, x1 200// CHECK-NEXT: autib x0, x1 // encoding: [0x20,0x14,0xc1,0xda] 201// CHECK-REQ: error: instruction requires: pa 202// CHECK-REQ-NEXT: autib x0, x1 203 pacdb x0, x1 204// CHECK-NEXT: pacdb x0, x1 // encoding: [0x20,0x0c,0xc1,0xda] 205// CHECK-REQ: error: instruction requires: pa 206// CHECK-REQ-NEXT: pacdb x0, x1 207 autdb x0, x1 208// CHECK-NEXT: autdb x0, x1 // encoding: [0x20,0x1c,0xc1,0xda] 209// CHECK-REQ: error: instruction requires: pa 210// CHECK-REQ-NEXT: autdb x0, x1 211 pacga x0, x1, x2 212// CHECK-NEXT: pacga x0, x1, x2 // encoding: [0x20,0x30,0xc2,0x9a] 213// CHECK-REQ: error: instruction requires: pa 214// CHECK-REQ-NEXT: pacga x0, x1, x2 215 paciza x0 216// CHECK-NEXT: paciza x0 // encoding: [0xe0,0x23,0xc1,0xda] 217// CHECK-REQ: error: instruction requires: pa 218// CHECK-REQ-NEXT: paciza x0 219 autiza x0 220// CHECK-NEXT: autiza x0 // encoding: [0xe0,0x33,0xc1,0xda] 221// CHECK-REQ: error: instruction requires: pa 222// CHECK-REQ-NEXT: autiza x0 223 pacdza x0 224// CHECK-NEXT: pacdza x0 // encoding: [0xe0,0x2b,0xc1,0xda] 225// CHECK-REQ: error: instruction requires: pa 226// CHECK-REQ-NEXT: pacdza x0 227 autdza x0 228// CHECK-NEXT: autdza x0 // encoding: [0xe0,0x3b,0xc1,0xda] 229// CHECK-REQ: error: instruction requires: pa 230// CHECK-REQ-NEXT: autdza x0 231 pacizb x0 232// CHECK-NEXT: pacizb x0 // encoding: [0xe0,0x27,0xc1,0xda] 233// CHECK-REQ: error: instruction requires: pa 234// CHECK-REQ-NEXT: pacizb x0 235 autizb x0 236// CHECK-NEXT: autizb x0 // encoding: [0xe0,0x37,0xc1,0xda] 237// CHECK-REQ: error: instruction requires: pa 238// CHECK-REQ-NEXT: autizb x0 239 pacdzb x0 240// CHECK-NEXT: pacdzb x0 // encoding: [0xe0,0x2f,0xc1,0xda] 241// CHECK-REQ: error: instruction requires: pa 242// CHECK-REQ-NEXT: pacdzb x0 243 autdzb x0 244// CHECK-NEXT: autdzb x0 // encoding: [0xe0,0x3f,0xc1,0xda] 245// CHECK-REQ: error: instruction requires: pa 246// CHECK-REQ-NEXT: autdzb x0 247 xpaci x0 248// CHECK-NEXT: xpaci x0 // encoding: [0xe0,0x43,0xc1,0xda] 249// CHECK-REQ: error: instruction requires: pa 250// CHECK-REQ-NEXT: xpaci x0 251 xpacd x0 252// CHECK-NEXT: xpacd x0 // encoding: [0xe0,0x47,0xc1,0xda] 253// CHECK-REQ: error: instruction requires: pa 254// CHECK-REQ-NEXT: xpacd x0 255 256 braa x0, x1 257// CHECK-EMPTY: 258// CHECK-NEXT: braa x0, x1 // encoding: [0x01,0x08,0x1f,0xd7] 259// CHECK-REQ: error: instruction requires: pa 260// CHECK-REQ-NEXT: braa x0, x1 261 brab x0, x1 262// CHECK-NEXT: brab x0, x1 // encoding: [0x01,0x0c,0x1f,0xd7] 263// CHECK-REQ: error: instruction requires: pa 264// CHECK-REQ-NEXT: brab x0, x1 265 blraa x0, x1 266// CHECK-NEXT: blraa x0, x1 // encoding: [0x01,0x08,0x3f,0xd7] 267// CHECK-REQ: error: instruction requires: pa 268// CHECK-REQ-NEXT: blraa x0, x1 269 blrab x0, x1 270// CHECK-NEXT: blrab x0, x1 // encoding: [0x01,0x0c,0x3f,0xd7] 271// CHECK-REQ: error: instruction requires: pa 272// CHECK-REQ-NEXT: blrab x0, x1 273 274 braaz x0 275// CHECK-EMPTY: 276// CHECK-NEXT: braaz x0 // encoding: [0x1f,0x08,0x1f,0xd6] 277// CHECK-REQ: error: instruction requires: pa 278// CHECK-REQ-NEXT: braaz x0 279 brabz x0 280// CHECK-NEXT: brabz x0 // encoding: [0x1f,0x0c,0x1f,0xd6] 281// CHECK-REQ: error: instruction requires: pa 282// CHECK-REQ-NEXT: brabz x0 283 blraaz x0 284// CHECK-NEXT: blraaz x0 // encoding: [0x1f,0x08,0x3f,0xd6] 285// CHECK-REQ: error: instruction requires: pa 286// CHECK-REQ-NEXT: blraaz x0 287 blrabz x0 288// CHECK-NEXT: blrabz x0 // encoding: [0x1f,0x0c,0x3f,0xd6] 289// CHECK-REQ: error: instruction requires: pa 290// CHECK-REQ-NEXT: blrabz x0 291 retaa 292// CHECK-NEXT: retaa // encoding: [0xff,0x0b,0x5f,0xd6] 293// CHECK-REQ: error: instruction requires: pa 294// CHECK-REQ-NEXT: retaa 295 retab 296// CHECK-NEXT: retab // encoding: [0xff,0x0f,0x5f,0xd6] 297// CHECK-REQ: error: instruction requires: pa 298// CHECK-REQ-NEXT: retab 299 eretaa 300// CHECK-NEXT: eretaa // encoding: [0xff,0x0b,0x9f,0xd6] 301// CHECK-REQ: error: instruction requires: pa 302// CHECK-REQ-NEXT: eretaa 303 eretab 304// CHECK-NEXT: eretab // encoding: [0xff,0x0f,0x9f,0xd6] 305// CHECK-REQ: error: instruction requires: pa 306// CHECK-REQ-NEXT: eretab 307 ldraa x0, [x1, 4088] 308// CHECK-NEXT: ldraa x0, [x1, #4088] // encoding: [0x20,0xf4,0x3f,0xf8] 309// CHECK-REQ: error: instruction requires: pa 310// CHECK-REQ-NEXT: ldraa x0, [x1, 4088] 311 ldraa x0, [x1, -4096] 312// CHECK-NEXT: ldraa x0, [x1, #-4096] // encoding: [0x20,0x04,0x60,0xf8] 313// CHECK-REQ: error: instruction requires: pa 314// CHECK-REQ-NEXT: ldraa x0, [x1, -4096] 315 ldrab x0, [x1, 4088] 316// CHECK-NEXT: ldrab x0, [x1, #4088] // encoding: [0x20,0xf4,0xbf,0xf8] 317// CHECK-REQ: error: instruction requires: pa 318// CHECK-REQ-NEXT: ldrab x0, [x1, 4088] 319 ldrab x0, [x1, -4096] 320// CHECK-NEXT: ldrab x0, [x1, #-4096] // encoding: [0x20,0x04,0xe0,0xf8] 321// CHECK-REQ: error: instruction requires: pa 322// CHECK-REQ-NEXT: ldrab x0, [x1, -4096] 323 ldraa x0, [x1, 4088]! 324// CHECK-NEXT: ldraa x0, [x1, #4088]! // encoding: [0x20,0xfc,0x3f,0xf8] 325// CHECK-REQ: error: instruction requires: pa 326// CHECK-REQ-NEXT: ldraa x0, [x1, 4088]! 327 ldraa x0, [x1, -4096]! 328// CHECK-NEXT: ldraa x0, [x1, #-4096]! // encoding: [0x20,0x0c,0x60,0xf8] 329// CHECK-REQ: error: instruction requires: pa 330// CHECK-REQ-NEXT: ldraa x0, [x1, -4096]! 331 ldrab x0, [x1, 4088]! 332// CHECK-NEXT: ldrab x0, [x1, #4088]! // encoding: [0x20,0xfc,0xbf,0xf8] 333// CHECK-REQ: error: instruction requires: pa 334// CHECK-REQ-NEXT: ldrab x0, [x1, 4088]! 335 ldrab x0, [x1, -4096]! 336// CHECK-NEXT: ldrab x0, [x1, #-4096]! // encoding: [0x20,0x0c,0xe0,0xf8] 337// CHECK-REQ: error: instruction requires: pa 338// CHECK-REQ-NEXT: ldrab x0, [x1, -4096]! 339 ldraa x0, [x1] 340// CHECK-NEXT: ldraa x0, [x1] // encoding: [0x20,0x04,0x20,0xf8] 341// CHECK-REQ: error: instruction requires: pa 342// CHECK-REQ-NEXT: ldraa x0, [x1] 343 ldrab x0, [x1] 344// CHECK-NEXT: ldrab x0, [x1] // encoding: [0x20,0x04,0xa0,0xf8] 345// CHECK-REQ: error: instruction requires: pa 346// CHECK-REQ-NEXT: ldrab x0, [x1] 347 ldraa x0, [x1]! 348// CHECK-NEXT: ldraa x0, [x1, #0]! // encoding: [0x20,0x0c,0x20,0xf8] 349// CHECK-REQ: error: instruction requires: pa 350// CHECK-REQ-NEXT: ldraa x0, [x1]! 351 ldrab x0, [x1]! 352// CHECK-NEXT: ldrab x0, [x1, #0]! // encoding: [0x20,0x0c,0xa0,0xf8] 353// CHECK-REQ: error: instruction requires: pa 354// CHECK-REQ-NEXT: ldrab x0, [x1]! 355 ldraa xzr, [sp, -4096]! 356// CHECK-NEXT: ldraa xzr, [sp, #-4096]! // encoding: [0xff,0x0f,0x60,0xf8] 357// CHECK-REQ: error: instruction requires: pa 358// CHECK-REQ-NEXT: ldraa xzr, [sp, -4096]! 359 ldrab xzr, [sp, -4096]! 360// CHECK-NEXT: ldrab xzr, [sp, #-4096]! // encoding: [0xff,0x0f,0xe0,0xf8] 361// CHECK-REQ: error: instruction requires: pa 362// CHECK-REQ-NEXT: ldrab xzr, [sp, -4096]! 363