Release 960114
[wine/gsoc-2012-control.git] / include / registers.h
blob93a9567ce53bdeb6832633e90087b020996687fb
1 /*
2 * Register definitions
4 * Copyright 1995 Alexandre Julliard
5 */
7 #ifndef __WINE_REGISTERS_H
8 #define __WINE_REGISTERS_H
10 #include <windows.h>
11 #include "wine.h"
13 #ifndef __svr4__
15 #define EAX_reg(context) ((context)->sc_eax)
16 #define EBX_reg(context) ((context)->sc_ebx)
17 #define ECX_reg(context) ((context)->sc_ecx)
18 #define EDX_reg(context) ((context)->sc_edx)
19 #define ESI_reg(context) ((context)->sc_esi)
20 #define EDI_reg(context) ((context)->sc_edi)
21 #define EBP_reg(context) ((context)->sc_ebp)
23 #define AX_reg(context) (*(WORD*)&((context)->sc_eax))
24 #define BX_reg(context) (*(WORD*)&((context)->sc_ebx))
25 #define CX_reg(context) (*(WORD*)&((context)->sc_ecx))
26 #define DX_reg(context) (*(WORD*)&((context)->sc_edx))
27 #define SI_reg(context) (*(WORD*)&((context)->sc_esi))
28 #define DI_reg(context) (*(WORD*)&((context)->sc_edi))
29 #define BP_reg(context) (*(WORD*)&((context)->sc_ebp))
31 #define AL_reg(context) (*(BYTE*)(&(context)->sc_eax))
32 #define AH_reg(context) (*(((BYTE*)(&(context)->sc_eax)+1)))
33 #define BL_reg(context) (*(BYTE*)(&(context)->sc_ebx))
34 #define BH_reg(context) (*(((BYTE*)(&(context)->sc_ebx)+1)))
35 #define CL_reg(context) (*(BYTE*)(&(context)->sc_ecx))
36 #define CH_reg(context) (*(((BYTE*)(&(context)->sc_ecx)+1)))
37 #define DL_reg(context) (*(BYTE*)(&(context)->sc_edx))
38 #define DH_reg(context) (*(((BYTE*)(&(context)->sc_edx)+1)))
40 #define CS_reg(context) ((context)->sc_cs)
41 #define DS_reg(context) ((context)->sc_ds)
42 #define ES_reg(context) ((context)->sc_es)
43 #define SS_reg(context) ((context)->sc_ss)
45 #ifdef linux
46 /* fs and gs are not supported on *BSD. Hopefully we won't need them. */
47 #define FS_reg(context) ((context)->sc_fs)
48 #define GS_reg(context) ((context)->sc_gs)
49 #endif
51 #ifndef __FreeBSD__
52 #define EFL_reg(context) ((context)->sc_eflags)
53 #define FL_reg(context) (*(WORD*)(&(context)->sc_eflags))
54 #else
55 #define EFL_reg(context) ((context)->sc_efl)
56 #define FL_reg(context) (*(WORD*)(&(context)->sc_efl))
57 #endif
59 #define EIP_reg(context) ((context)->sc_eip)
60 #define ESP_reg(context) ((context)->sc_esp)
62 #define IP_reg(context) (*(WORD*)(&(context)->sc_eip))
63 #define SP_reg(context) (*(WORD*)(&(context)->sc_esp))
65 #define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
66 #define RESET_CFLAG(context) (EFL_reg(context) &= 0xfffffffe)
68 #else /* __svr4__ */
70 #define EAX_reg(context) ((context)->uc_mcontext.gregs[EAX])
71 #define EBX_reg(context) ((context)->uc_mcontext.gregs[EBX])
72 #define ECX_reg(context) ((context)->uc_mcontext.gregs[ECX])
73 #define EDX_reg(context) ((context)->uc_mcontext.gregs[EDX])
74 #define ESI_reg(context) ((context)->uc_mcontext.gregs[ESI])
75 #define EDI_reg(context) ((context)->uc_mcontext.gregs[EDI])
76 #define EBP_reg(context) ((context)->uc_mcontext.gregs[EBP])
78 #define AX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EAX]))
79 #define BX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EBX]))
80 #define CX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[ECX]))
81 #define DX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EDX]))
82 #define SI_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[ESI]))
83 #define DI_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EDI]))
84 #define BP_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EBP]))
86 #define AL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EAX]))
87 #define AH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EAX])+1)))
88 #define BL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EBX]))
89 #define BH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EBX])+1)))
90 #define CL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[ECX]))
91 #define CH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[ECX])+1)))
92 #define DL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EDX]))
93 #define DH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EDX])+1)))
95 #define CS_reg(context) ((context)->uc_mcontext.gregs[CS])
96 #define DS_reg(context) ((context)->uc_mcontext.gregs[DS])
97 #define ES_reg(context) ((context)->uc_mcontext.gregs[ES])
98 #define SS_reg(context) ((context)->uc_mcontext.gregs[SS])
100 #define FS_reg(context) ((context)->uc_mcontext.gregs[FS])
101 #define GS_reg(context) ((context)->uc_mcontext.gregs[GS])
104 #define EFL_reg(context) ((context)->uc_mcontext.gregs[EFL])
105 #define FL_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[EFL]))
108 #define EIP_reg(context) ((context)->uc_mcontext.gregs[EIP])
109 #ifdef R_ESP
110 #define ESP_reg(context) ((context)->uc_mcontext.gregs[R_ESP])
111 #else
112 #define ESP_reg(context) ((context)->uc_mcontext.gregs[ESP])
113 #endif
115 #define IP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[EIP]))
116 #ifdef R_ESP
117 #define SP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[R_ESP]))
118 #else
119 #define SP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[ESP]))
120 #endif
122 #define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
123 #define RESET_CFLAG(context) (EFL_reg(context) &= 0xfffffffe)
125 #endif /* __svr4__ */
127 #endif /* __WINE_REGISTERS_H */