2007-08-30 Jonathan Chambers <joncham@gmail.com>
[mono.git] / mono / mini / mini-arm.h
index a70a97d8836b7fdadef3ebe8071607a3d05cd9cc..1e4889c04c2953b6b9c66fb8e0b633febb72088d 100644 (file)
@@ -4,6 +4,12 @@
 #include <mono/arch/arm/arm-codegen.h>
 #include <glib.h>
 
+#if defined(ARM_FPU_NONE) || defined(ARM_FPU_VFP) || defined(__ARM_EABI__)
+#define MONO_ARCH_SOFT_FLOAT 1
+#endif
+
+#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,7 +28,6 @@
 #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<<ARMREG_R0) | (1<<ARMREG_R1) | (1<<ARMREG_R2) | (1<<ARMREG_R3) | (1<<ARMREG_IP))
 #define MONO_ARCH_CALLEE_SAVED_REGS ((1<<ARMREG_V1) | (1<<ARMREG_V2) | (1<<ARMREG_V3) | (1<<ARMREG_V4) | (1<<ARMREG_V5) | (1<<ARMREG_V6) | (1<<ARMREG_V7))
 #define MONO_ARCH_USE_FPSTACK FALSE
 #define MONO_ARCH_FPSTACK_SIZE 0
 
-#define MONO_ARCH_INST_FIXED_REG(desc) (((desc) == 'l')? ARM_LSW_REG: -1)
 #define MONO_ARCH_INST_SREG2_MASK(ins) (0)
 
+#ifdef MONO_ARCH_SOFT_FLOAT
+#define MONO_ARCH_INST_FIXED_REG(desc) (((desc) == 'l' || (desc == 'f') || (desc == 'g'))? ARM_LSW_REG: -1)
+#define MONO_ARCH_INST_IS_REGPAIR(desc) ((desc) == 'l' || (desc) == 'L' || (desc) == 'f' || (desc) == 'g')
+#define MONO_ARCH_INST_IS_FLOAT(desc) (FALSE)
+#else
+#define MONO_ARCH_INST_FIXED_REG(desc) (((desc) == 'l')? ARM_LSW_REG: -1)
 #define MONO_ARCH_INST_IS_REGPAIR(desc) (desc == 'l' || desc == 'L')
-#define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (desc == 'l' ? ARM_MSW_REG : -1)
 #define MONO_ARCH_INST_IS_FLOAT(desc) ((desc == 'f') || (desc == 'g'))
+#endif
+#define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) (desc == 'l'  || (desc == 'f') || (desc == 'g')? ARM_MSW_REG : -1)
 
 #define MONO_ARCH_FRAME_ALIGNMENT 8
 
@@ -79,6 +90,7 @@ typedef struct {
 } MonoContext;
 
 typedef struct MonoCompileArch {
+       int dummy;
 } MonoCompileArch;
 
 #define MONO_ARCH_EMULATE_FCONV_TO_I8 1
@@ -110,6 +122,7 @@ 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)