1#![allow(non_snake_case, non_upper_case_globals)]
11
12use crate::AArch64SysRegId;
13
14const fn bit(val: u8, bit_index: u32) -> u8 {
15 (val >> bit_index) & 1
16}
17
18const fn bits(val: u8, hi_index: u32, lo_index: u32) -> u8 {
19 let mask = 1u8.wrapping_shl(hi_index - lo_index + 1).wrapping_sub(1);
20 (val >> lo_index) & mask
21}
22
23pub const fn AMEVCNTR0n_EL0(m: u8) -> AArch64SysRegId {
24 assert!(m <= 3);
25 let crm = (0b010 << 1) | bit(m, 3);
26 let op2 = bits(m, 2, 0);
27 AArch64SysRegId::new_unchecked(0b11, 0b011, 0b1101, crm, op2)
28}
29
30pub const fn AMEVCNTR1n_EL0(m: u8) -> AArch64SysRegId {
31 assert!(m <= 15);
32 let crm = (0b110 << 1) | bit(m, 3);
33 let op2 = bits(m, 2, 0);
34 AArch64SysRegId::new_unchecked(0b11, 0b011, 0b1101, crm, op2)
35}
36
37pub const fn AMEVCNTVOFF0n_EL2(m: u8) -> AArch64SysRegId {
38 assert!(m <= 15);
39 let crm = (0b100 << 1) | bit(m, 3);
40 let op2 = bits(m, 2, 0);
41 AArch64SysRegId::new_unchecked(0b11, 0b100, 0b1101, crm, op2)
42}
43
44pub const fn AMEVCNTVOFF1n_EL2(m: u8) -> AArch64SysRegId {
45 assert!(m <= 15);
46 let crm = (0b101 << 1) | bit(m, 3);
47 let op2 = bits(m, 2, 0);
48 AArch64SysRegId::new_unchecked(0b11, 0b100, 0b1101, crm, op2)
49}
50
51pub const fn AMEVTYPER0n_EL0(m: u8) -> AArch64SysRegId {
52 assert!(m <= 3);
53 let crm = (0b011 << 1) | bit(m, 3);
54 let op2 = bits(m, 2, 0);
55 AArch64SysRegId::new_unchecked(0b11, 0b011, 0b1101, crm, op2)
56}
57
58pub const fn AMEVTYPER1n_EL0(m: u8) -> AArch64SysRegId {
59 assert!(m <= 15);
60 let crm = (0b111 << 1) | bit(m, 3);
61 let op2 = bits(m, 2, 0);
62 AArch64SysRegId::new_unchecked(0b11, 0b011, 0b1101, crm, op2)
63}
64
65pub const fn BRBINFn_EL1(m: u8) -> AArch64SysRegId {
66 assert!(m <= 31);
67 let crm = bits(m, 3, 0);
68 let op2 = (bit(m, 4) << 2) | 0b00;
69 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b1000, crm, op2)
70}
71
72pub const fn BRBSRCn_EL1(m: u8) -> AArch64SysRegId {
73 assert!(m <= 31);
74 let crm = bits(m, 3, 0);
75 let op2 = (bit(m, 4) << 2) | 0b01;
76 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b1000, crm, op2)
77}
78
79pub const fn BRBTGTn_EL1(m: u8) -> AArch64SysRegId {
80 assert!(m <= 31);
81 let crm = bits(m, 3, 0);
82 let op2 = (bit(m, 4) << 2) | 0b10;
83 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b1000, crm, op2)
84}
85
86pub const fn DBGBCRn_EL1(m: u8) -> AArch64SysRegId {
87 assert!(m <= 15);
88 let crm = bits(m, 3, 0);
89 AArch64SysRegId::new_unchecked(0b10, 0b000, 0b0000, crm, 0b101)
90}
91
92pub const fn DBGBVRn_EL1(m: u8) -> AArch64SysRegId {
93 assert!(m <= 15);
94 let crm = bits(m, 3, 0);
95 AArch64SysRegId::new_unchecked(0b10, 0b000, 0b0000, crm, 0b100)
96}
97
98pub const fn DBGWCRn_EL1(m: u8) -> AArch64SysRegId {
99 assert!(m <= 15);
100 let crm = bits(m, 3, 0);
101 AArch64SysRegId::new_unchecked(0b10, 0b000, 0b0000, crm, 0b111)
102}
103
104pub const fn DBGWVRn_EL1(m: u8) -> AArch64SysRegId {
105 assert!(m <= 15);
106 let crm = bits(m, 3, 0);
107 AArch64SysRegId::new_unchecked(0b10, 0b000, 0b0000, crm, 0b110)
108}
109
110pub const fn ICC_AP0Rn_EL1(m: u8) -> AArch64SysRegId {
111 assert!(m <= 3);
112 let op2 = (0b1 << 2) | bits(m, 1, 0);
113 AArch64SysRegId::new_unchecked(0b11, 0b000, 0b1100, 0b1000, op2)
114}
115
116pub const fn ICC_AP1Rn_EL1(m: u8) -> AArch64SysRegId {
117 assert!(m <= 3);
118 let op2 = (0b0 << 2) | bits(m, 1, 0);
119 AArch64SysRegId::new_unchecked(0b11, 0b000, 0b1100, 0b1001, op2)
120}
121
122pub const fn ICH_AP0Rn_EL2(m: u8) -> AArch64SysRegId {
123 assert!(m <= 3);
124 let op2 = (0b0 << 2) | bits(m, 1, 0);
125 AArch64SysRegId::new_unchecked(0b11, 0b100, 0b1100, 0b1000, op2)
126}
127
128pub const fn ICH_AP1Rn_EL2(m: u8) -> AArch64SysRegId {
129 assert!(m <= 3);
130 let op2 = (0b0 << 2) | bits(m, 1, 0);
131 AArch64SysRegId::new_unchecked(0b11, 0b100, 0b1100, 0b1001, op2)
132}
133
134pub const fn ICH_LRn_EL2(m: u8) -> AArch64SysRegId {
135 assert!(m <= 15);
136 let crm = (0b110 << 1) | bit(m, 3);
137 let op2 = bits(m, 2, 0);
138 AArch64SysRegId::new_unchecked(0b11, 0b100, 0b1100, crm, op2)
139}
140
141pub const fn PMEVCNTRn_EL0(m: u8) -> AArch64SysRegId {
142 assert!(m <= 30);
143 let crm = (0b10 << 2) | bits(m, 4, 3);
144 let op2 = bits(m, 2, 0);
145 AArch64SysRegId::new_unchecked(0b11, 0b011, 0b1110, crm, op2)
146}
147
148pub const fn PMEVCNTSVRn_EL1(m: u8) -> AArch64SysRegId {
149 assert!(m <= 30);
150 let crm = (0b10 << 2) | bits(m, 4, 3);
151 let op2 = bits(m, 2, 0);
152 AArch64SysRegId::new_unchecked(0b10, 0b000, 0b1110, crm, op2)
153}
154
155pub const fn PMEVTYPERn_EL0(m: u8) -> AArch64SysRegId {
156 assert!(m <= 30);
157 let crm = (0b11 << 2) | bits(m, 4, 3);
158 let op2 = bits(m, 2, 0);
159 AArch64SysRegId::new_unchecked(0b11, 0b011, 0b1110, crm, op2)
160}
161
162pub const fn SPMCGCRn_EL1(m: u8) -> AArch64SysRegId {
163 assert!(m <= 1);
164 let op2 = (0b00 << 1) | bit(m, 0);
165 AArch64SysRegId::new_unchecked(0b10, 0b000, 0b1001, 0b1101, op2)
166}
167
168pub const fn SPMEVCNTRn_EL0(m: u8) -> AArch64SysRegId {
169 assert!(m <= 15);
170 let crm = (0b000 << 1) | bit(m, 3);
171 let op2 = bits(m, 2, 0);
172 AArch64SysRegId::new_unchecked(0b10, 0b011, 0b1110, crm, op2)
173}
174
175pub const fn SPMEVFILT2Rn_EL0(m: u8) -> AArch64SysRegId {
176 assert!(m <= 15);
177 let crm = (0b011 << 1) | bit(m, 3);
178 let op2 = bits(m, 2, 0);
179 AArch64SysRegId::new_unchecked(0b10, 0b011, 0b1110, crm, op2)
180}
181
182pub const fn SPMEVFILTRn_EL0(m: u8) -> AArch64SysRegId {
183 assert!(m <= 15);
184 let crm = (0b010 << 1) | bit(m, 3);
185 let op2 = bits(m, 2, 0);
186 AArch64SysRegId::new_unchecked(0b10, 0b011, 0b1110, crm, op2)
187}
188
189pub const fn SPMEVTYPERn_EL0(m: u8) -> AArch64SysRegId {
190 assert!(m <= 15);
191 let crm = (0b001 << 1) | bit(m, 3);
192 let op2 = bits(m, 2, 0);
193 AArch64SysRegId::new_unchecked(0b10, 0b011, 0b1110, crm, op2)
194}
195
196pub const fn TRCACATRn(m: u8) -> AArch64SysRegId {
197 assert!(m <= 15);
198 let crm = (bits(m, 2, 0) << 1) | 0b0;
199 let op2 = (0b01 << 1) | bit(m, 3);
200 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0010, crm, op2)
201}
202
203pub const fn TRCACVRn(m: u8) -> AArch64SysRegId {
204 assert!(m <= 15);
205 let crm = (bits(m, 2, 0) << 1) | 0b0;
206 let op2 = (0b00 << 1) | bit(m, 3);
207 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0010, crm, op2)
208}
209
210pub const fn TRCCIDCVRn(m: u8) -> AArch64SysRegId {
211 assert!(m <= 7);
212 let crm = (bits(m, 2, 0) << 1) | 0b0;
213 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0011, crm, 0b000)
214}
215
216pub const fn TRCCNTCTLRn(m: u8) -> AArch64SysRegId {
217 assert!(m <= 3);
218 let crm = (0b01 << 2) | bits(m, 1, 0);
219 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0000, crm, 0b101)
220}
221
222pub const fn TRCCNTRLDVRn(m: u8) -> AArch64SysRegId {
223 assert!(m <= 3);
224 let crm = (0b00 << 1) | bits(m, 1, 0);
225 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0000, crm, 0b101)
226}
227
228pub const fn TRCCNTVRn(m: u8) -> AArch64SysRegId {
229 assert!(m <= 3);
230 let crm = (0b10 << 2) | bits(m, 1, 0);
231 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0000, crm, 0b101)
232}
233
234pub const fn TRCEXTINSELRn(m: u8) -> AArch64SysRegId {
235 assert!(m <= 3);
236 let crm = (0b10 << 2) | bits(m, 1, 0);
237 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0000, crm, 0b100)
238}
239
240pub const fn TRCIMSPECn(m: u8) -> AArch64SysRegId {
241 assert!(m >= 1 && m <= 7);
242 let crm = (0b0 << 3) | bits(m, 2, 0);
243 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0000, crm, 0b111)
244}
245
246pub const fn TRCRSCTLRn(m: u8) -> AArch64SysRegId {
247 assert!(m >= 2 && m <= 31);
248 let crm = bits(m, 3, 0);
249 let op2 = (0b00 << 1) | bit(m, 4);
250 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0001, crm, op2)
251}
252
253pub const fn TRCSEQEVRn(m: u8) -> AArch64SysRegId {
254 assert!(m <= 2);
255 let crm = (0b00 << 2) | bits(m, 1, 0);
256 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0000, crm, 0b100)
257}
258
259pub const fn TRCSSCCRn(m: u8) -> AArch64SysRegId {
260 assert!(m <= 7);
261 let crm = (0b0 << 3) | bits(m, 2, 0);
262 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0001, crm, 0b010)
263}
264
265pub const fn TRCSSCSRn(m: u8) -> AArch64SysRegId {
266 assert!(m <= 7);
267 let crm = (0b1 << 3) | bits(m, 2, 0);
268 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0001, crm, 0b010)
269}
270
271pub const fn TRCSSPCICRn(m: u8) -> AArch64SysRegId {
272 assert!(m <= 7);
273 let crm = (0b0 << 3) | bits(m, 2, 0);
274 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0001, crm, 0b011)
275}
276
277pub const fn TRCVMIDCVRn(m: u8) -> AArch64SysRegId {
278 assert!(m <= 7);
279 let crm = (bits(m, 2, 0) << 1) | 0b0;
280 AArch64SysRegId::new_unchecked(0b10, 0b001, 0b0011, crm, 0b001)
281}