1 #ifndef __MONO_MINI_X86_H__
2 #define __MONO_MINI_X86_H__
4 #include <mono/arch/x86/x86-codegen.h>
7 /* use SIG* defines if possible */
12 /* sigcontext surrogate */
25 typedef void (* MonoW32ExceptionHandler) (int);
26 void win32_seh_init(void);
27 void win32_seh_cleanup(void);
28 void win32_seh_set_handler(int type, MonoW32ExceptionHandler handler);
42 LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep);
44 #endif /* PLATFORM_WIN32 */
46 #define MONO_MAX_IREGS 8
47 #define MONO_MAX_FREGS 6
49 #define MONO_ARCH_FRAME_ALIGNMENT 4
51 /* fixme: align to 16byte instead of 32byte (we align to 32byte to get
52 * reproduceable results for benchmarks */
53 #define MONO_ARCH_CODE_ALIGNMENT 32
55 #define MONO_ARCH_BASEREG X86_EBP
56 #define MONO_ARCH_RETREG1 X86_EAX
57 #define MONO_ARCH_RETREG2 X86_EDX
59 #define MONO_ARCH_ENCODE_LREG(r1,r2) (r1 | (r2<<3))
61 #define inst_dreg_low dreg&7
62 #define inst_dreg_high dreg>>3
63 #define inst_sreg1_low sreg1&7
64 #define inst_sreg1_high sreg1>>3
65 #define inst_sreg2_low sreg2&7
66 #define inst_sreg2_high sreg2>>3
69 gpointer previous_lmf;
79 typedef struct MonoCompileArch {
82 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
83 # define SC_EAX sc_eax
84 # define SC_EBX sc_ebx
85 # define SC_ECX sc_ecx
86 # define SC_EDX sc_edx
87 # define SC_EBP sc_ebp
88 # define SC_EIP sc_eip
89 # define SC_ESP sc_esp
90 # define SC_EDI sc_edi
91 # define SC_ESI sc_esi
104 typedef struct sigcontext MonoContext;
106 #define MONO_CONTEXT_SET_IP(ctx,ip) do { (ctx)->SC_EIP = (long)(ip); } while (0);
107 #define MONO_CONTEXT_SET_BP(ctx,bp) do { (ctx)->SC_EBP = (long)(bp); } while (0);
108 #define MONO_CONTEXT_SET_SP(ctx,esp) do { (ctx)->SC_ESP = (long)(esp); } while (0);
110 #define MONO_CONTEXT_GET_IP(ctx) ((gpointer)((ctx)->SC_EIP))
111 #define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->SC_EBP))
112 #define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->SC_ESP))
114 #ifndef PLATFORM_WIN32
115 #ifdef HAVE_WORKING_SIGALTSTACK
116 #define MONO_ARCH_SIGSEGV_ON_ALTSTACK
117 /* NetBSD doesn't define SA_STACK */
119 #define SA_STACK SA_ONSTACK
125 #define MONO_ARCH_BIGMUL_INTRINS 1
127 #endif /* __MONO_MINI_X86_H__ */