]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmach/8.c
merge
[plan9front.git] / sys / src / libmach / 8.c
1 /*
2  * 386 definition
3  */
4 #include <u.h>
5 #include <bio.h>
6 #include "/386/include/ureg.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(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       (7*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(0),      RFLT, '3'},
48         {"F1",          FP_REG(1),      RFLT, '3'},
49         {"F2",          FP_REG(2),      RFLT, '3'},
50         {"F3",          FP_REG(3),      RFLT, '3'},
51         {"F4",          FP_REG(4),      RFLT, '3'},
52         {"F5",          FP_REG(5),      RFLT, '3'},
53         {"F6",          FP_REG(6),      RFLT, '3'},
54         {"F7",          FP_REG(7),      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         0xF0100000ULL,  /* kernel base */
72         0xF0000000ULL,  /* kernel text mask */
73         0x7FFFFFFFULL,  /* user stack top */
74         1,              /* quantization of pc */
75         4,              /* szaddr */
76         4,              /* szreg */
77         4,              /* szfloat */
78         8,              /* szdouble */
79 };