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