revamp hwacha tests
[riscv-tests.git] / env / pt / riscv_test.h
1 #ifndef _ENV_PHYSICAL_SINGLE_CORE_TIMER_H
2 #define _ENV_PHYSICAL_SINGLE_CORE_TIMER_H
3
4 #include "../p/riscv_test.h"
5
6 #undef EXTRA_INIT
7 #define EXTRA_INIT \
8 ENABLE_TIMER_INTERRUPT; \
9 b 6f; \
10 XCPT_HANDLER; \
11 6:
12
13 //-----------------------------------------------------------------------
14 // Data Section Macro
15 //-----------------------------------------------------------------------
16
17 #undef EXTRA_DATA
18 #define EXTRA_DATA \
19 .align 3; \
20 regspill: \
21 .dword 0xdeadbeefcafebabe; \
22 .dword 0xdeadbeefcafebabe; \
23 .dword 0xdeadbeefcafebabe; \
24 .dword 0xdeadbeefcafebabe; \
25 .dword 0xdeadbeefcafebabe; \
26 .dword 0xdeadbeefcafebabe; \
27 .dword 0xdeadbeefcafebabe; \
28 .dword 0xdeadbeefcafebabe; \
29 .dword 0xdeadbeefcafebabe; \
30 .dword 0xdeadbeefcafebabe; \
31 .dword 0xdeadbeefcafebabe; \
32 .dword 0xdeadbeefcafebabe; \
33 .dword 0xdeadbeefcafebabe; \
34 .dword 0xdeadbeefcafebabe; \
35 .dword 0xdeadbeefcafebabe; \
36 .dword 0xdeadbeefcafebabe; \
37 .dword 0xdeadbeefcafebabe; \
38 .dword 0xdeadbeefcafebabe; \
39 .dword 0xdeadbeefcafebabe; \
40 .dword 0xdeadbeefcafebabe; \
41 .dword 0xdeadbeefcafebabe; \
42 .dword 0xdeadbeefcafebabe; \
43 .dword 0xdeadbeefcafebabe; \
44 .dword 0xdeadbeefcafebabe; \
45 evac: \
46 .dword 0xdeadbeefcafebabe; \
47 .dword 0xdeadbeefcafebabe; \
48 .dword 0xdeadbeefcafebabe; \
49 .dword 0xdeadbeefcafebabe; \
50 .dword 0xdeadbeefcafebabe; \
51 .dword 0xdeadbeefcafebabe; \
52 .dword 0xdeadbeefcafebabe; \
53 .dword 0xdeadbeefcafebabe; \
54 .dword 0xdeadbeefcafebabe; \
55 .dword 0xdeadbeefcafebabe; \
56 .dword 0xdeadbeefcafebabe; \
57 .dword 0xdeadbeefcafebabe; \
58 .dword 0xdeadbeefcafebabe; \
59 .dword 0xdeadbeefcafebabe; \
60 .dword 0xdeadbeefcafebabe; \
61 .dword 0xdeadbeefcafebabe; \
62 .dword 0xdeadbeefcafebabe; \
63 .dword 0xdeadbeefcafebabe; \
64 .dword 0xdeadbeefcafebabe; \
65 .dword 0xdeadbeefcafebabe; \
66 .dword 0xdeadbeefcafebabe; \
67 .dword 0xdeadbeefcafebabe; \
68 .dword 0xdeadbeefcafebabe; \
69 .dword 0xdeadbeefcafebabe; \
70 .dword 0xdeadbeefcafebabe; \
71 .dword 0xdeadbeefcafebabe; \
72 .dword 0xdeadbeefcafebabe; \
73 .dword 0xdeadbeefcafebabe; \
74 .dword 0xdeadbeefcafebabe; \
75 .dword 0xdeadbeefcafebabe; \
76 .dword 0xdeadbeefcafebabe; \
77 .dword 0xdeadbeefcafebabe; \
78
79 //-----------------------------------------------------------------------
80 // Misc
81 //-----------------------------------------------------------------------
82
83 #define ENABLE_TIMER_INTERRUPT \
84 mtpcr x0,clear_ipi; \
85 mfpcr a0,status; \
86 li a1,SR_IM; \
87 mtpcr a0,status; \
88 la a0,_handler; \
89 mtpcr a0,evec; \
90 mtpcr x0,count; \
91 addi a0,x0,60; \
92 mtpcr a0,compare; \
93
94 #define XCPT_HANDLER \
95 _handler: \
96 mtpcr a0,sup0; \
97 mtpcr a1,sup1; \
98 la a0,regspill; \
99 sd a2,0(a0); \
100 sd a3,8(a0); \
101 sd a4,16(a0); \
102 sd a5,24(a0); \
103 sd s0,32(a0); \
104 sd s1,40(a0); \
105 vgetcfg s0; \
106 vgetvl s1; \
107 la a0,evac; \
108 vxcptevac a0; \
109 vsetcfg s0; \
110 vsetvl s1,s1; \
111 vxcpthold; \
112 li a5,0; \
113 _handler_loop: \
114 ld a1,0(a0); \
115 addi a0,a0,8; \
116 blt a1,x0,_done; \
117 srli a2,a1,32; \
118 andi a2,a2,0x1; \
119 beq a2,x0,_vcnt; \
120 _vcmd: \
121 beq a5,x0,_vcmd_skip; \
122 venqcmd a4,a3; \
123 _vcmd_skip: \
124 li a5,1; \
125 move a4,a1; \
126 srli a3,a4,36; \
127 andi a3,a3,0x1; \
128 _vimm1: \
129 srli a2,a4,35; \
130 andi a2,a2,0x1; \
131 beq a2,x0,_vimm2; \
132 ld a1,0(a0); \
133 addi a0,a0,8; \
134 venqimm1 a1,a3; \
135 _vimm2: \
136 srli a2,a4,34; \
137 andi a2,a2,0x1; \
138 beq a2,x0,_end; \
139 ld a1,0(a0); \
140 addi a0,a0,8; \
141 venqimm2 a1,a3; \
142 j _end; \
143 _vcnt: \
144 ld a2,0(a0); \
145 srli a2,a2,31; \
146 andi a2,a2,0x2; \
147 or a3,a3,a2; \
148 venqcnt a1,a3; \
149 _end: \
150 j _handler_loop; \
151 _done: \
152 beq a5,x0,_done_skip; \
153 venqcmd a4,a3; \
154 _done_skip: \
155 la a0,regspill; \
156 ld a2,0(a0); \
157 ld a3,8(a0); \
158 ld a4,16(a0); \
159 ld a5,24(a0); \
160 ld s0,32(a0); \
161 ld s1,40(a0); \
162 mfpcr a0,count; \
163 addi a0,a0,60; \
164 mtpcr a0,compare; \
165 mfpcr a0,sup0; \
166 mfpcr a1,sup1; \
167 eret; \
168
169 #endif