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