2004-04-28 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mono / mini / mini-x86.h
1 #ifndef __MONO_MINI_X86_H__
2 #define __MONO_MINI_X86_H__
3
4 #include <mono/arch/x86/x86-codegen.h>
5
6 #define MONO_MAX_IREGS 8
7 #define MONO_MAX_FREGS 6
8
9 #define MONO_ARCH_FRAME_ALIGNMENT 4
10
11 /* fixme: align to 16byte instead of 32byte (we align to 32byte to get 
12  * reproduceable results for benchmarks */
13 #define MONO_ARCH_CODE_ALIGNMENT 32
14
15 #define MONO_ARCH_BASEREG X86_EBP
16 #define MONO_ARCH_RETREG1 X86_EAX
17 #define MONO_ARCH_RETREG2 X86_EDX
18
19 #define MONO_ARCH_ENCODE_LREG(r1,r2) (r1 | (r2<<3))
20
21 #define inst_dreg_low dreg&7 
22 #define inst_dreg_high dreg>>3
23 #define inst_sreg1_low sreg1&7 
24 #define inst_sreg1_high sreg1>>3
25 #define inst_sreg2_low sreg2&7 
26 #define inst_sreg2_high sreg2>>3
27
28 struct MonoLMF {
29         gpointer    previous_lmf;
30         gpointer    lmf_addr;
31         MonoMethod *method;
32         guint32     ebp;
33         guint32     esi;
34         guint32     edi;
35         guint32     ebx;
36         guint32     eip;
37 };
38
39 typedef struct MonoCompileArch {
40 } MonoCompileArch;
41
42 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
43 # define SC_EAX sc_eax
44 # define SC_EBX sc_ebx
45 # define SC_ECX sc_ecx
46 # define SC_EDX sc_edx
47 # define SC_EBP sc_ebp
48 # define SC_EIP sc_eip
49 # define SC_ESP sc_esp
50 # define SC_EDI sc_edi
51 # define SC_ESI sc_esi
52 #else
53 # define SC_EAX eax
54 # define SC_EBX ebx
55 # define SC_ECX ecx
56 # define SC_EDX edx
57 # define SC_EBP ebp
58 # define SC_EIP eip
59 # define SC_ESP esp
60 # define SC_EDI edi
61 # define SC_ESI esi
62 #endif
63
64 typedef struct sigcontext MonoContext;
65
66 #define MONO_CONTEXT_SET_IP(ctx,ip) do { (ctx)->SC_EIP = (long)(ip); } while (0); 
67 #define MONO_CONTEXT_SET_BP(ctx,bp) do { (ctx)->SC_EBP = (long)(bp); } while (0); 
68 #define MONO_CONTEXT_SET_SP(ctx,esp) do { (ctx)->SC_ESP = (long)(esp); } while (0); 
69
70 #define MONO_CONTEXT_GET_IP(ctx) ((gpointer)((ctx)->SC_EIP))
71 #define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->SC_EBP))
72 #define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->SC_ESP))
73
74 #ifndef PLATFORM_WIN32
75
76 #ifdef HAVE_WORKING_SIGALTSTACK
77 #define MONO_ARCH_SIGSEGV_ON_ALTSTACK
78 /* NetBSD doesn't define SA_STACK */
79 #ifndef SA_STACK
80 #define SA_STACK SA_ONSTACK
81 #endif
82 #endif
83
84 #endif
85
86 #define MONO_ARCH_BIGMUL_INTRINS 1
87
88 #endif /* __MONO_MINI_X86_H__ */