Wed Apr 21 16:38:28 CEST 2004 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / mini / mini-s390.h
1 #ifndef __MONO_MINI_S390_H__
2 #define __MONO_MINI_S390_H__
3
4 #include <mono/arch/s390/s390-codegen.h>
5
6 #define MONO_MAX_IREGS 16
7 #define MONO_MAX_FREGS 16
8
9 #define MONO_ARCH_FRAME_ALIGNMENT 8
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 struct MonoLMF {
16         gpointer    previous_lmf;
17         gpointer    lmf_addr;
18         MonoMethod *method;
19         gulong      ebp;
20         gulong      eip;
21 };
22
23 typedef struct MonoCompileArch {
24 } MonoCompileArch;
25
26 #define MONO_ARCH_EMULATE_FCONV_TO_I8 1
27 #define MONO_ARCH_EMULATE_LCONV_TO_R8 1
28 #define MONO_ARCH_EMULATE_LCONV_TO_R4 1
29 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
30 #define MONO_ARCH_EMULATE_LMUL 1
31
32 #define S390_STACK_ALIGNMENT             8
33 #define S390_FIRST_ARG_REG              s390_r2
34 #define S390_LAST_ARG_REG               s390_r6
35 #define S390_FIRST_FPARG_REG            s390_f0
36 #define S390_LAST_FPARG_REG             s390_f2
37 #define S390_PASS_STRUCTS_BY_VALUE       1
38 #define S390_SMALL_RET_STRUCT_IN_REG     1
39
40 #define S390_NUM_REG_ARGS (S390_LAST_ARG_REG-S390_FIRST_ARG_REG+1)
41 #define S390_NUM_REG_FPARGS (S390_LAST_FPARG_REG-S390_FIRST_FPARG_REG)
42
43 #define S390_OFFSET(b, t)       (guchar *) ((gint32) (b) - (gint32) (t))
44 #define S390_RELATIVE(b, t)     (guchar *) ((((gint32) (b) - (gint32) (t))) / 2)
45
46 #define CODEPTR(c, o) (o) = (short *) ((guint32) c - 2)
47 #define PTRSLOT(c, o) *(o) = (short) ((guint32) c - (guint32) (o) + 2)/2
48
49 #define S390_CC_EQ                      8
50 #define S390_ALIGN(v, a)        (((a) > 0 ? (((v) + ((a) - 1)) & ~((a) - 1)) : (v)))
51
52 static void inline
53 s390_patch (guchar *code, gint32 target)
54 {
55         gint32 *offset = (gint32 *) code;
56         
57         if (target != 00) {
58                 *offset = target;
59         }
60 }
61
62 #endif /* __MONO_MINI_S390_H__ */