X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-arm.h;h=589419e8f83c40e98fcf0495bbe6fc084ff69c17;hb=cdf08abc9dca1fd248f242477601ffc66660327b;hp=9cbd487c21de3357ffdba99c9482a93888553ecf;hpb=a097b5471761180c4aae2dab224ed9caeeae3e86;p=mono.git diff --git a/mono/mini/mini-arm.h b/mono/mini/mini-arm.h index 9cbd487c21d..589419e8f83 100644 --- a/mono/mini/mini-arm.h +++ b/mono/mini/mini-arm.h @@ -4,10 +4,34 @@ #include #include -#ifdef ARM_FPU_NONE +#if defined(ARM_FPU_NONE) || (defined(__ARM_EABI__) && !defined(ARM_FPU_VFP)) #define MONO_ARCH_SOFT_FLOAT 1 #endif +#if defined(__ARM_EABI__) +#if G_BYTE_ORDER == G_LITTLE_ENDIAN +#define ARM_ARCHITECTURE "armel" +#else +#define ARM_ARCHITECTURE "armeb" +#endif +#else +#define ARM_ARCHITECTURE "arm" +#endif + +#if defined(ARM_FPU_FPA) +#define ARM_FP_MODEL "fpa" +#elif defined(ARM_FPU_VFP) +#define ARM_FP_MODEL "vfp" +#elif defined(ARM_FPU_NONE) +#define ARM_FP_MODEL "soft-float" +#else +#error "At least one of ARM_FPU_NONE or ARM_FPU_FPA or ARM_FPU_VFP must be defined." +#endif + +#define MONO_ARCH_ARCHITECTURE ARM_ARCHITECTURE "," ARM_FP_MODEL + +#define MONO_ARCH_CPU_SPEC arm_cpu_desc + #if G_BYTE_ORDER == G_LITTLE_ENDIAN #define ARM_LSW_REG ARMREG_R0 #define ARM_MSW_REG ARMREG_R1 @@ -26,12 +50,16 @@ #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); @@ -121,8 +170,25 @@ typedef struct MonoCompileArch { #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,func) do { \ MONO_CONTEXT_SET_BP ((ctx), __builtin_frame_address (0)); \ + MONO_CONTEXT_SET_SP ((ctx), __builtin_frame_address (0)); \ MONO_CONTEXT_SET_IP ((ctx), (func)); \ } while (0) +#if __APPLE__ + #define UCONTEXT_REG_PC(ctx) ((ctx)->uc_mcontext->__ss.__pc) + #define UCONTEXT_REG_SP(ctx) ((ctx)->uc_mcontext->__ss.__sp) + #define UCONTEXT_REG_R4(ctx) ((ctx)->uc_mcontext->__ss.__r[4]) +#else + #define UCONTEXT_REG_PC(ctx) ((ctx)->sig_ctx.arm_pc) + #define UCONTEXT_REG_SP(ctx) ((ctx)->sig_ctx.arm_sp) + #define UCONTEXT_REG_R4(ctx) ((ctx)->sig_ctx.arm_r4) +#endif + +void +mono_arm_throw_exception (MonoObject *exc, unsigned long eip, unsigned long esp, gulong *int_regs, gdouble *fp_regs); + +void +mono_arm_throw_exception_by_token (guint32 type_token, unsigned long eip, unsigned long esp, gulong *int_regs, gdouble *fp_regs); + #endif /* __MONO_MINI_ARM_H__ */