xref: /plan9/sys/src/libmach/8.c (revision fe48307444a1acf63db729baba08249782b86598)
13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier  * 386 definition
33e12c5d1SDavid du Colombier  */
4bd389b36SDavid du Colombier #include <u.h>
5*fe483074SDavid du Colombier #include <libc.h>
6bd389b36SDavid du Colombier #include <bio.h>
73e12c5d1SDavid du Colombier #include "/386/include/ureg.h"
8bd389b36SDavid du Colombier #include <mach.h>
93e12c5d1SDavid du Colombier 
107dd7cddfSDavid du Colombier #define	REGOFF(x)	(ulong)(&((struct Ureg *) 0)->x)
113e12c5d1SDavid du Colombier 
123e12c5d1SDavid du Colombier #define PC		REGOFF(pc)
133e12c5d1SDavid du Colombier #define SP		REGOFF(sp)
14bd389b36SDavid du Colombier #define	AX		REGOFF(ax)
153e12c5d1SDavid du Colombier 
167dd7cddfSDavid du Colombier #define	REGSIZE		sizeof(struct Ureg)
177dd7cddfSDavid du Colombier #define FP_CTL(x)	(REGSIZE+4*(x))
187dd7cddfSDavid du Colombier #define FP_REG(x)	(FP_CTL(7)+10*(x))
1937e88e97SDavid du Colombier #define	FPREGSIZE	(7*4+8*10)
207dd7cddfSDavid du Colombier 
213e12c5d1SDavid du Colombier Reglist i386reglist[] = {
22219b2ee8SDavid du Colombier 	{"DI",		REGOFF(di),	RINT, 'X'},
23219b2ee8SDavid du Colombier 	{"SI",		REGOFF(si),	RINT, 'X'},
24219b2ee8SDavid du Colombier 	{"BP",		REGOFF(bp),	RINT, 'X'},
25219b2ee8SDavid du Colombier 	{"BX",		REGOFF(bx),	RINT, 'X'},
26219b2ee8SDavid du Colombier 	{"DX",		REGOFF(dx),	RINT, 'X'},
27219b2ee8SDavid du Colombier 	{"CX",		REGOFF(cx),	RINT, 'X'},
28219b2ee8SDavid du Colombier 	{"AX",		REGOFF(ax),	RINT, 'X'},
29219b2ee8SDavid du Colombier 	{"GS",		REGOFF(gs),	RINT, 'X'},
30219b2ee8SDavid du Colombier 	{"FS",		REGOFF(fs),	RINT, 'X'},
31219b2ee8SDavid du Colombier 	{"ES",		REGOFF(es),	RINT, 'X'},
32219b2ee8SDavid du Colombier 	{"DS",		REGOFF(ds),	RINT, 'X'},
33219b2ee8SDavid du Colombier 	{"TRAP",	REGOFF(trap), 	RINT, 'X'},
34219b2ee8SDavid du Colombier 	{"ECODE",	REGOFF(ecode),	RINT, 'X'},
35219b2ee8SDavid du Colombier 	{"PC",		PC,		RINT, 'X'},
36219b2ee8SDavid du Colombier 	{"CS",		REGOFF(cs),	RINT, 'X'},
37219b2ee8SDavid du Colombier 	{"EFLAGS",	REGOFF(flags),	RINT, 'X'},
38219b2ee8SDavid du Colombier 	{"SP",		SP,		RINT, 'X'},
39219b2ee8SDavid du Colombier 	{"SS",		REGOFF(ss),	RINT, 'X'},
403e12c5d1SDavid du Colombier 
41219b2ee8SDavid du Colombier 	{"E0",		FP_CTL(0),	RFLT, 'X'},
42219b2ee8SDavid du Colombier 	{"E1",		FP_CTL(1),	RFLT, 'X'},
43219b2ee8SDavid du Colombier 	{"E2",		FP_CTL(2),	RFLT, 'X'},
44219b2ee8SDavid du Colombier 	{"E3",		FP_CTL(3),	RFLT, 'X'},
45219b2ee8SDavid du Colombier 	{"E4",		FP_CTL(4),	RFLT, 'X'},
46219b2ee8SDavid du Colombier 	{"E5",		FP_CTL(5),	RFLT, 'X'},
47219b2ee8SDavid du Colombier 	{"E6",		FP_CTL(6),	RFLT, 'X'},
4837e88e97SDavid du Colombier 	{"F0",		FP_REG(0),	RFLT, '3'},
4937e88e97SDavid du Colombier 	{"F1",		FP_REG(1),	RFLT, '3'},
5037e88e97SDavid du Colombier 	{"F2",		FP_REG(2),	RFLT, '3'},
5137e88e97SDavid du Colombier 	{"F3",		FP_REG(3),	RFLT, '3'},
5237e88e97SDavid du Colombier 	{"F4",		FP_REG(4),	RFLT, '3'},
5337e88e97SDavid du Colombier 	{"F5",		FP_REG(5),	RFLT, '3'},
5437e88e97SDavid du Colombier 	{"F6",		FP_REG(6),	RFLT, '3'},
5537e88e97SDavid du Colombier 	{"F7",		FP_REG(7),	RFLT, '3'},
563e12c5d1SDavid du Colombier 	{  0 }
573e12c5d1SDavid du Colombier };
583e12c5d1SDavid du Colombier 
593e12c5d1SDavid du Colombier Mach mi386 =
603e12c5d1SDavid du Colombier {
613e12c5d1SDavid du Colombier 	"386",
62219b2ee8SDavid du Colombier 	MI386,		/* machine type */
633e12c5d1SDavid du Colombier 	i386reglist,	/* register list */
647dd7cddfSDavid du Colombier 	REGSIZE,	/* size of registers in bytes */
657dd7cddfSDavid du Colombier 	FPREGSIZE,	/* size of fp registers in bytes */
667dd7cddfSDavid du Colombier 	"PC",		/* name of PC */
677dd7cddfSDavid du Colombier 	"SP",		/* name of SP */
68219b2ee8SDavid du Colombier 	0,		/* link register */
697dd7cddfSDavid du Colombier 	"setSB",	/* static base register name (bogus anyways) */
707dd7cddfSDavid du Colombier 	0,		/* static base register value */
713e12c5d1SDavid du Colombier 	0x1000,		/* page size */
7242860f21SDavid du Colombier 	0xF0100000ULL,	/* kernel base */
732cca75a1SDavid du Colombier 	0xF0000000ULL,	/* kernel text mask */
744de34a7eSDavid du Colombier 	0x7FFFFFFFULL,	/* user stack top */
753e12c5d1SDavid du Colombier 	1,		/* quantization of pc */
763e12c5d1SDavid du Colombier 	4,		/* szaddr */
773e12c5d1SDavid du Colombier 	4,		/* szreg */
783e12c5d1SDavid du Colombier 	4,		/* szfloat */
793e12c5d1SDavid du Colombier 	8,		/* szdouble */
803e12c5d1SDavid du Colombier };
81