diff --git a/am/src/nemu/isa/riscv/boot/start.S b/am/src/nemu/isa/riscv/boot/start.S index 7749cb2c8e4a85a20eced125cd2c22d923832a17..d3ae78dda40e70ab8487ed6879056220c82f85ec 100644 --- a/am/src/nemu/isa/riscv/boot/start.S +++ b/am/src/nemu/isa/riscv/boot/start.S @@ -4,7 +4,35 @@ #define MSTATUS_FS 0x00006000 +.macro set_reg_zero reg_idx + mv x\reg_idx, zero +.endm + +.macro set_freg_zero freg_idx + fmv.w.x f\freg_idx, zero +.endm + +.macro init_regs + .altmacro + .set i, 1 + .rept 31 + set_reg_zero %i + .set i, i+1 + .endr +.endm + +.macro init_fregs + .set i, 0 + .rept 32 + set_freg_zero %i + .set i, i+1 + .endr +.endm + _start: + init_regs + init_fregs + mv s0, zero la sp, _stack_pointer li a0, MSTATUS_FS & (MSTATUS_FS >> 1)