Release 960712
[wine/dcerpc.git] / include / registers.h
blobbfff59a04ba0fd1bbb4941674d34ca62283865fc
1 /*
2 * Register definitions
4 * Copyright 1995 Alexandre Julliard
5 */
7 #ifndef __WINE_REGISTERS_H
8 #define __WINE_REGISTERS_H
10 #include "wintypes.h"
12 #ifndef WINELIB
14 #ifdef i386
15 extern int runtime_cpu (void);
16 #else
17 static inline int runtime_cpu(void) { return 3; }
18 #endif
20 #ifdef linux
21 typedef struct
23 unsigned short sc_gs, __gsh;
24 unsigned short sc_fs, __fsh;
25 unsigned short sc_es, __esh;
26 unsigned short sc_ds, __dsh;
27 unsigned long sc_edi;
28 unsigned long sc_esi;
29 unsigned long sc_ebp;
30 unsigned long sc_esp;
31 unsigned long sc_ebx;
32 unsigned long sc_edx;
33 unsigned long sc_ecx;
34 unsigned long sc_eax;
35 unsigned long sc_trapno;
36 unsigned long sc_err;
37 unsigned long sc_eip;
38 unsigned short sc_cs, __csh;
39 unsigned long sc_eflags;
40 unsigned long esp_at_signal;
41 unsigned short sc_ss, __ssh;
42 unsigned long i387;
43 unsigned long oldmask;
44 unsigned long cr2;
45 } SIGCONTEXT;
46 #define WINE_DATA_SELECTOR 0x2b
47 #define WINE_CODE_SELECTOR 0x23
48 #endif /* linux */
50 #ifdef __NetBSD__
51 #include <signal.h>
52 typedef struct sigcontext SIGCONTEXT;
53 #define WINE_DATA_SELECTOR 0x1f
54 #define WINE_CODE_SELECTOR 0x17
55 #endif /* NetBSD */
57 #if defined(__svr4__) || defined(_SCO_DS)
58 #include <signal.h>
59 #ifdef _SCO_DS
60 #include <sys/regset.h>
61 #endif
62 #include <sys/ucontext.h>
63 typedef struct ucontext SIGCONTEXT;
64 #define WINE_DATA_SELECTOR 0x1f
65 #define WINE_CODE_SELECTOR 0x17
66 #endif /* svr4 || SCO_DS */
68 #ifdef __FreeBSD__
69 #include <signal.h>
70 typedef struct sigcontext SIGCONTEXT;
71 #define WINE_DATA_SELECTOR 0x27
72 #define WINE_CODE_SELECTOR 0x1f
73 #endif /* FreeBSD */
75 #if !defined(__svr4__) && !defined(_SCO_DS)
77 #define EAX_reg(context) ((context)->sc_eax)
78 #define EBX_reg(context) ((context)->sc_ebx)
79 #define ECX_reg(context) ((context)->sc_ecx)
80 #define EDX_reg(context) ((context)->sc_edx)
81 #define ESI_reg(context) ((context)->sc_esi)
82 #define EDI_reg(context) ((context)->sc_edi)
83 #define EBP_reg(context) ((context)->sc_ebp)
85 #define AX_reg(context) (*(WORD*)&((context)->sc_eax))
86 #define BX_reg(context) (*(WORD*)&((context)->sc_ebx))
87 #define CX_reg(context) (*(WORD*)&((context)->sc_ecx))
88 #define DX_reg(context) (*(WORD*)&((context)->sc_edx))
89 #define SI_reg(context) (*(WORD*)&((context)->sc_esi))
90 #define DI_reg(context) (*(WORD*)&((context)->sc_edi))
91 #define BP_reg(context) (*(WORD*)&((context)->sc_ebp))
93 #define AL_reg(context) (*(BYTE*)(&(context)->sc_eax))
94 #define AH_reg(context) (*(((BYTE*)(&(context)->sc_eax)+1)))
95 #define BL_reg(context) (*(BYTE*)(&(context)->sc_ebx))
96 #define BH_reg(context) (*(((BYTE*)(&(context)->sc_ebx)+1)))
97 #define CL_reg(context) (*(BYTE*)(&(context)->sc_ecx))
98 #define CH_reg(context) (*(((BYTE*)(&(context)->sc_ecx)+1)))
99 #define DL_reg(context) (*(BYTE*)(&(context)->sc_edx))
100 #define DH_reg(context) (*(((BYTE*)(&(context)->sc_edx)+1)))
102 #define CS_reg(context) ((context)->sc_cs)
103 #define DS_reg(context) ((context)->sc_ds)
104 #define ES_reg(context) ((context)->sc_es)
105 #define SS_reg(context) ((context)->sc_ss)
107 #ifdef linux
108 /* fs and gs are not supported on *BSD. Hopefully we won't need them. */
109 #define FS_reg(context) ((context)->sc_fs)
110 #define GS_reg(context) ((context)->sc_gs)
111 #endif
113 #ifndef __FreeBSD__
114 #define EFL_reg(context) ((context)->sc_eflags)
115 #define FL_reg(context) (*(WORD*)(&(context)->sc_eflags))
116 #else
117 #define EFL_reg(context) ((context)->sc_efl)
118 #define FL_reg(context) (*(WORD*)(&(context)->sc_efl))
119 #endif
121 #define EIP_reg(context) ((context)->sc_eip)
122 #define ESP_reg(context) ((context)->sc_esp)
124 #define IP_reg(context) (*(WORD*)(&(context)->sc_eip))
125 #define SP_reg(context) (*(WORD*)(&(context)->sc_esp))
127 #else /* __svr4__ || _SCO_DS */
129 #ifdef _SCO_DS
130 #define gregs regs
131 #endif
133 #define EAX_reg(context) ((context)->uc_mcontext.gregs[EAX])
134 #define EBX_reg(context) ((context)->uc_mcontext.gregs[EBX])
135 #define ECX_reg(context) ((context)->uc_mcontext.gregs[ECX])
136 #define EDX_reg(context) ((context)->uc_mcontext.gregs[EDX])
137 #define ESI_reg(context) ((context)->uc_mcontext.gregs[ESI])
138 #define EDI_reg(context) ((context)->uc_mcontext.gregs[EDI])
139 #define EBP_reg(context) ((context)->uc_mcontext.gregs[EBP])
141 #define AX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EAX]))
142 #define BX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EBX]))
143 #define CX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[ECX]))
144 #define DX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EDX]))
145 #define SI_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[ESI]))
146 #define DI_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EDI]))
147 #define BP_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EBP]))
149 #define AL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EAX]))
150 #define AH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EAX])+1)))
151 #define BL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EBX]))
152 #define BH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EBX])+1)))
153 #define CL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[ECX]))
154 #define CH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[ECX])+1)))
155 #define DL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EDX]))
156 #define DH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EDX])+1)))
158 #define CS_reg(context) ((context)->uc_mcontext.gregs[CS])
159 #define DS_reg(context) ((context)->uc_mcontext.gregs[DS])
160 #define ES_reg(context) ((context)->uc_mcontext.gregs[ES])
161 #define SS_reg(context) ((context)->uc_mcontext.gregs[SS])
163 #define FS_reg(context) ((context)->uc_mcontext.gregs[FS])
164 #define GS_reg(context) ((context)->uc_mcontext.gregs[GS])
167 #define EFL_reg(context) ((context)->uc_mcontext.gregs[EFL])
168 #define FL_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[EFL]))
171 #define EIP_reg(context) ((context)->uc_mcontext.gregs[EIP])
172 #ifdef R_ESP
173 #define ESP_reg(context) ((context)->uc_mcontext.gregs[R_ESP])
174 #else
175 #define ESP_reg(context) ((context)->uc_mcontext.gregs[ESP])
176 #endif
178 #define IP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[EIP]))
179 #ifdef R_ESP
180 #define SP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[R_ESP]))
181 #else
182 #define SP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[ESP]))
183 #endif
185 #endif /* __svr4__ || _SCO_DS */
187 #define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
188 #define RESET_CFLAG(context) (EFL_reg(context) &= 0xfffffffe)
190 #else /* ifndef WINELIB */
192 typedef void SIGCONTEXT;
193 #define WINE_DATA_SELECTOR 0x00
194 #define WINE_CODE_SELECTOR 0x00
196 #endif /* ifndef WINELIB */
198 #endif /* __WINE_REGISTERS_H */