#ifndef __MONO_MINI_ARM_H__ #define __MONO_MINI_ARM_H__ #include #include #if G_BYTE_ORDER == G_LITTLE_ENDIAN #define ARM_LSW_REG ARMREG_R0 #define ARM_MSW_REG ARMREG_R1 #else #define ARM_LSW_REG ARMREG_R1 #define ARM_MSW_REG ARMREG_R0 #endif #define MONO_MAX_IREGS 16 #define MONO_MAX_FREGS 16 #define MONO_SAVED_GREGS 10 /* r4-411, ip, lr */ #define MONO_SAVED_FREGS 8 /* r4-r11, ip, lr: registers saved in the LMF and MonoContext */ #define MONO_ARM_REGSAVE_MASK 0x5ff0 /* Parameters used by the register allocator */ #define MONO_ARCH_HAS_XP_LOCAL_REGALLOC #define MONO_ARCH_CALLEE_REGS ((1<eip = (int)ip; } while (0); #define MONO_CONTEXT_SET_BP(ctx,bp) do { (ctx)->ebp = (int)bp; } while (0); #define MONO_CONTEXT_SET_SP(ctx,bp) do { (ctx)->esp = (int)bp; } while (0); #define MONO_CONTEXT_GET_IP(ctx) ((gpointer)((ctx)->eip)) #define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->ebp)) #define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->esp)) #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,func) do { \ MONO_CONTEXT_SET_BP ((ctx), __builtin_frame_address (0)); \ MONO_CONTEXT_SET_IP ((ctx), (func)); \ } while (0) #endif /* __MONO_MINI_ARM_H__ */