# define REGBYTES 4
#endif
- .text
+ .section ".text.init"
.globl _start
_start:
- la t0, trap_entry
- csrw mtvec, t0
-
li x1, 0
li x2, 0
li x3, 0
csrs mstatus, t0
# make sure XLEN agrees with compilation choice
- csrr t0, misa
+ li t0, 1
+ slli t0, t0, 31
#if __riscv_xlen == 64
- bltz t0, 1f
-#else
bgez t0, 1f
+#else
+ bltz t0, 1f
#endif
- li a0, 1234
- j tohost_exit
+2:
+ li a0, 1
+ sw a0, tohost, t0
+ j 2b
1:
-#ifdef __riscv_hard_float
+#ifdef __riscv_flen
# initialize FPU if we have one
- andi t0, t0, 1 << ('f' - 'a')
- beqz t0, 1f
+ la t0, 1f
+ csrw mtvec, t0
fssr x0
fmv.s.x f0, x0
fmv.s.x f29,x0
fmv.s.x f30,x0
fmv.s.x f31,x0
+1:
#endif
-1:
+ # initialize trap vector
+ la t0, trap_entry
+ csrw mtvec, t0
# initialize global pointer
- la gp, _gp
+.option push
+.option norelax
+ la gp, __global_pointer$
+.option pop
la tp, _end + 63
and tp, tp, -64