xref: /inferno-os/utils/libmach/8.c (revision 73500e27daa267189e5cf91110ab373a3e9302e6)
174a4d8c2SCharles.Forsyth /*
274a4d8c2SCharles.Forsyth  * 386 definition
374a4d8c2SCharles.Forsyth  */
474a4d8c2SCharles.Forsyth #include <lib9.h>
574a4d8c2SCharles.Forsyth #include <bio.h>
674a4d8c2SCharles.Forsyth #include "ureg8.h"
774a4d8c2SCharles.Forsyth #include "mach.h"
874a4d8c2SCharles.Forsyth 
974a4d8c2SCharles.Forsyth #define	REGOFF(x)	(ulong)(&((struct Ureg *) 0)->x)
1074a4d8c2SCharles.Forsyth 
1174a4d8c2SCharles.Forsyth #define PC		REGOFF(pc)
1274a4d8c2SCharles.Forsyth #define SP		REGOFF(u0.sp)
1374a4d8c2SCharles.Forsyth #define	AX		REGOFF(ax)
1474a4d8c2SCharles.Forsyth 
1574a4d8c2SCharles.Forsyth #define	REGSIZE		sizeof(struct Ureg)
1674a4d8c2SCharles.Forsyth #define FP_CTL(x)	(REGSIZE+4*(x))
1774a4d8c2SCharles.Forsyth #define FP_REG(x)	(FP_CTL(7)+10*(x))
18*73500e27Sforsyth #define	FPREGSIZE	(7*4+8*10)
1974a4d8c2SCharles.Forsyth 
2074a4d8c2SCharles.Forsyth Reglist i386reglist[] = {
2174a4d8c2SCharles.Forsyth 	{"DI",		REGOFF(di),	RINT, 'X'},
2274a4d8c2SCharles.Forsyth 	{"SI",		REGOFF(si),	RINT, 'X'},
2374a4d8c2SCharles.Forsyth 	{"BP",		REGOFF(bp),	RINT, 'X'},
2474a4d8c2SCharles.Forsyth 	{"BX",		REGOFF(bx),	RINT, 'X'},
2574a4d8c2SCharles.Forsyth 	{"DX",		REGOFF(dx),	RINT, 'X'},
2674a4d8c2SCharles.Forsyth 	{"CX",		REGOFF(cx),	RINT, 'X'},
2774a4d8c2SCharles.Forsyth 	{"AX",		REGOFF(ax),	RINT, 'X'},
2874a4d8c2SCharles.Forsyth 	{"GS",		REGOFF(gs),	RINT, 'X'},
2974a4d8c2SCharles.Forsyth 	{"FS",		REGOFF(fs),	RINT, 'X'},
3074a4d8c2SCharles.Forsyth 	{"ES",		REGOFF(es),	RINT, 'X'},
3174a4d8c2SCharles.Forsyth 	{"DS",		REGOFF(ds),	RINT, 'X'},
3274a4d8c2SCharles.Forsyth 	{"TRAP",	REGOFF(trap), 	RINT, 'X'},
3374a4d8c2SCharles.Forsyth 	{"ECODE",	REGOFF(ecode),	RINT, 'X'},
3474a4d8c2SCharles.Forsyth 	{"PC",		PC,		RINT, 'X'},
3574a4d8c2SCharles.Forsyth 	{"CS",		REGOFF(cs),	RINT, 'X'},
3674a4d8c2SCharles.Forsyth 	{"EFLAGS",	REGOFF(flags),	RINT, 'X'},
3774a4d8c2SCharles.Forsyth 	{"SP",		SP,		RINT, 'X'},
3874a4d8c2SCharles.Forsyth 	{"SS",		REGOFF(ss),	RINT, 'X'},
3974a4d8c2SCharles.Forsyth 
4074a4d8c2SCharles.Forsyth 	{"E0",		FP_CTL(0),	RFLT, 'X'},
4174a4d8c2SCharles.Forsyth 	{"E1",		FP_CTL(1),	RFLT, 'X'},
4274a4d8c2SCharles.Forsyth 	{"E2",		FP_CTL(2),	RFLT, 'X'},
4374a4d8c2SCharles.Forsyth 	{"E3",		FP_CTL(3),	RFLT, 'X'},
4474a4d8c2SCharles.Forsyth 	{"E4",		FP_CTL(4),	RFLT, 'X'},
4574a4d8c2SCharles.Forsyth 	{"E5",		FP_CTL(5),	RFLT, 'X'},
4674a4d8c2SCharles.Forsyth 	{"E6",		FP_CTL(6),	RFLT, 'X'},
47*73500e27Sforsyth 	{"F0",		FP_REG(0),	RFLT, '3'},
48*73500e27Sforsyth 	{"F1",		FP_REG(1),	RFLT, '3'},
49*73500e27Sforsyth 	{"F2",		FP_REG(2),	RFLT, '3'},
50*73500e27Sforsyth 	{"F3",		FP_REG(3),	RFLT, '3'},
51*73500e27Sforsyth 	{"F4",		FP_REG(4),	RFLT, '3'},
52*73500e27Sforsyth 	{"F5",		FP_REG(5),	RFLT, '3'},
53*73500e27Sforsyth 	{"F6",		FP_REG(6),	RFLT, '3'},
54*73500e27Sforsyth 	{"F7",		FP_REG(7),	RFLT, '3'},
5574a4d8c2SCharles.Forsyth 	{  0 }
5674a4d8c2SCharles.Forsyth };
5774a4d8c2SCharles.Forsyth 
5874a4d8c2SCharles.Forsyth Mach mi386 =
5974a4d8c2SCharles.Forsyth {
6074a4d8c2SCharles.Forsyth 	"386",
6174a4d8c2SCharles.Forsyth 	MI386,		/* machine type */
6274a4d8c2SCharles.Forsyth 	i386reglist,	/* register list */
6374a4d8c2SCharles.Forsyth 	REGSIZE,	/* size of registers in bytes */
6474a4d8c2SCharles.Forsyth 	FPREGSIZE,	/* size of fp registers in bytes */
6574a4d8c2SCharles.Forsyth 	"PC",		/* name of PC */
6674a4d8c2SCharles.Forsyth 	"SP",		/* name of SP */
6774a4d8c2SCharles.Forsyth 	0,		/* link register */
6874a4d8c2SCharles.Forsyth 	"setSB",	/* static base register name (bogus anyways) */
6974a4d8c2SCharles.Forsyth 	0,		/* static base register value */
7074a4d8c2SCharles.Forsyth 	0x1000,		/* page size */
7174a4d8c2SCharles.Forsyth 	0x80100000,	/* kernel base */
72*73500e27Sforsyth 	0x80000000,		/* kernel text mask */
73*73500e27Sforsyth 	0x7FFFFFFF,		/* user stack top */
7474a4d8c2SCharles.Forsyth 	1,		/* quantization of pc */
7574a4d8c2SCharles.Forsyth 	4,		/* szaddr */
7674a4d8c2SCharles.Forsyth 	4,		/* szreg */
7774a4d8c2SCharles.Forsyth 	4,		/* szfloat */
7874a4d8c2SCharles.Forsyth 	8,		/* szdouble */
7974a4d8c2SCharles.Forsyth };
80