1 #ifndef __MONO_MINI_PPC_H__
2 #define __MONO_MINI_PPC_H__
4 #include <mono/arch/ppc/ppc-codegen.h>
7 #define MONO_MAX_IREGS 32
8 #define MONO_MAX_FREGS 32
10 #define MONO_SAVED_GREGS 19
11 #define MONO_SAVED_FREGS 18
13 #define MONO_ARCH_FRAME_ALIGNMENT 4
15 /* fixme: align to 16byte instead of 32byte (we align to 32byte to get
16 * reproduceable results for benchmarks */
17 #define MONO_ARCH_CODE_ALIGNMENT 32
19 void ppc_patch (guchar *code, guchar *target);
22 gpointer previous_lmf;
27 gulong iregs [MONO_SAVED_GREGS]; /* 13..31 */
28 gdouble fregs [MONO_SAVED_FREGS]; /* 14..31 */
31 /* we define our own structure and we'll copy the data
32 * from sigcontext/ucontext/mach when we need it.
33 * This also makes us save stack space and time when copying
34 * We might also want to add an additional field to propagate
35 * the original context from the signal handler.
40 gulong regs [MONO_SAVED_GREGS];
41 double fregs [MONO_SAVED_FREGS];
44 typedef struct MonoCompileArch {
47 #define MONO_ARCH_EMULATE_FCONV_TO_I8 1
48 #define MONO_ARCH_EMULATE_LCONV_TO_R8 1
49 #define MONO_ARCH_EMULATE_LCONV_TO_R4 1
50 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
51 #define MONO_ARCH_EMULATE_FREM 1
52 #define MONO_ARCH_BIGMUL_INTRINS 1
54 /* deal with some of the ABI differences here */
56 #define PPC_RET_ADDR_OFFSET 8
57 #define PPC_STACK_ALIGNMENT 16
58 #define PPC_STACK_PARAM_OFFSET 24
59 #define PPC_MINIMAL_STACK_SIZE 24
60 #define PPC_FIRST_ARG_REG ppc_r3
61 #define PPC_LAST_ARG_REG ppc_r10
62 #define PPC_FIRST_FPARG_REG ppc_f1
63 #define PPC_LAST_FPARG_REG ppc_f13
64 #define PPC_PASS_STRUCTS_BY_VALUE 1
67 #define PPC_RET_ADDR_OFFSET 4
68 #define PPC_STACK_ALIGNMENT 16
69 #define PPC_STACK_PARAM_OFFSET 8
70 #define PPC_MINIMAL_STACK_SIZE 8
71 #define PPC_FIRST_ARG_REG ppc_r3
72 #define PPC_LAST_ARG_REG ppc_r10
73 #define PPC_FIRST_FPARG_REG ppc_f1
74 #define PPC_LAST_FPARG_REG ppc_f8
75 /* set the next to 0 once inssel-ppc.brg is updated */
76 #define PPC_PASS_STRUCTS_BY_VALUE 1
77 #define PPC_SMALL_RET_STRUCT_IN_REG 1
81 #define MONO_ARCH_USE_SIGACTION 1
83 #define PPC_NUM_REG_ARGS (PPC_LAST_ARG_REG-PPC_FIRST_ARG_REG+1)
84 #define PPC_NUM_REG_FPARGS (PPC_LAST_FPARG_REG-PPC_FIRST_FPARG_REG+1)
86 #endif /* __MONO_MINI_PPC_H__ */