Fixes PR63.
authorChristian Thalinger <twisti@complang.tuwien.ac.at>
Wed, 11 Jun 2008 09:04:39 +0000 (11:04 +0200)
committerChristian Thalinger <twisti@complang.tuwien.ac.at>
Wed, 11 Jun 2008 09:04:39 +0000 (11:04 +0200)
* src/vm/jit/arm/emit.c (emit_verbosecall_enter) [ENABLE_SOFTFLOAT]:
Save and restore floating point types correctly.

src/vm/jit/arm/emit.c

index 4caac6dd7a2e01321fd6428b92dd50be3eba98a5..293731cfc473c70f509f46f2cbaf1f5fe3e475f9 100644 (file)
@@ -634,6 +634,19 @@ void emit_verbosecall_enter(jitdata *jd)
                if (!md->params[i].inmemory) {
                        s = md->params[i].regoff;
 
+#if defined(ENABLE_SOFTFLOAT)
+                       switch (md->paramtypes[i].type) {
+                       case TYPE_INT:
+                       case TYPE_FLT:
+                       case TYPE_ADR:
+                               M_IST(s, REG_SP, i * 8);
+                               break;
+                       case TYPE_LNG:
+                       case TYPE_DBL:
+                               M_LST(s, REG_SP, i * 8);
+                               break;
+                       }
+#else
                        switch (md->paramtypes[i].type) {
                        case TYPE_ADR:
                        case TYPE_INT:
@@ -649,6 +662,7 @@ void emit_verbosecall_enter(jitdata *jd)
                                M_DST(s, REG_SP, i * 8);
                                break;
                        }
+#endif
                }
        }
 
@@ -664,6 +678,19 @@ void emit_verbosecall_enter(jitdata *jd)
                if (!md->params[i].inmemory) {
                        s = md->params[i].regoff;
 
+#if defined(ENABLE_SOFTFLOAT)
+                       switch (md->paramtypes[i].type) {
+                       case TYPE_INT:
+                       case TYPE_FLT:
+                       case TYPE_ADR:
+                               M_ILD(s, REG_SP, i * 8);
+                               break;
+                       case TYPE_LNG:
+                       case TYPE_DBL:
+                               M_LLD(s, REG_SP, i * 8);
+                               break;
+                       }
+#else
                        switch (md->paramtypes[i].type) {
                        case TYPE_ADR:
                        case TYPE_INT:
@@ -679,6 +706,7 @@ void emit_verbosecall_enter(jitdata *jd)
                                M_DLD(s, REG_SP, i * 8);
                                break;
                        }
+#endif
                }
        }