Skip to content

Commit ddb64e6

Browse files
authored
[AArch64] Add support for Armv9.6-A FEAT_MPAM system registers (#111822)
Add support for Armv9.6-A FEAT_MPAM system registers as documented here: https://developer.arm.com/documentation/ddi0601/2024-09/AArch64-Registers
1 parent 3dedcab commit ddb64e6

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

llvm/lib/Target/AArch64/AArch64SystemOperands.td

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,3 +1970,14 @@ def : RWSysReg<"HACDBSCONS_EL2", 0b11, 0b100, 0b0010, 0b0011, 0b101>;
19701970
// v9.5a Fine Grained Write Trap EL3 (FEAT_FGWTE3)
19711971
// Op0 Op1 CRn CRm Op2
19721972
def : RWSysReg<"FGWTE3_EL3", 0b11, 0b110, 0b0001, 0b0001, 0b101>;
1973+
1974+
// v9.6a Memory partitioning and monitoring (FEAT_MPAM) registers
1975+
// Op0 Op1 CRn CRm Op2
1976+
def : ROSysReg<"MPAMBWIDR_EL1", 0b11, 0b000, 0b1010, 0b0100, 0b101>;
1977+
def : RWSysReg<"MPAMBW3_EL3", 0b11, 0b110, 0b1010, 0b0101, 0b100>;
1978+
def : RWSysReg<"MPAMBW2_EL2", 0b11, 0b100, 0b1010, 0b0101, 0b100>;
1979+
def : RWSysReg<"MPAMBW1_EL1", 0b11, 0b000, 0b1010, 0b0101, 0b100>;
1980+
def : RWSysReg<"MPAMBW1_EL12", 0b11, 0b101, 0b1010, 0b0101, 0b100>;
1981+
def : RWSysReg<"MPAMBW0_EL1", 0b11, 0b000, 0b1010, 0b0101, 0b101>;
1982+
def : RWSysReg<"MPAMBWCAP_EL2", 0b11, 0b100, 0b1010, 0b0101, 0b110>;
1983+
def : RWSysReg<"MPAMBWSM_EL1", 0b11, 0b000, 0b1010, 0b0101, 0b111>;

llvm/test/MC/AArch64/armv9.6a-mpam.s

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding < %s 2> %t | FileCheck %s --check-prefix=CHECK
2+
// RUN: FileCheck --check-prefix=CHECK-RO < %t %s
3+
4+
//------------------------------------------------------------------------------
5+
// Armv9.6-A FEAT_MPAM Extensions
6+
//------------------------------------------------------------------------------
7+
8+
msr MPAMBWIDR_EL1, x0
9+
msr MPAMBW3_EL3, x0
10+
msr MPAMBW2_EL2, x0
11+
msr MPAMBW1_EL1, x0
12+
msr MPAMBW1_EL12, x0
13+
msr MPAMBW0_EL1, x0
14+
msr MPAMBWCAP_EL2, x0
15+
msr MPAMBWSM_EL1, x0
16+
17+
mrs x0, MPAMBWIDR_EL1
18+
mrs x0, MPAMBW3_EL3
19+
mrs x0, MPAMBW2_EL2
20+
mrs x0, MPAMBW1_EL1
21+
mrs x0, MPAMBW1_EL12
22+
mrs x0, MPAMBW0_EL1
23+
mrs x0, MPAMBWCAP_EL2
24+
mrs x0, MPAMBWSM_EL1
25+
26+
//CHECK: msr MPAMBW3_EL3, x0 // encoding: [0x80,0xa5,0x1e,0xd5]
27+
//CHECK: msr MPAMBW2_EL2, x0 // encoding: [0x80,0xa5,0x1c,0xd5]
28+
//CHECK: msr MPAMBW1_EL1, x0 // encoding: [0x80,0xa5,0x18,0xd5]
29+
//CHECK: msr MPAMBW1_EL12, x0 // encoding: [0x80,0xa5,0x1d,0xd5]
30+
//CHECK: msr MPAMBW0_EL1, x0 // encoding: [0xa0,0xa5,0x18,0xd5]
31+
//CHECK: msr MPAMBWCAP_EL2, x0 // encoding: [0xc0,0xa5,0x1c,0xd5]
32+
//CHECK: msr MPAMBWSM_EL1, x0 // encoding: [0xe0,0xa5,0x18,0xd5]
33+
34+
//CHECK-RO: error: expected writable system register or pstate
35+
//CHECK-RO: msr MPAMBWIDR_EL1, x0
36+
//CHECK-RO: ^
37+
38+
//CHECK: mrs x0, MPAMBWIDR_EL1 // encoding: [0xa0,0xa4,0x38,0xd5]
39+
//CHECK: mrs x0, MPAMBW3_EL3 // encoding: [0x80,0xa5,0x3e,0xd5]
40+
//CHECK: mrs x0, MPAMBW2_EL2 // encoding: [0x80,0xa5,0x3c,0xd5]
41+
//CHECK: mrs x0, MPAMBW1_EL1 // encoding: [0x80,0xa5,0x38,0xd5]
42+
//CHECK: mrs x0, MPAMBW1_EL12 // encoding: [0x80,0xa5,0x3d,0xd5]
43+
//CHECK: mrs x0, MPAMBW0_EL1 // encoding: [0xa0,0xa5,0x38,0xd5]
44+
//CHECK: mrs x0, MPAMBWCAP_EL2 // encoding: [0xc0,0xa5,0x3c,0xd5]
45+
//CHECK: mrs x0, MPAMBWSM_EL1 // encoding: [0xe0,0xa5,0x38,0xd5]
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# RUN: llvm-mc -triple aarch64 -disassemble < %s | FileCheck %s
2+
3+
#------------------------------------------------------------------------------
4+
# Armv9.6-A FEAT_MPAM Extensions
5+
#------------------------------------------------------------------------------
6+
7+
[0x80,0xa5,0x1e,0xd5]
8+
# CHECK: msr MPAMBW3_EL3, x0
9+
10+
[0x80,0xa5,0x1c,0xd5]
11+
# CHECK: msr MPAMBW2_EL2, x0
12+
13+
[0x80,0xa5,0x18,0xd5]
14+
# CHECK: msr MPAMBW1_EL1, x0
15+
16+
[0x80,0xa5,0x1d,0xd5]
17+
# CHECK: msr MPAMBW1_EL12, x0
18+
19+
[0xa0,0xa5,0x18,0xd5]
20+
# CHECK: msr MPAMBW0_EL1, x0
21+
22+
[0xc0,0xa5,0x1c,0xd5]
23+
# CHECK: msr MPAMBWCAP_EL2, x0
24+
25+
[0xe0,0xa5,0x18,0xd5]
26+
# CHECK: msr MPAMBWSM_EL1, x0
27+
28+
[0xa0,0xa4,0x38,0xd5]
29+
# CHECK: mrs x0, MPAMBWIDR_EL1
30+
31+
[0x80,0xa5,0x3e,0xd5]
32+
# CHECK: mrs x0, MPAMBW3_EL3
33+
34+
[0x80,0xa5,0x3c,0xd5]
35+
# CHECK: mrs x0, MPAMBW2_EL2
36+
37+
[0x80,0xa5,0x38,0xd5]
38+
# CHECK: mrs x0, MPAMBW1_EL1
39+
40+
[0x80,0xa5,0x3d,0xd5]
41+
# CHECK: mrs x0, MPAMBW1_EL12
42+
43+
[0xa0,0xa5,0x38,0xd5]
44+
# CHECK: mrs x0, MPAMBW0_EL1
45+
46+
[0xc0,0xa5,0x3c,0xd5]
47+
# CHECK: mrs x0, MPAMBWCAP_EL2
48+
49+
[0xe0,0xa5,0x38,0xd5]
50+
# CHECK: mrs x0, MPAMBWSM_EL1

0 commit comments

Comments
 (0)