Skip to content

Commit cb280f3

Browse files
committed
refactor: 简化宏
Signed-off-by: YdrMaster <[email protected]>
1 parent 734dd3d commit cb280f3

File tree

1 file changed

+57
-57
lines changed

1 file changed

+57
-57
lines changed

fast-trap/src/hal/riscv.rs

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use core::alloc::Layout;
55
#[macro_use]
66
mod arch {
77
macro_rules! save {
8-
($reg:ident => $ptr:ident; $pos:expr) => {
8+
($reg:ident => $ptr:ident[$pos:expr]) => {
99
concat!(
1010
"sw ",
1111
stringify!($reg),
@@ -19,7 +19,7 @@ mod arch {
1919
}
2020

2121
macro_rules! load {
22-
($ptr:ident; $pos:expr => $reg:ident) => {
22+
($ptr:ident[$pos:expr] => $reg:ident) => {
2323
concat!(
2424
"lw ",
2525
stringify!($reg),
@@ -36,7 +36,7 @@ mod arch {
3636
#[macro_use]
3737
mod arch {
3838
macro_rules! save {
39-
($reg:ident => $ptr:ident; $pos:expr) => {
39+
($reg:ident => $ptr:ident[$pos:expr]) => {
4040
concat!(
4141
"sd ",
4242
stringify!($reg),
@@ -50,7 +50,7 @@ mod arch {
5050
}
5151

5252
macro_rules! load {
53-
($ptr:ident; $pos:expr => $reg:ident) => {
53+
($ptr:ident[$pos:expr] => $reg:ident) => {
5454
concat!(
5555
"ld ",
5656
stringify!($reg),
@@ -127,17 +127,17 @@ pub unsafe extern "C" fn trap_entry() {
127127
// 换栈
128128
exchange!(),
129129
// 加载上下文指针
130-
save!(a0 => sp;2),
131-
load!(sp;0 => a0),
130+
save!(a0 => sp[2]),
131+
load!(sp[0] => a0),
132132
// 保存尽量少的寄存器
133-
save!(ra => a0;0),
134-
save!(t0 => a0;1),
135-
save!(t1 => a0;2),
136-
save!(t2 => a0;3),
137-
save!(t3 => a0;4),
138-
save!(t4 => a0;5),
139-
save!(t5 => a0;6),
140-
save!(t6 => a0;7),
133+
save!(ra => a0[0]),
134+
save!(t0 => a0[1]),
135+
save!(t1 => a0[2]),
136+
save!(t2 => a0[3]),
137+
save!(t3 => a0[4]),
138+
save!(t4 => a0[5]),
139+
save!(t5 => a0[6]),
140+
save!(t6 => a0[7]),
141141
// 调用快速路径函数
142142
//
143143
// | reg | position
@@ -156,10 +156,10 @@ pub unsafe extern "C" fn trap_entry() {
156156
// >
157157
// > 若要切换上下文,在快速路径设置 gp/tp/sscratch/sepc 和 sstatus。
158158
"mv a0, sp",
159-
load!(sp;1 => ra),
159+
load!(sp[1] => ra),
160160
"jalr ra",
161161
"0:", // 加载上下文指针
162-
load!(sp;0 => a1),
162+
load!(sp[0] => a1),
163163
// 0:设置少量参数寄存器
164164
" beqz a0, 0f",
165165
// 1:设置所有参数寄存器
@@ -175,18 +175,18 @@ pub unsafe extern "C" fn trap_entry() {
175175
beqz a0, 3f
176176
",
177177
// 4:完整路径
178-
save!(s0 => a1;16),
179-
save!(s1 => a1;17),
180-
save!(s2 => a1;18),
181-
save!(s3 => a1;19),
182-
save!(s4 => a1;20),
183-
save!(s5 => a1;21),
184-
save!(s6 => a1;22),
185-
save!(s7 => a1;23),
186-
save!(s8 => a1;24),
187-
save!(s9 => a1;25),
188-
save!(s10 => a1;26),
189-
save!(s11 => a1;27),
178+
save!(s0 => a1[16]),
179+
save!(s1 => a1[17]),
180+
save!(s2 => a1[18]),
181+
save!(s3 => a1[19]),
182+
save!(s4 => a1[20]),
183+
save!(s5 => a1[21]),
184+
save!(s6 => a1[22]),
185+
save!(s7 => a1[23]),
186+
save!(s8 => a1[24]),
187+
save!(s9 => a1[25]),
188+
save!(s10 => a1[26]),
189+
save!(s11 => a1[27]),
190190
// 调用完整路径函数
191191
//
192192
// | reg | position
@@ -200,41 +200,41 @@ pub unsafe extern "C" fn trap_entry() {
200200
// >
201201
// > 若要切换上下文,在完整路径设置 gp/tp/sscratch/sepc 和 sstatus。
202202
"mv a0, sp",
203-
load!(sp; 2 => ra),
203+
load!(sp[2] => ra),
204204
"jalr ra",
205205
"j 0b",
206206
"3:", // 设置所有寄存器
207-
load!(a1;16 => s0),
208-
load!(a1;17 => s1),
209-
load!(a1;18 => s2),
210-
load!(a1;19 => s3),
211-
load!(a1;20 => s4),
212-
load!(a1;21 => s5),
213-
load!(a1;22 => s6),
214-
load!(a1;23 => s7),
215-
load!(a1;24 => s8),
216-
load!(a1;25 => s9),
217-
load!(a1;26 => s10),
218-
load!(a1;27 => s11),
207+
load!(a1[16] => s0),
208+
load!(a1[17] => s1),
209+
load!(a1[18] => s2),
210+
load!(a1[19] => s3),
211+
load!(a1[20] => s4),
212+
load!(a1[21] => s5),
213+
load!(a1[22] => s6),
214+
load!(a1[23] => s7),
215+
load!(a1[24] => s8),
216+
load!(a1[25] => s9),
217+
load!(a1[26] => s10),
218+
load!(a1[27] => s11),
219219
"2:", // 设置所有调用者寄存器
220-
load!(a1; 0 => ra),
221-
load!(a1; 1 => t0),
222-
load!(a1; 2 => t1),
223-
load!(a1; 3 => t2),
224-
load!(a1; 4 => t3),
225-
load!(a1; 5 => t4),
226-
load!(a1; 6 => t5),
227-
load!(a1; 7 => t6),
220+
load!(a1[ 0] => ra),
221+
load!(a1[ 1] => t0),
222+
load!(a1[ 2] => t1),
223+
load!(a1[ 3] => t2),
224+
load!(a1[ 4] => t3),
225+
load!(a1[ 5] => t4),
226+
load!(a1[ 6] => t5),
227+
load!(a1[ 7] => t6),
228228
"1:", // 设置所有参数寄存器
229-
load!(a1;10 => a2),
230-
load!(a1;11 => a3),
231-
load!(a1;12 => a4),
232-
load!(a1;13 => a5),
233-
load!(a1;14 => a6),
234-
load!(a1;15 => a7),
229+
load!(a1[10] => a2),
230+
load!(a1[11] => a3),
231+
load!(a1[12] => a4),
232+
load!(a1[13] => a5),
233+
load!(a1[14] => a6),
234+
load!(a1[15] => a7),
235235
"0:", // 设置少量参数寄存器
236-
load!(a1; 8 => a0),
237-
load!(a1; 9 => a1),
236+
load!(a1[ 8] => a0),
237+
load!(a1[ 9] => a1),
238238
exchange!(),
239239
r#return!(),
240240
options(noreturn),

0 commit comments

Comments
 (0)