132 lines
5.7 KiB
C
132 lines
5.7 KiB
C
/*
|
|
* Register definitions
|
|
*
|
|
* Copyright 1995 Alexandre Julliard
|
|
*/
|
|
|
|
#ifndef __WINE_REGISTERS_H
|
|
#define __WINE_REGISTERS_H
|
|
|
|
#include <windows.h>
|
|
#include "wine.h"
|
|
|
|
#if !defined(__svr4__) && !defined(_SCO_DS)
|
|
|
|
#define EAX_reg(context) ((context)->sc_eax)
|
|
#define EBX_reg(context) ((context)->sc_ebx)
|
|
#define ECX_reg(context) ((context)->sc_ecx)
|
|
#define EDX_reg(context) ((context)->sc_edx)
|
|
#define ESI_reg(context) ((context)->sc_esi)
|
|
#define EDI_reg(context) ((context)->sc_edi)
|
|
#define EBP_reg(context) ((context)->sc_ebp)
|
|
|
|
#define AX_reg(context) (*(WORD*)&((context)->sc_eax))
|
|
#define BX_reg(context) (*(WORD*)&((context)->sc_ebx))
|
|
#define CX_reg(context) (*(WORD*)&((context)->sc_ecx))
|
|
#define DX_reg(context) (*(WORD*)&((context)->sc_edx))
|
|
#define SI_reg(context) (*(WORD*)&((context)->sc_esi))
|
|
#define DI_reg(context) (*(WORD*)&((context)->sc_edi))
|
|
#define BP_reg(context) (*(WORD*)&((context)->sc_ebp))
|
|
|
|
#define AL_reg(context) (*(BYTE*)(&(context)->sc_eax))
|
|
#define AH_reg(context) (*(((BYTE*)(&(context)->sc_eax)+1)))
|
|
#define BL_reg(context) (*(BYTE*)(&(context)->sc_ebx))
|
|
#define BH_reg(context) (*(((BYTE*)(&(context)->sc_ebx)+1)))
|
|
#define CL_reg(context) (*(BYTE*)(&(context)->sc_ecx))
|
|
#define CH_reg(context) (*(((BYTE*)(&(context)->sc_ecx)+1)))
|
|
#define DL_reg(context) (*(BYTE*)(&(context)->sc_edx))
|
|
#define DH_reg(context) (*(((BYTE*)(&(context)->sc_edx)+1)))
|
|
|
|
#define CS_reg(context) ((context)->sc_cs)
|
|
#define DS_reg(context) ((context)->sc_ds)
|
|
#define ES_reg(context) ((context)->sc_es)
|
|
#define SS_reg(context) ((context)->sc_ss)
|
|
|
|
#ifdef linux
|
|
/* fs and gs are not supported on *BSD. Hopefully we won't need them. */
|
|
#define FS_reg(context) ((context)->sc_fs)
|
|
#define GS_reg(context) ((context)->sc_gs)
|
|
#endif
|
|
|
|
#ifndef __FreeBSD__
|
|
#define EFL_reg(context) ((context)->sc_eflags)
|
|
#define FL_reg(context) (*(WORD*)(&(context)->sc_eflags))
|
|
#else
|
|
#define EFL_reg(context) ((context)->sc_efl)
|
|
#define FL_reg(context) (*(WORD*)(&(context)->sc_efl))
|
|
#endif
|
|
|
|
#define EIP_reg(context) ((context)->sc_eip)
|
|
#define ESP_reg(context) ((context)->sc_esp)
|
|
|
|
#define IP_reg(context) (*(WORD*)(&(context)->sc_eip))
|
|
#define SP_reg(context) (*(WORD*)(&(context)->sc_esp))
|
|
|
|
#define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
|
|
#define RESET_CFLAG(context) (EFL_reg(context) &= 0xfffffffe)
|
|
|
|
#else /* __svr4__ || _SCO_DS */
|
|
|
|
#ifdef _SCO_DS
|
|
#define gregs regs
|
|
#endif
|
|
|
|
#define EAX_reg(context) ((context)->uc_mcontext.gregs[EAX])
|
|
#define EBX_reg(context) ((context)->uc_mcontext.gregs[EBX])
|
|
#define ECX_reg(context) ((context)->uc_mcontext.gregs[ECX])
|
|
#define EDX_reg(context) ((context)->uc_mcontext.gregs[EDX])
|
|
#define ESI_reg(context) ((context)->uc_mcontext.gregs[ESI])
|
|
#define EDI_reg(context) ((context)->uc_mcontext.gregs[EDI])
|
|
#define EBP_reg(context) ((context)->uc_mcontext.gregs[EBP])
|
|
|
|
#define AX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EAX]))
|
|
#define BX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EBX]))
|
|
#define CX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[ECX]))
|
|
#define DX_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EDX]))
|
|
#define SI_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[ESI]))
|
|
#define DI_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EDI]))
|
|
#define BP_reg(context) (*(WORD*)&((context)->uc_mcontext.gregs[EBP]))
|
|
|
|
#define AL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EAX]))
|
|
#define AH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EAX])+1)))
|
|
#define BL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EBX]))
|
|
#define BH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EBX])+1)))
|
|
#define CL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[ECX]))
|
|
#define CH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[ECX])+1)))
|
|
#define DL_reg(context) (*(BYTE*)(&(context)->uc_mcontext.gregs[EDX]))
|
|
#define DH_reg(context) (*(((BYTE*)(&(context)->uc_mcontext.gregs[EDX])+1)))
|
|
|
|
#define CS_reg(context) ((context)->uc_mcontext.gregs[CS])
|
|
#define DS_reg(context) ((context)->uc_mcontext.gregs[DS])
|
|
#define ES_reg(context) ((context)->uc_mcontext.gregs[ES])
|
|
#define SS_reg(context) ((context)->uc_mcontext.gregs[SS])
|
|
|
|
#define FS_reg(context) ((context)->uc_mcontext.gregs[FS])
|
|
#define GS_reg(context) ((context)->uc_mcontext.gregs[GS])
|
|
|
|
|
|
#define EFL_reg(context) ((context)->uc_mcontext.gregs[EFL])
|
|
#define FL_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[EFL]))
|
|
|
|
|
|
#define EIP_reg(context) ((context)->uc_mcontext.gregs[EIP])
|
|
#ifdef R_ESP
|
|
#define ESP_reg(context) ((context)->uc_mcontext.gregs[R_ESP])
|
|
#else
|
|
#define ESP_reg(context) ((context)->uc_mcontext.gregs[ESP])
|
|
#endif
|
|
|
|
#define IP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[EIP]))
|
|
#ifdef R_ESP
|
|
#define SP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[R_ESP]))
|
|
#else
|
|
#define SP_reg(context) (*(WORD*)(&(context)->uc_mcontext.gregs[ESP]))
|
|
#endif
|
|
|
|
#define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
|
|
#define RESET_CFLAG(context) (EFL_reg(context) &= 0xfffffffe)
|
|
|
|
#endif /* __svr4__ || _SCO_DS */
|
|
|
|
#endif /* __WINE_REGISTERS_H */
|