1 #ifndef __MONO_MINI_SPARC_H__
2 #define __MONO_MINI_SPARC_H__
4 #include <mono/arch/sparc/sparc-codegen.h>
8 #define MONO_MAX_IREGS 32
9 #define MONO_MAX_FREGS 32
11 #define MONO_ARCH_FRAME_ALIGNMENT 8
13 #define MONO_ARCH_CODE_ALIGNMENT 32
15 #define MONO_ARCH_BASEREG sparc_fp
16 #define MONO_ARCH_RETREG1 sparc_i0
19 gpointer previous_lmf;
27 typedef struct MonoCompileArch {
29 guint32 localloc_offset;
32 #define MONO_ARCH_USE_SIGACTION 1
34 #define MONO_ARCH_EMULATE_FCONV_TO_I8 1
35 #define MONO_ARCH_EMULATE_LCONV_TO_R8 1
36 #define MONO_ARCH_EMULATE_LCONV_TO_R4 1
37 #define MONO_ARCH_EMULATE_CONV_R8_UN 1
38 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
39 #define MONO_ARCH_EMULATE_FREM 1
42 /* assume Sun compiler if not GCC */
43 static void * __builtin_return_address(int depth)
47 asm("be retAddr_End");
49 asm("retAddr_Start:");
50 asm("sub %i0, 1, %i0");
52 asm("bne retAddr_Start");
53 asm("ld [%l0+56], %l0");
55 asm("ld [%l0+60], %i0");
58 static void * __builtin_frame_address(int depth)
62 asm("be frameAddr_End");
64 asm("frameAddr_Start:");
65 asm("sub %i0, 1, %i0");
67 asm("bne frameAddr_Start");
68 asm("ld [%l0+56], %l0");
69 asm("frameAddr_End:");
70 asm("ld [%l0+56], %i0");
74 gboolean mono_sparc_is_virtual_call (guint32 *code);
76 gpointer* mono_sparc_get_vcall_slot_addr (guint32 *code, guint32 *fp);
78 void mono_sparc_flushw (void);
80 gboolean mono_sparc_is_v9 (void);
84 guint32* mono_sparc_emit_save_lmf (guint32* code, guint32 lmf_offset);
86 guint32* mono_sparc_emit_restore_lmf (guint32 *code, guint32 lmf_offset);
88 #endif /* __MONO_MINI_SPARC_H__ */