Update benchmarks to new privileged ISA
[riscv-tests.git] / benchmarks / common / crt.S
1 #include "encoding.h"
2
3 .data
4 .globl _heapend
5 .globl environ
6 _heapend:
7 .word 0
8 environ:
9 .word 0
10
11 .text
12 .globl _start
13
14 _start:
15 li x1, 0
16 li x2, 0
17 li x3, 0
18 li x4, 0
19 li x5, 0
20 li x6, 0
21 li x7, 0
22 li x8, 0
23 li x9, 0
24 li x10,0
25 li x11,0
26 li x12,0
27 li x13,0
28 li x14,0
29 li x15,0
30 li x16,0
31 li x17,0
32 li x18,0
33 li x19,0
34 li x20,0
35 li x21,0
36 li x22,0
37 li x23,0
38 li x24,0
39 li x25,0
40 li x26,0
41 li x27,0
42 li x28,0
43 li x29,0
44 li x30,0
45 li x31,0
46
47 #ifdef __riscv64
48 li a0, SR_U64 | SR_S64
49 csrs status, a0
50 #endif
51
52 # enable fp and accelerator
53 li a0, SR_EF | SR_EA
54 csrs status, a0
55
56 ## if that didn't stick, we don't have an FPU, so don't initialize it
57 csrr t0, status
58 and t0, t0, SR_EF
59 beqz t0, 1f
60
61 fssr x0
62 fmv.s.x f0, x0
63 fmv.s.x f1, x0
64 fmv.s.x f2, x0
65 fmv.s.x f3, x0
66 fmv.s.x f4, x0
67 fmv.s.x f5, x0
68 fmv.s.x f6, x0
69 fmv.s.x f7, x0
70 fmv.s.x f8, x0
71 fmv.s.x f9, x0
72 fmv.s.x f10,x0
73 fmv.s.x f11,x0
74 fmv.s.x f12,x0
75 fmv.s.x f13,x0
76 fmv.s.x f14,x0
77 fmv.s.x f15,x0
78 fmv.s.x f16,x0
79 fmv.s.x f17,x0
80 fmv.s.x f18,x0
81 fmv.s.x f19,x0
82 fmv.s.x f20,x0
83 fmv.s.x f21,x0
84 fmv.s.x f22,x0
85 fmv.s.x f23,x0
86 fmv.s.x f24,x0
87 fmv.s.x f25,x0
88 fmv.s.x f26,x0
89 fmv.s.x f27,x0
90 fmv.s.x f28,x0
91 fmv.s.x f29,x0
92 fmv.s.x f30,x0
93 fmv.s.x f31,x0
94 1:
95
96 lui a0, %hi(trap_entry)
97 add a0, a0, %lo(trap_entry)
98 csrw evec, a0
99
100 lui a0, %hi(main)
101 add a0, a0, %lo(main)
102 csrw epc, a0
103
104 # only allow core 0 to proceed
105 1:csrr a0, hartid
106 bnez a0, 1b
107
108 la sp,stacktop
109
110 # jmp to main as a user program
111 sret
112 1:b 1b
113
114 .align 4
115 .globl trap_entry
116 trap_entry: # only check for SYS_exit, otherwise crash out
117 li a3, 1337 # magic "bad things" happened error code
118 csrr a1, cause
119 li a2, 6 # syscall exception number
120 bne a1, a2, exit_error
121 handle_syscall:
122 li a1, 93 # SYS_exit number
123 bne v0, a1, exit_error
124 li a1, 1 # successful exit code
125 move a3, a0
126 bne a3, a1, exit_error
127 csrw tohost, a1 # exit successfully (tohost == 1)
128 1:b 1b
129 exit_error:
130 sll a3, a3, 1
131 or a3, a3, 1
132 csrw tohost, a3
133 1:b 1b
134
135 .bss
136 .globl stacktop
137
138 .align 4
139 .skip 131072
140 stacktop: