@@ -203,110 +203,6 @@ riscv_rt_macros::loop_global_asm!(" fmv.d.x f{}, x0", 32);
203203#[ cfg( all( riscvf, not( riscvd) ) ) ]
204204riscv_rt_macros:: loop_global_asm!( " fmv.w.x f{}, x0" , 32 ) ;
205205
206- // SET UP INTERRUPTS, RESTORE a0..a2, AND JUMP TO MAIN RUST FUNCTION
207- cfg_global_asm ! (
208- "call _setup_interrupts" ,
209- #[ cfg( riscv32) ]
210- "lw a0, 4 * 0(sp)
211- lw a1, 4 * 1(sp)
212- lw a2, 4 * 2(sp)
213- addi sp, sp, 4 * 3" ,
214- #[ cfg( riscv64) ]
215- "ld a0, 8 * 0(sp)
216- ld a1, 8 * 1(sp)
217- ld a2, 8 * 2(sp)
218- addi sp, sp, 8 * 3" ,
219- "jal zero, main
220- " andi sp, t1, -16 // align stack to 16-bytes
221- add s0, sp, zero",
222- );
223-
224- // STORE A0..A2 IN THE STACK, AS THEY WILL BE NEEDED LATER BY main
225- cfg_global_asm!(
226- #[cfg(riscv32)]
227- " addi sp, sp, -4 * 3
228- sw a0, 4 * 0 ( sp)
229- sw a1, 4 * 1 ( sp)
230- sw a2, 4 * 2 ( sp) ",
231- #[cfg(riscv64)]
232- " addi sp, sp, -8 * 3
233- sd a0, 8 * 0 ( sp)
234- sd a1, 8 * 1 ( sp)
235- sd a2, 8 * 2 ( sp) ",
236- );
237-
238- // SKIP RAM INITIALIZATION IF CURRENT HART IS NOT THE BOOT HART
239- #[cfg(not(feature = " single-hart"))]
240- cfg_global_asm!(
241- #[cfg(not(feature = " s-mode"))]
242- " csrr a0, mhartid",
243- " call _mp_hook
244- mv t0, a0
245-
246- beqz a0, 4 f",
247- );
248- // IF CURRENT HART IS THE BOOT HART CALL __pre_init AND INITIALIZE RAM
249- cfg_global_asm!(
250- " call __pre_init
251- // Copy .data from flash to RAM
252- la t0, _sdata
253- la t2, _edata
254- la t1, _sidata
255- bgeu t0, t2, 2 f
256- 1 : ",
257- #[cfg(target_arch = " riscv32")]
258- " lw t3, 0 ( t1)
259- addi t1, t1, 4
260- sw t3, 0 ( t0)
261- addi t0, t0, 4
262- bltu t0, t2, 1 b",
263- #[cfg(target_arch = " riscv64")]
264- " ld t3, 0 ( t1)
265- addi t1, t1, 8
266- sd t3, 0 ( t0)
267- addi t0, t0, 8
268- bltu t0, t2, 1 b",
269- "
270- 2 : // Zero out .bss
271- la t0, _sbss
272- la t2, _ebss
273- bgeu t0, t2, 4 f
274- 3 : ",
275- #[cfg(target_arch = " riscv32")]
276- " sw zero, 0 ( t0)
277- addi t0, t0, 4
278- bltu t0, t2, 3 b",
279- #[cfg(target_arch = " riscv64")]
280- " sd zero, 0 ( t0)
281- addi t0, t0, 8
282- bltu t0, t2, 3 b",
283- "
284- 4 : // RAM initilized",
285- ) ;
286-
287- // INITIALIZE FLOATING POINT UNIT
288- #[ cfg( any( riscvf, riscvd) ) ]
289- cfg_global_asm ! (
290- "
291- li t0, 0x4000 // bit 14 is FS most significant bit
292- li t2, 0x2000 // bit 13 is FS least significant bit
293- " ,
294- #[ cfg( feature = "s-mode" ) ]
295- "csrrc x0, sstatus, t0
296- csrrs x0, sstatus, t2" ,
297- #[ cfg( not( feature = "s-mode" ) ) ]
298- "csrrc x0, mstatus, t0
299- csrrs x0, mstatus, t2" ,
300- "fscsr x0" ,
301- ) ;
302- // ZERO OUT FLOATING POINT REGISTERS
303- #[ cfg( all( riscv32, riscvd) ) ]
304- riscv_rt_macros:: loop_global_asm!( " fcvt.d.w f{}, x0" , 32 ) ;
305- #[ cfg( all( riscv64, riscvd) ) ]
306- riscv_rt_macros:: loop_global_asm!( " fmv.d.x f{}, x0" , 32 ) ;
307- #[ cfg( all( riscvf, not( riscvd) ) ) ]
308- riscv_rt_macros:: loop_global_asm!( " fmv.w.x f{}, x0" , 32 ) ;
309-
310206// SET UP INTERRUPTS, RESTORE a0..a2, AND JUMP TO MAIN RUST FUNCTION
311207cfg_global_asm ! (
312208 "call _setup_interrupts" ,
0 commit comments