Reflect changes to ISA
[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,ASM_CR(PCR_CLR_IPI);\
85 mfpcr a0,ASM_CR(PCR_SR); \
86 li a1, SR_ET|SR_IM; \
87 or a0,a0,a1; \
88 mtpcr a0,ASM_CR(PCR_SR); \
89 la a0,_handler; \
90 mtpcr a0,ASM_CR(PCR_EVEC); \
91 mtpcr x0,ASM_CR(PCR_COUNT); \
92 addi a0,x0,60; \
93 mtpcr a0,ASM_CR(PCR_COMPARE);\
94
95 #define XCPT_HANDLER \
96 _handler: \
97 mtpcr a0,ASM_CR(PCR_K0); \
98 mtpcr a1,ASM_CR(PCR_K1); \
99 la a0,regspill; \
100 sd a2,0(a0); \
101 sd a3,8(a0); \
102 sd a4,16(a0); \
103 sd a5,24(a0); \
104 sd s0,32(a0); \
105 sd s1,40(a0); \
106 mfpcr s1,ASM_CR(PCR_VECBANK);\
107 mfpcr s0,ASM_CR(PCR_VECCFG); \
108 la a0,evac; \
109 vxcptevac a0; \
110 mtpcr s1,ASM_CR(PCR_VECBANK);\
111 srli a1,s0,12; \
112 andi a1,a1,0x3f; \
113 srli a2,s0,18; \
114 andi a2,a2,0x3f; \
115 vvcfg a1,a2; \
116 li a2,0xfff; \
117 and a1,s0,a2; \
118 vsetvl a1,a1; \
119 vxcpthold; \
120 li a5,0; \
121 _handler_loop: \
122 ld a1,0(a0); \
123 addi a0,a0,8; \
124 blt a1,x0,_done; \
125 srli a2,a1,32; \
126 andi a2,a2,0x1; \
127 beq a2,x0,_vcnt; \
128 _vcmd: \
129 beq a5,x0,_vcmd_skip; \
130 venqcmd a4,a3; \
131 _vcmd_skip: \
132 li a5,1; \
133 move a4,a1; \
134 srli a3,a4,36; \
135 andi a3,a3,0x1; \
136 _vimm1: \
137 srli a2,a4,35; \
138 andi a2,a2,0x1; \
139 beq a2,x0,_vimm2; \
140 ld a1,0(a0); \
141 addi a0,a0,8; \
142 venqimm1 a1,a3; \
143 _vimm2: \
144 srli a2,a4,34; \
145 andi a2,a2,0x1; \
146 beq a2,x0,_end; \
147 ld a1,0(a0); \
148 addi a0,a0,8; \
149 venqimm2 a1,a3; \
150 j _end; \
151 _vcnt: \
152 ld a2,0(a0); \
153 srli a2,a2,31; \
154 andi a2,a2,0x2; \
155 or a3,a3,a2; \
156 venqcnt a1,a3; \
157 _end: \
158 j _handler_loop; \
159 _done: \
160 beq a5,x0,_done_skip; \
161 venqcmd a4,a3; \
162 _done_skip: \
163 la a0,regspill; \
164 ld a2,0(a0); \
165 ld a3,8(a0); \
166 ld a4,16(a0); \
167 ld a5,24(a0); \
168 ld s0,32(a0); \
169 ld s1,40(a0); \
170 mfpcr a0,ASM_CR(PCR_COUNT); \
171 addi a0,a0,60; \
172 mtpcr a0,ASM_CR(PCR_COMPARE);\
173 mfpcr a0,ASM_CR(PCR_K0); \
174 mfpcr a1,ASM_CR(PCR_K1); \
175 eret; \
176
177 #endif