xref: /inferno-os/utils/libmach/i.c (revision a93f6c888f6d530420fbb54e2f7fa4572cdc5208)
1*2a571cc0SRichard Miller /*
2*2a571cc0SRichard Miller  * RISC-V definition
3*2a571cc0SRichard Miller  */
4*2a571cc0SRichard Miller #include <lib9.h>
5*2a571cc0SRichard Miller #include <bio.h>
6*2a571cc0SRichard Miller #include "uregi.h"
7*2a571cc0SRichard Miller #include <mach.h>
8*2a571cc0SRichard Miller 
9*2a571cc0SRichard Miller #define	REGOFF(x)	offsetof(struct Ureg, x)
10*2a571cc0SRichard Miller #define	REGSIZE		sizeof(struct Ureg)
11*2a571cc0SRichard Miller 
12*2a571cc0SRichard Miller Reglist riscvreglist[] = {
13*2a571cc0SRichard Miller 	{"PC",		REGOFF(pc),	RINT, 'X'},
14*2a571cc0SRichard Miller 	{"SP",		REGOFF(r27),	RINT, 'X'},
15*2a571cc0SRichard Miller 	{"R31",		REGOFF(r31),	RINT, 'X'},
16*2a571cc0SRichard Miller 	{"R30",		REGOFF(r30),	RINT, 'X'},
17*2a571cc0SRichard Miller 	{"R28",		REGOFF(r28),	RINT, 'X'},
18*2a571cc0SRichard Miller 	{"R27",		REGOFF(r27),	RINT, 'X'},
19*2a571cc0SRichard Miller 	{"R26",		REGOFF(r26),	RINT, 'X'},
20*2a571cc0SRichard Miller 	{"R25",		REGOFF(r25),	RINT, 'X'},
21*2a571cc0SRichard Miller 	{"R24",		REGOFF(r24),	RINT, 'X'},
22*2a571cc0SRichard Miller 	{"R23",		REGOFF(r23),	RINT, 'X'},
23*2a571cc0SRichard Miller 	{"R22",		REGOFF(r22),	RINT, 'X'},
24*2a571cc0SRichard Miller 	{"R21",		REGOFF(r21),	RINT, 'X'},
25*2a571cc0SRichard Miller 	{"R20",		REGOFF(r20),	RINT, 'X'},
26*2a571cc0SRichard Miller 	{"R19",		REGOFF(r19),	RINT, 'X'},
27*2a571cc0SRichard Miller 	{"R18",		REGOFF(r18),	RINT, 'X'},
28*2a571cc0SRichard Miller 	{"R17",		REGOFF(r17),	RINT, 'X'},
29*2a571cc0SRichard Miller 	{"R16",		REGOFF(r16),	RINT, 'X'},
30*2a571cc0SRichard Miller 	{"R15",		REGOFF(r15),	RINT, 'X'},
31*2a571cc0SRichard Miller 	{"R14",		REGOFF(r14),	RINT, 'X'},
32*2a571cc0SRichard Miller 	{"R13",		REGOFF(r13),	RINT, 'X'},
33*2a571cc0SRichard Miller 	{"R12",		REGOFF(r12),	RINT, 'X'},
34*2a571cc0SRichard Miller 	{"R11",		REGOFF(r11),	RINT, 'X'},
35*2a571cc0SRichard Miller 	{"R10",		REGOFF(r10),	RINT, 'X'},
36*2a571cc0SRichard Miller 	{"R9",		REGOFF(r9),	RINT, 'X'},
37*2a571cc0SRichard Miller 	{"R8",		REGOFF(r8),	RINT, 'X'},
38*2a571cc0SRichard Miller 	{"R7",		REGOFF(r7),	RINT, 'X'},
39*2a571cc0SRichard Miller 	{"R6",		REGOFF(r6),	RINT, 'X'},
40*2a571cc0SRichard Miller 	{"R5",		REGOFF(r5),	RINT, 'X'},
41*2a571cc0SRichard Miller 	{"R4",		REGOFF(r4),	RINT, 'X'},
42*2a571cc0SRichard Miller 	{"R3",		REGOFF(r3),	RINT, 'X'},
43*2a571cc0SRichard Miller 	{"R2",		REGOFF(r2),	RINT, 'X'},
44*2a571cc0SRichard Miller 	{"R1",		REGOFF(r1),	RINT, 'X'},
45*2a571cc0SRichard Miller 	{  0 }
46*2a571cc0SRichard Miller };
47*2a571cc0SRichard Miller 
48*2a571cc0SRichard Miller 	/* the machine description */
49*2a571cc0SRichard Miller Mach mriscv =
50*2a571cc0SRichard Miller {
51*2a571cc0SRichard Miller 	"riscv",
52*2a571cc0SRichard Miller 	MRISCV,		/* machine type */
53*2a571cc0SRichard Miller 	riscvreglist,	/* register set */
54*2a571cc0SRichard Miller 	REGSIZE,	/* register set size */
55*2a571cc0SRichard Miller 	0,		/* fp register set size */
56*2a571cc0SRichard Miller 	"PC",		/* name of PC */
57*2a571cc0SRichard Miller 	"SP",		/* name of SP */
58*2a571cc0SRichard Miller 	"R1",		/* name of link register */
59*2a571cc0SRichard Miller 	"setSB",	/* static base register name */
60*2a571cc0SRichard Miller 	0,		/* static base register value */
61*2a571cc0SRichard Miller 	0x1000,		/* page size */
62*2a571cc0SRichard Miller 	0x80000000ULL,	/* kernel base */
63*2a571cc0SRichard Miller 	0xC0000000ULL,	/* kernel text mask */
64*2a571cc0SRichard Miller 	0x3FFFFFFFULL,	/* user stack top */
65*2a571cc0SRichard Miller 	2,		/* quantization of pc */
66*2a571cc0SRichard Miller 	4,		/* szaddr */
67*2a571cc0SRichard Miller 	4,		/* szreg */
68*2a571cc0SRichard Miller 	4,		/* szfloat */
69*2a571cc0SRichard Miller 	8,		/* szdouble */
70*2a571cc0SRichard Miller };
71