xref: /inferno-os/utils/libmach/8.c (revision 9dc22068e29604f4b484e746112a9a4efe6fd57f)
1 /*
2  * 386 definition
3  */
4 #include <lib9.h>
5 #include <bio.h>
6 #include "ureg8.h"
7 #include "mach.h"
8 
9 #define	REGOFF(x)	(ulong)(&((struct Ureg *) 0)->x)
10 
11 #define PC		REGOFF(pc)
12 #define SP		REGOFF(u0.sp)
13 #define	AX		REGOFF(ax)
14 
15 #define	REGSIZE		sizeof(struct Ureg)
16 #define FP_CTL(x)	(REGSIZE+4*(x))
17 #define FP_REG(x)	(FP_CTL(7)+10*(x))
18 #define	FPREGSIZE	(6*4+8*10)
19 
20 Reglist i386reglist[] = {
21 	{"DI",		REGOFF(di),	RINT, 'X'},
22 	{"SI",		REGOFF(si),	RINT, 'X'},
23 	{"BP",		REGOFF(bp),	RINT, 'X'},
24 	{"BX",		REGOFF(bx),	RINT, 'X'},
25 	{"DX",		REGOFF(dx),	RINT, 'X'},
26 	{"CX",		REGOFF(cx),	RINT, 'X'},
27 	{"AX",		REGOFF(ax),	RINT, 'X'},
28 	{"GS",		REGOFF(gs),	RINT, 'X'},
29 	{"FS",		REGOFF(fs),	RINT, 'X'},
30 	{"ES",		REGOFF(es),	RINT, 'X'},
31 	{"DS",		REGOFF(ds),	RINT, 'X'},
32 	{"TRAP",	REGOFF(trap), 	RINT, 'X'},
33 	{"ECODE",	REGOFF(ecode),	RINT, 'X'},
34 	{"PC",		PC,		RINT, 'X'},
35 	{"CS",		REGOFF(cs),	RINT, 'X'},
36 	{"EFLAGS",	REGOFF(flags),	RINT, 'X'},
37 	{"SP",		SP,		RINT, 'X'},
38 	{"SS",		REGOFF(ss),	RINT, 'X'},
39 
40 	{"E0",		FP_CTL(0),	RFLT, 'X'},
41 	{"E1",		FP_CTL(1),	RFLT, 'X'},
42 	{"E2",		FP_CTL(2),	RFLT, 'X'},
43 	{"E3",		FP_CTL(3),	RFLT, 'X'},
44 	{"E4",		FP_CTL(4),	RFLT, 'X'},
45 	{"E5",		FP_CTL(5),	RFLT, 'X'},
46 	{"E6",		FP_CTL(6),	RFLT, 'X'},
47 	{"F0",		FP_REG(7),	RFLT, '3'},
48 	{"F1",		FP_REG(6),	RFLT, '3'},
49 	{"F2",		FP_REG(5),	RFLT, '3'},
50 	{"F3",		FP_REG(4),	RFLT, '3'},
51 	{"F4",		FP_REG(3),	RFLT, '3'},
52 	{"F5",		FP_REG(2),	RFLT, '3'},
53 	{"F6",		FP_REG(1),	RFLT, '3'},
54 	{"F7",		FP_REG(0),	RFLT, '3'},
55 	{  0 }
56 };
57 
58 Mach mi386 =
59 {
60 	"386",
61 	MI386,		/* machine type */
62 	i386reglist,	/* register list */
63 	REGSIZE,	/* size of registers in bytes */
64 	FPREGSIZE,	/* size of fp registers in bytes */
65 	"PC",		/* name of PC */
66 	"SP",		/* name of SP */
67 	0,		/* link register */
68 	"setSB",	/* static base register name (bogus anyways) */
69 	0,		/* static base register value */
70 	0x1000,		/* page size */
71 	0x80100000,	/* kernel base */
72 	0,		/* kernel text mask */
73 	1,		/* quantization of pc */
74 	4,		/* szaddr */
75 	4,		/* szreg */
76 	4,		/* szfloat */
77 	8,		/* szdouble */
78 };
79