xref: /plan9-contrib/sys/src/libmach/6.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 /*
2  * 960 definition
3  */
4 #include <u.h>
5 #include <bio.h>
6 #include <mach.h>
7 
8 #define	MINREG	0
9 #define	MAXREG	0
10 
11 #define USIZE		0x1000
12 #define UR(x)		(USIZE-((32)*4)+4*(x))
13 
14 /*
15  *  until we decide how we'll take faults, we really
16  *  don't know what the saved regs will look like.
17  *  this is just a guess. -- presotto
18  */
19 #define SP	UR(29)
20 #define PC	UR(30)
21 #define	R4	UR(4)
22 
23 Reglist i960reglist[] = {
24 	{ "R0",		UR(0), RINT, 'X'},
25 	{ "R1",		UR(1), RINT, 'X'},
26 	{ "R2",		UR(2), RINT, 'X'},
27 	{ "R3",		UR(3), RINT, 'X'},
28 	{ "R4",		UR(4), RINT, 'X'},
29 	{ "R5",		UR(5), RINT, 'X'},
30 	{ "R6",		UR(6), RINT, 'X'},
31 	{ "R7",		UR(7), RINT, 'X'},
32 	{ "R8",		UR(8), RINT, 'X'},
33 	{ "R9",		UR(9), RINT, 'X'},
34 	{ "R10",	UR(10), RINT, 'X'},
35 	{ "R11",	UR(11), RINT, 'X'},
36 	{ "R12",	UR(12), RINT, 'X'},
37 	{ "R13",	UR(13), RINT, 'X'},
38 	{ "R14",	UR(14), RINT, 'X'},
39 	{ "R15",	UR(15), RINT, 'X'},
40 	{ "R16",	UR(16), RINT, 'X'},
41 	{ "R17",	UR(17), RINT, 'X'},
42 	{ "R18",	UR(18), RINT, 'X'},
43 	{ "R19",	UR(19), RINT, 'X'},
44 	{ "R20",	UR(20), RINT, 'X'},
45 	{ "R21",	UR(21), RINT, 'X'},
46 	{ "R22",	UR(22), RINT, 'X'},
47 	{ "R23",	UR(23), RINT, 'X'},
48 	{ "R24",	UR(24), RINT, 'X'},
49 	{ "R25",	UR(25), RINT, 'X'},
50 	{ "R26",	UR(26), RINT, 'X'},
51 	{ "TMP",	UR(27), RINT, 'X'},
52 	{ "SB",		UR(28), RINT, 'X'},
53 	{ "SP",		SP, RINT, 'X'},
54 	{ "PC",		PC, RINT, 'X'},
55 	{ "R31",	UR(31), RINT, 'X' },
56 	{  0 }
57 };
58 
59 Mach mi960 =
60 {
61 	"960",
62 	MI960,		/* machine type */
63 	i960reglist,		/* register list */
64 	MINREG,		/* minimum register */
65 	MAXREG,		/* maximum register */
66 	"PC",
67 	"SP",
68 	0,		/* link register */
69 	R4,		/* return register */
70 	0x1000,		/* page size */
71 	0x80000000,	/* kernel base */
72 	0,		/* kernel text mask */
73 	0,		/* offset of ksp in /proc/proc */
74 	0,		/* correction to ksp value */
75 	4,		/* offset of kpc in /proc/proc */
76 	0,		/* correction to kpc value */
77 	0,		/* offset in ublk of syscall #*/
78 	1,		/* quantization of pc */
79 	"setSB",	/* static base register name */
80 	0,		/* value */
81 	4,		/* szaddr */
82 	4,		/* szreg */
83 	4,		/* szfloat */
84 	8,		/* szdouble */
85 };
86