xref: /plan9-contrib/sys/lib/acid/riscv64 (revision ce95e1b3727b9cb1c223ffbed69aff21a8ced255)
1*ce95e1b3SDavid du Colombier// riscv64 support
2*ce95e1b3SDavid du Colombier
3*ce95e1b3SDavid du Colombierdefn acidinit()			// Called after all the init modules are loaded
4*ce95e1b3SDavid du Colombier{
5*ce95e1b3SDavid du Colombier	bplist = {};
6*ce95e1b3SDavid du Colombier	bpfmt = 'Y';
7*ce95e1b3SDavid du Colombier
8*ce95e1b3SDavid du Colombier	srcpath = {
9*ce95e1b3SDavid du Colombier		"./",
10*ce95e1b3SDavid du Colombier		"/sys/src/libc/port/",
11*ce95e1b3SDavid du Colombier		"/sys/src/libc/9sys/",
12*ce95e1b3SDavid du Colombier		"/sys/src/libc/riscv64/"
13*ce95e1b3SDavid du Colombier	};
14*ce95e1b3SDavid du Colombier
15*ce95e1b3SDavid du Colombier	srcfiles = {};		// list of loaded files
16*ce95e1b3SDavid du Colombier	srctext = {};		// the text of the files
17*ce95e1b3SDavid du Colombier}
18*ce95e1b3SDavid du Colombier
19*ce95e1b3SDavid du Colombierdefn stk()			// trace
20*ce95e1b3SDavid du Colombier{
21*ce95e1b3SDavid du Colombier	_stk(*PC, *SP, linkreg(0), 0);
22*ce95e1b3SDavid du Colombier}
23*ce95e1b3SDavid du Colombier
24*ce95e1b3SDavid du Colombierdefn lstk()			// trace with locals
25*ce95e1b3SDavid du Colombier{
26*ce95e1b3SDavid du Colombier	_stk(*PC, *SP, linkreg(0), 1);
27*ce95e1b3SDavid du Colombier}
28*ce95e1b3SDavid du Colombier
29*ce95e1b3SDavid du Colombierdefn gpr()			// print general purpose registers
30*ce95e1b3SDavid du Colombier{
31*ce95e1b3SDavid du Colombier	print("R1\t", *R1, " R2\t", *R2, " R3\t", *R3, "\n");
32*ce95e1b3SDavid du Colombier	print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, "\n");
33*ce95e1b3SDavid du Colombier	print("R7\t", *R7, " R8\t", *R8, " R9\t", *R9, "\n");
34*ce95e1b3SDavid du Colombier	print("R10\t", *R10, " R11\t", *R11, " R12\t", *R12, "\n");
35*ce95e1b3SDavid du Colombier	print("R13\t", *R13, " R14\t", *R14, " R15\t", *R15, "\n");
36*ce95e1b3SDavid du Colombier	print("R16\t", *R16, " R17\t", *R17, " R18\t", *R18, "\n");
37*ce95e1b3SDavid du Colombier	print("R19\t", *R19, " R20\t", *R20, " R21\t", *R21, "\n");
38*ce95e1b3SDavid du Colombier	print("R22\t", *R22, " R23\t", *R23, " R24\t", *R24, "\n");
39*ce95e1b3SDavid du Colombier	print("R25\t", *R25, " R26\t", *R26, " R27\t", *R27, "\n");
40*ce95e1b3SDavid du Colombier	print("R28\t", *R28, " R29\t", *SP, " R30\t", *R30, "\n");
41*ce95e1b3SDavid du Colombier	print("R31\t", *R31, "\n");
42*ce95e1b3SDavid du Colombier}
43*ce95e1b3SDavid du Colombier
44*ce95e1b3SDavid du Colombierdefn Fpr()
45*ce95e1b3SDavid du Colombier{
46*ce95e1b3SDavid du Colombier	print("F0\t",  *fmt(F0, 'G'),  "\tF1\t",  *fmt(F1, 'G'), "\n");
47*ce95e1b3SDavid du Colombier	print("F2\t",  *fmt(F2, 'G'),  "\tF3\t",  *fmt(F3, 'G'), "\n");
48*ce95e1b3SDavid du Colombier	print("F4\t",  *fmt(F4, 'G'),  "\tF5\t",  *fmt(F5, 'G'), "\n");
49*ce95e1b3SDavid du Colombier	print("F6\t",  *fmt(F6, 'G'),  "\tF7\t",  *fmt(F7, 'G'), "\n");
50*ce95e1b3SDavid du Colombier	print("F8\t",  *fmt(F8, 'G'),  "\tF9\t",  *fmt(F9, 'G'), "\n");
51*ce95e1b3SDavid du Colombier	print("F10\t", *fmt(F10, 'G'), "\tF11\t", *fmt(F11, 'G'), "\n");
52*ce95e1b3SDavid du Colombier	print("F12\t", *fmt(F12, 'G'), "\tF13\t", *fmt(F13, 'G'), "\n");
53*ce95e1b3SDavid du Colombier	print("F14\t", *fmt(F14, 'G'), "\tF15\t", *fmt(F15, 'G'), "\n");
54*ce95e1b3SDavid du Colombier	print("F16\t", *fmt(F16, 'G'), "\tF17\t", *fmt(F17, 'G'), "\n");
55*ce95e1b3SDavid du Colombier	print("F18\t", *fmt(F18, 'G'), "\tF19\t", *fmt(F19, 'G'), "\n");
56*ce95e1b3SDavid du Colombier	print("F20\t", *fmt(F20, 'G'), "\tF21\t", *fmt(F21, 'G'), "\n");
57*ce95e1b3SDavid du Colombier	print("F22\t", *fmt(F22, 'G'), "\tF23\t", *fmt(F23, 'G'), "\n");
58*ce95e1b3SDavid du Colombier	print("F24\t", *fmt(F24, 'G'), "\tF25\t", *fmt(F25, 'G'), "\n");
59*ce95e1b3SDavid du Colombier	print("F26\t", *fmt(F26, 'G'), "\tF27\t", *fmt(F27, 'G'), "\n");
60*ce95e1b3SDavid du Colombier	print("F28\t", *fmt(F28, 'G'), "\tF29\t", *fmt(F29, 'G'), "\n");
61*ce95e1b3SDavid du Colombier	print("F30\t", *fmt(F30, 'G'), "\tF31\t", *fmt(F31, 'G'), "\n");
62*ce95e1b3SDavid du Colombier}
63*ce95e1b3SDavid du Colombier
64*ce95e1b3SDavid du Colombierdefn fpr()
65*ce95e1b3SDavid du Colombier{
66*ce95e1b3SDavid du Colombier	print("F0\t",  *fmt(F0, 'g'),  "\tF1\t",  *fmt(F1, 'g'), "\n");
67*ce95e1b3SDavid du Colombier	print("F2\t",  *fmt(F2, 'g'),  "\tF3\t",  *fmt(F3, 'g'), "\n");
68*ce95e1b3SDavid du Colombier	print("F4\t",  *fmt(F4, 'g'),  "\tF5\t",  *fmt(F5, 'g'), "\n");
69*ce95e1b3SDavid du Colombier	print("F6\t",  *fmt(F6, 'g'),  "\tF7\t",  *fmt(F7, 'g'), "\n");
70*ce95e1b3SDavid du Colombier	print("F8\t",  *fmt(F8, 'g'),  "\tF9\t",  *fmt(F9, 'g'), "\n");
71*ce95e1b3SDavid du Colombier	print("F10\t", *fmt(F10, 'g'), "\tF11\t", *fmt(F11, 'g'), "\n");
72*ce95e1b3SDavid du Colombier	print("F12\t", *fmt(F12, 'g'), "\tF13\t", *fmt(F13, 'g'), "\n");
73*ce95e1b3SDavid du Colombier	print("F14\t", *fmt(F14, 'g'), "\tF15\t", *fmt(F15, 'g'), "\n");
74*ce95e1b3SDavid du Colombier	print("F16\t", *fmt(F16, 'g'), "\tF17\t", *fmt(F17, 'g'), "\n");
75*ce95e1b3SDavid du Colombier	print("F18\t", *fmt(F18, 'g'), "\tF19\t", *fmt(F19, 'g'), "\n");
76*ce95e1b3SDavid du Colombier	print("F20\t", *fmt(F20, 'g'), "\tF21\t", *fmt(F21, 'g'), "\n");
77*ce95e1b3SDavid du Colombier	print("F22\t", *fmt(F22, 'g'), "\tF23\t", *fmt(F23, 'g'), "\n");
78*ce95e1b3SDavid du Colombier	print("F24\t", *fmt(F24, 'g'), "\tF25\t", *fmt(F25, 'g'), "\n");
79*ce95e1b3SDavid du Colombier	print("F26\t", *fmt(F26, 'g'), "\tF27\t", *fmt(F27, 'g'), "\n");
80*ce95e1b3SDavid du Colombier	print("F28\t", *fmt(F28, 'g'), "\tF29\t", *fmt(F29, 'g'), "\n");
81*ce95e1b3SDavid du Colombier	print("F30\t", *fmt(F30, 'g'), "\tF31\t", *fmt(F31, 'g'), "\n");
82*ce95e1b3SDavid du Colombier}
83*ce95e1b3SDavid du Colombier
84*ce95e1b3SDavid du Colombierdefn spr()				// print special processor registers
85*ce95e1b3SDavid du Colombier{
86*ce95e1b3SDavid du Colombier	local pc, link, cause;
87*ce95e1b3SDavid du Colombier
88*ce95e1b3SDavid du Colombier	pc = *PC;
89*ce95e1b3SDavid du Colombier	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
90*ce95e1b3SDavid du Colombier	pfl(pc);
91*ce95e1b3SDavid du Colombier
92*ce95e1b3SDavid du Colombier	link = *R1;
93*ce95e1b3SDavid du Colombier	print("SP\t", *SP, "\tLINK\t", link, " ", fmt(link, 'a'), " ");
94*ce95e1b3SDavid du Colombier	pfl(link);
95*ce95e1b3SDavid du Colombier
96*ce95e1b3SDavid du Colombier	cause = *CAUSE;
97*ce95e1b3SDavid du Colombier	print("STATUS\t", *STATUS, "\tCAUSE\t", cause, " ", reason(cause), "\n");
98*ce95e1b3SDavid du Colombier}
99*ce95e1b3SDavid du Colombier
100*ce95e1b3SDavid du Colombierdefn regs()				// print all registers
101*ce95e1b3SDavid du Colombier{
102*ce95e1b3SDavid du Colombier	spr();
103*ce95e1b3SDavid du Colombier	gpr();
104*ce95e1b3SDavid du Colombier	Fpr();
105*ce95e1b3SDavid du Colombier}
106*ce95e1b3SDavid du Colombier
107*ce95e1b3SDavid du Colombierdefn pstop(pid)
108*ce95e1b3SDavid du Colombier{
109*ce95e1b3SDavid du Colombier	local l, pc;
110*ce95e1b3SDavid du Colombier
111*ce95e1b3SDavid du Colombier	pc = *PC;
112*ce95e1b3SDavid du Colombier
113*ce95e1b3SDavid du Colombier	print(pid,": ", reason(*CAUSE), "\t");
114*ce95e1b3SDavid du Colombier	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
115*ce95e1b3SDavid du Colombier
116*ce95e1b3SDavid du Colombier	if notes then {
117*ce95e1b3SDavid du Colombier		if notes[0] != "sys: breakpoint" then {
118*ce95e1b3SDavid du Colombier			print("Notes pending:\n");
119*ce95e1b3SDavid du Colombier			l = notes;
120*ce95e1b3SDavid du Colombier			while l do {
121*ce95e1b3SDavid du Colombier				print("\t", head l, "\n");
122*ce95e1b3SDavid du Colombier				l = tail l;
123*ce95e1b3SDavid du Colombier			}
124*ce95e1b3SDavid du Colombier		}
125*ce95e1b3SDavid du Colombier	}
126*ce95e1b3SDavid du Colombier}
127*ce95e1b3SDavid du Colombier
128*ce95e1b3SDavid du ColombiersizeofUreg = 296;
129*ce95e1b3SDavid du Colombieraggr Ureg
130*ce95e1b3SDavid du Colombier{
131*ce95e1b3SDavid du Colombier	{
132*ce95e1b3SDavid du Colombier	'W' 0 pc;
133*ce95e1b3SDavid du Colombier	'a' 0 regs;
134*ce95e1b3SDavid du Colombier	};
135*ce95e1b3SDavid du Colombier	'W' 8 r1;
136*ce95e1b3SDavid du Colombier	{
137*ce95e1b3SDavid du Colombier	'W' 16 r2;
138*ce95e1b3SDavid du Colombier	'W' 16 sp;
139*ce95e1b3SDavid du Colombier	'W' 16 usp;
140*ce95e1b3SDavid du Colombier	};
141*ce95e1b3SDavid du Colombier	'W' 24 r3;
142*ce95e1b3SDavid du Colombier	'W' 32 r4;
143*ce95e1b3SDavid du Colombier	'W' 40 r5;
144*ce95e1b3SDavid du Colombier	'W' 48 r6;
145*ce95e1b3SDavid du Colombier	'W' 56 r7;
146*ce95e1b3SDavid du Colombier	{
147*ce95e1b3SDavid du Colombier	'W' 64 r8;
148*ce95e1b3SDavid du Colombier	'W' 64 arg;
149*ce95e1b3SDavid du Colombier	'W' 64 ret;
150*ce95e1b3SDavid du Colombier	};
151*ce95e1b3SDavid du Colombier	'W' 72 r9;
152*ce95e1b3SDavid du Colombier	'W' 80 r10;
153*ce95e1b3SDavid du Colombier	'W' 88 r11;
154*ce95e1b3SDavid du Colombier	'W' 96 r12;
155*ce95e1b3SDavid du Colombier	'W' 104 r13;
156*ce95e1b3SDavid du Colombier	'W' 112 r14;
157*ce95e1b3SDavid du Colombier	'W' 120 r15;
158*ce95e1b3SDavid du Colombier	'W' 128 r16;
159*ce95e1b3SDavid du Colombier	'W' 136 r17;
160*ce95e1b3SDavid du Colombier	'W' 144 r18;
161*ce95e1b3SDavid du Colombier	'W' 152 r19;
162*ce95e1b3SDavid du Colombier	'W' 160 r20;
163*ce95e1b3SDavid du Colombier	'W' 168 r21;
164*ce95e1b3SDavid du Colombier	'W' 176 r22;
165*ce95e1b3SDavid du Colombier	'W' 184 r23;
166*ce95e1b3SDavid du Colombier	'W' 192 r24;
167*ce95e1b3SDavid du Colombier	'W' 200 r25;
168*ce95e1b3SDavid du Colombier	'W' 208 r26;
169*ce95e1b3SDavid du Colombier	'W' 216 r27;
170*ce95e1b3SDavid du Colombier	'W' 224 r28;
171*ce95e1b3SDavid du Colombier	'W' 232 r29;
172*ce95e1b3SDavid du Colombier	'W' 240 r30;
173*ce95e1b3SDavid du Colombier	'W' 248 r31;
174*ce95e1b3SDavid du Colombier	'W' 256 status;
175*ce95e1b3SDavid du Colombier	'W' 264 ie;
176*ce95e1b3SDavid du Colombier	{
177*ce95e1b3SDavid du Colombier	'W' 272 cause;
178*ce95e1b3SDavid du Colombier	'W' 272 type;
179*ce95e1b3SDavid du Colombier	};
180*ce95e1b3SDavid du Colombier	'W' 280 tval;
181*ce95e1b3SDavid du Colombier	'W' 288 curmode;
182*ce95e1b3SDavid du Colombier};
183*ce95e1b3SDavid du Colombier
184*ce95e1b3SDavid du Colombierdefn
185*ce95e1b3SDavid du ColombierUreg(addr) {
186*ce95e1b3SDavid du Colombier	complex Ureg addr;
187*ce95e1b3SDavid du Colombier	print("_32_ {\n");
188*ce95e1b3SDavid du Colombier		_32_(addr+0);
189*ce95e1b3SDavid du Colombier	print("}\n");
190*ce95e1b3SDavid du Colombier	print("	r1	", addr.r1, "\n");
191*ce95e1b3SDavid du Colombier	print("_33_ {\n");
192*ce95e1b3SDavid du Colombier		_33_(addr+16);
193*ce95e1b3SDavid du Colombier	print("}\n");
194*ce95e1b3SDavid du Colombier	print("	r3	", addr.r3, "\n");
195*ce95e1b3SDavid du Colombier	print("	r4	", addr.r4, "\n");
196*ce95e1b3SDavid du Colombier	print("	r5	", addr.r5, "\n");
197*ce95e1b3SDavid du Colombier	print("	r6	", addr.r6, "\n");
198*ce95e1b3SDavid du Colombier	print("	r7	", addr.r7, "\n");
199*ce95e1b3SDavid du Colombier	print("_34_ {\n");
200*ce95e1b3SDavid du Colombier		_34_(addr+64);
201*ce95e1b3SDavid du Colombier	print("}\n");
202*ce95e1b3SDavid du Colombier	print("	r9	", addr.r9, "\n");
203*ce95e1b3SDavid du Colombier	print("	r10	", addr.r10, "\n");
204*ce95e1b3SDavid du Colombier	print("	r11	", addr.r11, "\n");
205*ce95e1b3SDavid du Colombier	print("	r12	", addr.r12, "\n");
206*ce95e1b3SDavid du Colombier	print("	r13	", addr.r13, "\n");
207*ce95e1b3SDavid du Colombier	print("	r14	", addr.r14, "\n");
208*ce95e1b3SDavid du Colombier	print("	r15	", addr.r15, "\n");
209*ce95e1b3SDavid du Colombier	print("	r16	", addr.r16, "\n");
210*ce95e1b3SDavid du Colombier	print("	r17	", addr.r17, "\n");
211*ce95e1b3SDavid du Colombier	print("	r18	", addr.r18, "\n");
212*ce95e1b3SDavid du Colombier	print("	r19	", addr.r19, "\n");
213*ce95e1b3SDavid du Colombier	print("	r20	", addr.r20, "\n");
214*ce95e1b3SDavid du Colombier	print("	r21	", addr.r21, "\n");
215*ce95e1b3SDavid du Colombier	print("	r22	", addr.r22, "\n");
216*ce95e1b3SDavid du Colombier	print("	r23	", addr.r23, "\n");
217*ce95e1b3SDavid du Colombier	print("	r24	", addr.r24, "\n");
218*ce95e1b3SDavid du Colombier	print("	r25	", addr.r25, "\n");
219*ce95e1b3SDavid du Colombier	print("	r26	", addr.r26, "\n");
220*ce95e1b3SDavid du Colombier	print("	r27	", addr.r27, "\n");
221*ce95e1b3SDavid du Colombier	print("	r28	", addr.r28, "\n");
222*ce95e1b3SDavid du Colombier	print("	r29	", addr.r29, "\n");
223*ce95e1b3SDavid du Colombier	print("	r30	", addr.r30, "\n");
224*ce95e1b3SDavid du Colombier	print("	r31	", addr.r31, "\n");
225*ce95e1b3SDavid du Colombier	print("	status	", addr.status, "\n");
226*ce95e1b3SDavid du Colombier	print("	ie	", addr.ie, "\n");
227*ce95e1b3SDavid du Colombier	print("_35_ {\n");
228*ce95e1b3SDavid du Colombier		_35_(addr+272);
229*ce95e1b3SDavid du Colombier	print("}\n");
230*ce95e1b3SDavid du Colombier	print("	tval	", addr.tval, "\n");
231*ce95e1b3SDavid du Colombier	print("	curmode	", addr.curmode, "\n");
232*ce95e1b3SDavid du Colombier};
233*ce95e1b3SDavid du Colombier
234*ce95e1b3SDavid du Colombierdefn linkreg(addr)
235*ce95e1b3SDavid du Colombier{
236*ce95e1b3SDavid du Colombier	complex Ureg addr;
237*ce95e1b3SDavid du Colombier	return addr.r1\Y;
238*ce95e1b3SDavid du Colombier}
239*ce95e1b3SDavid du Colombier
240*ce95e1b3SDavid du Colombierprint("/sys/lib/acid/riscv64");
241