Fixes icedtea/PR 513.
[cacao.git] / src / vm / jit / arm / codegen.h
index f7fd56ab04b490d4495c40ef69ffd09e60d7ac93..c18e324a9f6af1ea14d77d7470eb7a3dce93097a 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/arm/codegen.h - code generation macros and definitions for ARM
 
-   Copyright (C) 1996-2005, 2006, 2007, 2008
+   Copyright (C) 1996-2005, 2006, 2007, 2008, 2010
    CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
 
    This file is part of CACAO.
@@ -961,11 +961,11 @@ do { \
 
 #define M_STR(d, base, offset) \
 do { \
-       assert((d) != REG_ITMP3); \
        CHECK_OFFSET(offset, 0x0fffff); \
        if (IS_OFFSET(offset, 0x000fff)) { \
                M_STR_INTERN(d, base, offset); \
        } else { \
+               assert((d) != REG_ITMP3); \
                if ((offset) > 0) { \
                        M_ADD_IMM(REG_ITMP3, base, IMM_ROTL((offset) >> 12, 6)); \
                        M_STR_INTERN(d, REG_ITMP3, (offset) & 0x000fff); \
@@ -978,8 +978,6 @@ do { \
 
 #define M_STRD(d, base, offset) \
 do { \
-       assert(GET_LOW_REG(d) != REG_ITMP3); \
-       assert(GET_HIGH_REG(d) != REG_ITMP3); \
        CHECK_OFFSET(offset, 0x0fffff - 4); \
        if (IS_OFFSET(offset, 0x000fff - 4)) { \
                M_STRD_INTERN(d,base,offset); \
@@ -987,6 +985,8 @@ do { \
                dolog("M_STRD: this offset seems to be complicated (%d)", offset); \
                assert(0); \
        } else { \
+               assert(GET_LOW_REG(d) != REG_ITMP3); \
+               assert(GET_HIGH_REG(d) != REG_ITMP3); \
                if ((offset) > 0) { \
                        M_ADD_IMM(REG_ITMP3, base, IMM_ROTL((offset) >> 12, 6)); \
                        M_STRD_INTERN(d, REG_ITMP3, (offset) & 0x000fff); \
@@ -1164,6 +1164,15 @@ do { \
 #define M_FST(a,b,c)                    M_STFS(a,b,c)
 #define M_DST(a,b,c)                    M_STFD(a,b,c)
 
+#else /* !defined(ENABLE_SOFTFLOAT) */
+
+#define M_FMOV(s,d)                     M_MOV((d), (s))
+#define M_DMOV(s,d) \
+       { \
+               M_MOV(GET_LOW_REG(d), GET_LOW_REG(s)); \
+               M_MOV(GET_HIGH_REG(d), GET_HIGH_REG(s)); \
+       }
+
 #endif /* !defined(ENABLE_SOFTFLOAT) */