Skip to content

Commit 99a52f9

Browse files
[AArch64] Add support for Armv9.6-A FEAT_SPE_EXC and FEAT_TRBE_EXC (#113463)
Add support for the following Armv9.6-A architecture extensions: * FEAT_SPE_EXC - Statistical Profiling Extension profiling exceptions * FEAT_TRBE_EXC - Trace Buffer Management Events profiling exceptions as documented here: https://developer.arm.com/documentation/109697/2024_09/Feature-descriptions/The-Armv9-6-architecture-extension Co-authored-by: Jonathan Thackray <[email protected]>
1 parent 564fd62 commit 99a52f9

File tree

5 files changed

+77
-0
lines changed

5 files changed

+77
-0
lines changed

llvm/lib/Target/AArch64/AArch64SystemOperands.td

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2048,3 +2048,16 @@ let Requires = [{ {AArch64::FeaturePCDPHINT} }] in {
20482048

20492049
// v9.6a Realm management extension enhancements
20502050
def : RWSysReg<"GPCBW_EL3", 0b11, 0b110, 0b0010, 0b0001, 0b101>;
2051+
2052+
// v9.6a Statistical Profiling Extension exception registers (FEAT_SPE_EXC)
2053+
// Op0 Op1 CRn CRm Op2
2054+
def : RWSysReg<"PMBMAR_EL1", 0b11, 0b000, 0b1001, 0b1010, 0b101>;
2055+
def : RWSysReg<"PMBSR_EL12", 0b11, 0b101, 0b1001, 0b1010, 0b011>;
2056+
def : RWSysReg<"PMBSR_EL2", 0b11, 0b100, 0b1001, 0b1010, 0b011>;
2057+
def : RWSysReg<"PMBSR_EL3", 0b11, 0b110, 0b1001, 0b1010, 0b011>;
2058+
2059+
// v9.6a Trace Buffer Management Events exception registers (FEAT_TRBE_EXC)
2060+
// Op0 Op1 CRn CRm Op2
2061+
def : RWSysReg<"TRBSR_EL12", 0b11, 0b101, 0b1001, 0b1011, 0b011>;
2062+
def : RWSysReg<"TRBSR_EL2", 0b11, 0b100, 0b1001, 0b1011, 0b011>;
2063+
def : RWSysReg<"TRBSR_EL3", 0b11, 0b110, 0b1001, 0b1011, 0b011>;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding < %s 2> %t | FileCheck %s
2+
3+
msr pmbmar_el1, x0
4+
msr pmbsr_el12, x0
5+
msr pmbsr_el2, x0
6+
msr pmbsr_el3, x0
7+
// CHECK: msr PMBMAR_EL1, x0 // encoding: [0xa0,0x9a,0x18,0xd5]
8+
// CHECK: msr PMBSR_EL12, x0 // encoding: [0x60,0x9a,0x1d,0xd5]
9+
// CHECK: msr PMBSR_EL2, x0 // encoding: [0x60,0x9a,0x1c,0xd5]
10+
// CHECK: msr PMBSR_EL3, x0 // encoding: [0x60,0x9a,0x1e,0xd5]
11+
12+
mrs x0, pmbmar_el1
13+
mrs x0, pmbsr_el12
14+
mrs x0, pmbsr_el2
15+
mrs x0, pmbsr_el3
16+
// CHECK: mrs x0, PMBMAR_EL1 // encoding: [0xa0,0x9a,0x38,0xd5]
17+
// CHECK: mrs x0, PMBSR_EL12 // encoding: [0x60,0x9a,0x3d,0xd5]
18+
// CHECK: mrs x0, PMBSR_EL2 // encoding: [0x60,0x9a,0x3c,0xd5]
19+
// CHECK: mrs x0, PMBSR_EL3 // encoding: [0x60,0x9a,0x3e,0xd5]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding < %s 2> %t | FileCheck %s
2+
3+
msr trbsr_el12, x0
4+
msr trbsr_el2, x0
5+
msr trbsr_el3, x0
6+
// CHECK: msr TRBSR_EL12, x0 // encoding: [0x60,0x9b,0x1d,0xd5]
7+
// CHECK: msr TRBSR_EL2, x0 // encoding: [0x60,0x9b,0x1c,0xd5]
8+
// CHECK: msr TRBSR_EL3, x0 // encoding: [0x60,0x9b,0x1e,0xd5]
9+
10+
mrs x0, trbsr_el12
11+
mrs x0, trbsr_el2
12+
mrs x0, trbsr_el3
13+
// CHECK: mrs x0, TRBSR_EL12 // encoding: [0x60,0x9b,0x3d,0xd5]
14+
// CHECK: mrs x0, TRBSR_EL2 // encoding: [0x60,0x9b,0x3c,0xd5]
15+
// CHECK: mrs x0, TRBSR_EL3 // encoding: [0x60,0x9b,0x3e,0xd5]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# RUN: llvm-mc -triple aarch64 -disassemble < %s | FileCheck %s
2+
3+
[0x60,0x9a,0x1d,0xd5]
4+
# CHECK: msr PMBSR_EL12, x0
5+
[0x60,0x9a,0x1c,0xd5]
6+
# CHECK: msr PMBSR_EL2, x0
7+
[0x60,0x9a,0x1e,0xd5]
8+
# CHECK: msr PMBSR_EL3, x0
9+
10+
[0x60,0x9a,0x3d,0xd5]
11+
# CHECK: mrs x0, PMBSR_EL12
12+
[0x60,0x9a,0x3c,0xd5]
13+
# CHECK: mrs x0, PMBSR_EL2
14+
[0x60,0x9a,0x3e,0xd5]
15+
# CHECK: mrs x0, PMBSR_EL3
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# RUN: llvm-mc -triple aarch64 -disassemble < %s | FileCheck %s
2+
3+
[0x60,0x9b,0x1d,0xd5]
4+
# CHECK: msr TRBSR_EL12, x0
5+
[0x60,0x9b,0x1c,0xd5]
6+
# CHECK: msr TRBSR_EL2, x0
7+
[0x60,0x9b,0x1e,0xd5]
8+
# CHECK: msr TRBSR_EL3, x0
9+
10+
[0x60,0x9b,0x3d,0xd5]
11+
# CHECK: mrs x0, TRBSR_EL12
12+
[0x60,0x9b,0x3c,0xd5]
13+
# CHECK: mrs x0, TRBSR_EL2
14+
[0x60,0x9b,0x3e,0xd5]
15+
# CHECK: mrs x0, TRBSR_EL3

0 commit comments

Comments
 (0)