File tree Expand file tree Collapse file tree 1 file changed +57
-57
lines changed Expand file tree Collapse file tree 1 file changed +57
-57
lines changed Original file line number Diff line number Diff line change @@ -5,7 +5,7 @@ use core::alloc::Layout;
5
5
#[ macro_use]
6
6
mod arch {
7
7
macro_rules! save {
8
- ( $reg: ident => $ptr: ident; $pos: expr) => {
8
+ ( $reg: ident => $ptr: ident[ $pos: expr] ) => {
9
9
concat!(
10
10
"sw " ,
11
11
stringify!( $reg) ,
@@ -19,7 +19,7 @@ mod arch {
19
19
}
20
20
21
21
macro_rules! load {
22
- ( $ptr: ident; $pos: expr => $reg: ident) => {
22
+ ( $ptr: ident[ $pos: expr] => $reg: ident) => {
23
23
concat!(
24
24
"lw " ,
25
25
stringify!( $reg) ,
@@ -36,7 +36,7 @@ mod arch {
36
36
#[ macro_use]
37
37
mod arch {
38
38
macro_rules! save {
39
- ( $reg: ident => $ptr: ident; $pos: expr) => {
39
+ ( $reg: ident => $ptr: ident[ $pos: expr] ) => {
40
40
concat!(
41
41
"sd " ,
42
42
stringify!( $reg) ,
@@ -50,7 +50,7 @@ mod arch {
50
50
}
51
51
52
52
macro_rules! load {
53
- ( $ptr: ident; $pos: expr => $reg: ident) => {
53
+ ( $ptr: ident[ $pos: expr] => $reg: ident) => {
54
54
concat!(
55
55
"ld " ,
56
56
stringify!( $reg) ,
@@ -127,17 +127,17 @@ pub unsafe extern "C" fn trap_entry() {
127
127
// 换栈
128
128
exchange!( ) ,
129
129
// 加载上下文指针
130
- save!( a0 => sp; 2 ) ,
131
- load!( sp; 0 => a0) ,
130
+ save!( a0 => sp[ 2 ] ) ,
131
+ load!( sp[ 0 ] => a0) ,
132
132
// 保存尽量少的寄存器
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 ] ) ,
141
141
// 调用快速路径函数
142
142
//
143
143
// | reg | position
@@ -156,10 +156,10 @@ pub unsafe extern "C" fn trap_entry() {
156
156
// >
157
157
// > 若要切换上下文,在快速路径设置 gp/tp/sscratch/sepc 和 sstatus。
158
158
"mv a0, sp" ,
159
- load!( sp; 1 => ra) ,
159
+ load!( sp[ 1 ] => ra) ,
160
160
"jalr ra" ,
161
161
"0:" , // 加载上下文指针
162
- load!( sp; 0 => a1) ,
162
+ load!( sp[ 0 ] => a1) ,
163
163
// 0:设置少量参数寄存器
164
164
" beqz a0, 0f" ,
165
165
// 1:设置所有参数寄存器
@@ -175,18 +175,18 @@ pub unsafe extern "C" fn trap_entry() {
175
175
beqz a0, 3f
176
176
" ,
177
177
// 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 ] ) ,
190
190
// 调用完整路径函数
191
191
//
192
192
// | reg | position
@@ -200,41 +200,41 @@ pub unsafe extern "C" fn trap_entry() {
200
200
// >
201
201
// > 若要切换上下文,在完整路径设置 gp/tp/sscratch/sepc 和 sstatus。
202
202
"mv a0, sp" ,
203
- load!( sp; 2 => ra) ,
203
+ load!( sp[ 2 ] => ra) ,
204
204
"jalr ra" ,
205
205
"j 0b" ,
206
206
"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) ,
219
219
"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) ,
228
228
"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) ,
235
235
"0:" , // 设置少量参数寄存器
236
- load!( a1; 8 => a0) ,
237
- load!( a1; 9 => a1) ,
236
+ load!( a1[ 8 ] => a0) ,
237
+ load!( a1[ 9 ] => a1) ,
238
238
exchange!( ) ,
239
239
r#return!( ) ,
240
240
options( noreturn) ,
You can’t perform that action at this time.
0 commit comments