X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-arm.h;h=589419e8f83c40e98fcf0495bbe6fc084ff69c17;hb=cdf08abc9dca1fd248f242477601ffc66660327b;hp=a70a97d8836b7fdadef3ebe8071607a3d05cd9cc;hpb=f99ce750ee781a2584e849a0264300fa4d99aaaa;p=mono.git diff --git a/mono/mini/mini-arm.h b/mono/mini/mini-arm.h index a70a97d8836..589419e8f83 100644 --- a/mono/mini/mini-arm.h +++ b/mono/mini/mini-arm.h @@ -4,6 +4,34 @@ #include #include +#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 @@ -22,23 +50,33 @@ #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); @@ -110,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__ */