xref: /plan9/sys/src/libmach/68020.c (revision eaba85aa6b158bdf68fdb77f770e3ba0899a8b5e)
1473d4f4bSDavid du Colombier /*
2473d4f4bSDavid du Colombier  * 68020 definition
3473d4f4bSDavid du Colombier  */
4473d4f4bSDavid du Colombier #include <u.h>
5473d4f4bSDavid du Colombier #include "68020/ureg.h"
6*eaba85aaSDavid du Colombier #include <libc.h>
7473d4f4bSDavid du Colombier #include <bio.h>
8473d4f4bSDavid du Colombier #include <mach.h>
9473d4f4bSDavid du Colombier 
10473d4f4bSDavid du Colombier #define	MAXREG	0
11473d4f4bSDavid du Colombier #define	MINREG	0
12473d4f4bSDavid du Colombier 
13473d4f4bSDavid du Colombier #define	REGOFF(x)	(ulong)(&((struct Ureg *) 0)->x)
14473d4f4bSDavid du Colombier 
15473d4f4bSDavid du Colombier #define	VO	REGOFF(vo)		/* vo, 2 bytes */
16473d4f4bSDavid du Colombier #define	SR	REGOFF(sr)		/* sr, 2 bytes */
17473d4f4bSDavid du Colombier #define	R0	REGOFF(r0)
18473d4f4bSDavid du Colombier #define	PC	REGOFF(pc)
19473d4f4bSDavid du Colombier #define	DBMAGIC	REGOFF(magic)
20473d4f4bSDavid du Colombier #define	SP	REGOFF(usp)
21473d4f4bSDavid du Colombier 
22473d4f4bSDavid du Colombier #define	REGSIZE		(R0+4)
23473d4f4bSDavid du Colombier #define	FCTL(x)		(REGSIZE+(x)*4)
24473d4f4bSDavid du Colombier #define	FREG(x)		(FCTL(3)+(x)*12)
25473d4f4bSDavid du Colombier #define	FPREGSIZE	(11*12)
26473d4f4bSDavid du Colombier 
27473d4f4bSDavid du Colombier /*
28473d4f4bSDavid du Colombier  *	68020 register set
29473d4f4bSDavid du Colombier  */
30473d4f4bSDavid du Colombier Reglist m68020reglist[] = {
31473d4f4bSDavid du Colombier 	{"VO",		VO,		RINT,	'x'},
32473d4f4bSDavid du Colombier 	{"SR",		SR,		RINT,	'x'},
33473d4f4bSDavid du Colombier 	{"MAGIC",	DBMAGIC,	RINT,	'X'},
34473d4f4bSDavid du Colombier 	{"PC",		PC,		RINT,	'X'},
35473d4f4bSDavid du Colombier 	{"A7",		SP,		RINT,	'X'},
36473d4f4bSDavid du Colombier 	{"KSP",		REGOFF(sp),	RINT,	'X'},
37473d4f4bSDavid du Colombier 	{"A6",		REGOFF(a6),	RINT,	'X'},
38473d4f4bSDavid du Colombier 	{"A5",		REGOFF(a5),	RINT,	'X'},
39473d4f4bSDavid du Colombier 	{"A4",		REGOFF(a4),	RINT,	'X'},
40473d4f4bSDavid du Colombier 	{"A3",		REGOFF(a3),	RINT,	'X'},
41473d4f4bSDavid du Colombier 	{"A2",		REGOFF(a2),	RINT,	'X'},
42473d4f4bSDavid du Colombier 	{"A1",		REGOFF(a1),	RINT,	'X'},
43473d4f4bSDavid du Colombier 	{"A0",		REGOFF(a0),	RINT,	'X'},
44473d4f4bSDavid du Colombier 	{"R7",		REGOFF(r7),	RINT,	'X'},
45473d4f4bSDavid du Colombier 	{"R6",		REGOFF(r6),	RINT,	'X'},
46473d4f4bSDavid du Colombier 	{"R5",		REGOFF(r5),	RINT,	'X'},
47473d4f4bSDavid du Colombier 	{"R4",		REGOFF(r4),	RINT,	'X'},
48473d4f4bSDavid du Colombier 	{"R3",		REGOFF(r3),	RINT,	'X'},
49473d4f4bSDavid du Colombier 	{"R2",		REGOFF(r2),	RINT,	'X'},
50473d4f4bSDavid du Colombier 	{"R1",		REGOFF(r1),	RINT,	'X'},
51473d4f4bSDavid du Colombier 	{"R0",		REGOFF(r0),	RINT,	'X'},
52473d4f4bSDavid du Colombier 	{"FPCR",	FCTL(0),	RFLT,	'X'},
53473d4f4bSDavid du Colombier 	{"FPSR",	FCTL(1),	RFLT,	'X'},
54473d4f4bSDavid du Colombier 	{"FPIAR",	FCTL(2),	RFLT,	'X'},
55473d4f4bSDavid du Colombier 	{"F0",		FREG(0),	RFLT,	'8'},
56473d4f4bSDavid du Colombier 	{"F1",		FREG(1),	RFLT,	'8'},
57473d4f4bSDavid du Colombier 	{"F2",		FREG(2),	RFLT,	'8'},
58473d4f4bSDavid du Colombier 	{"F3",		FREG(3),	RFLT,	'8'},
59473d4f4bSDavid du Colombier 	{"F4",		FREG(4),	RFLT,	'8'},
60473d4f4bSDavid du Colombier 	{"F5",		FREG(5),	RFLT,	'8'},
61473d4f4bSDavid du Colombier 	{"F6",		FREG(6),	RFLT,	'8'},
62473d4f4bSDavid du Colombier 	{"F7",		FREG(7),	RFLT,	'8'},
63473d4f4bSDavid du Colombier 	{0}
64473d4f4bSDavid du Colombier };
65473d4f4bSDavid du Colombier 
66473d4f4bSDavid du Colombier Mach m68020 =
67473d4f4bSDavid du Colombier {
68473d4f4bSDavid du Colombier 	"68020",
69473d4f4bSDavid du Colombier 	M68020,		/* machine type */
70473d4f4bSDavid du Colombier 	m68020reglist,	/* register list */
71473d4f4bSDavid du Colombier 	REGSIZE,	/* number of bytes in reg set */
72473d4f4bSDavid du Colombier 	FPREGSIZE,	/* number of bytes in fp reg set */
73473d4f4bSDavid du Colombier 	"PC",
74473d4f4bSDavid du Colombier 	"A7",
75473d4f4bSDavid du Colombier 	0,		/* link register */
76473d4f4bSDavid du Colombier 	"a6base",	/* static base register name */
77473d4f4bSDavid du Colombier 	0,		/* value */
78473d4f4bSDavid du Colombier 	0x2000,		/* page size */
79473d4f4bSDavid du Colombier 	0x80000000ULL,	/* kernel base */
80473d4f4bSDavid du Colombier 	0x80000000ULL,	/* kernel text mask */
81473d4f4bSDavid du Colombier 	0x7FFFFFFFULL,	/* user stack top */
82473d4f4bSDavid du Colombier 	2,		/* quantization of pc */
83473d4f4bSDavid du Colombier 	4,		/* szaddr */
84473d4f4bSDavid du Colombier 	4,		/* szreg */
85473d4f4bSDavid du Colombier 	4,		/* szfloat */
86473d4f4bSDavid du Colombier 	8,		/* szdouble */
87473d4f4bSDavid du Colombier };
88