diff -r ec144df42ca1 src/vm/jit/arm/emit.c
--- a/src/vm/jit/arm/emit.c	Thu Apr 10 17:40:16 2008 +0200
+++ b/src/vm/jit/arm/emit.c	Fri Apr 11 10:08:04 2008 +0200
@@ -77,13 +77,13 @@ s4 emit_load(jitdata *jd, instruction *i
 
 #if defined(ENABLE_SOFTFLOAT)
 		switch (src->type) {
+		case TYPE_ADR:
+		case TYPE_FLT:
 		case TYPE_INT:
-		case TYPE_FLT:
-		case TYPE_ADR:
 			M_ILD(tempreg, REG_SP, disp);
 			break;
+		case TYPE_DBL:
 		case TYPE_LNG:
-		case TYPE_DBL:
 			M_LLD(tempreg, REG_SP, disp);
 			break;
 		default:
@@ -91,18 +91,18 @@ s4 emit_load(jitdata *jd, instruction *i
 		}
 #else
 		switch (src->type) {
+		case TYPE_ADR:
 		case TYPE_INT:
-		case TYPE_ADR:
 			M_ILD(tempreg, REG_SP, disp);
 			break;
-		case TYPE_LNG:
-			M_LLD(tempreg, REG_SP, disp);
+		case TYPE_DBL:
+			M_DLD(tempreg, REG_SP, disp);
 			break;
 		case TYPE_FLT:
 			M_FLD(tempreg, REG_SP, disp);
 			break;
-		case TYPE_DBL:
-			M_DLD(tempreg, REG_SP, disp);
+		case TYPE_LNG:
+			M_LLD(tempreg, REG_SP, disp);
 			break;
 		default:
 			vm_abort("emit_load: unknown type %d", src->type);
@@ -216,13 +216,13 @@ void emit_store(jitdata *jd, instruction
 
 #if defined(ENABLE_SOFTFLOAT)
 		switch (dst->type) {
+		case TYPE_ADR:
+		case TYPE_FLT:
 		case TYPE_INT:
-		case TYPE_FLT:
-		case TYPE_ADR:
 			M_IST(d, REG_SP, disp);
 			break;
+		case TYPE_DBL:
 		case TYPE_LNG:
-		case TYPE_DBL:
 			M_LST(d, REG_SP, disp);
 			break;
 		default:
@@ -230,19 +230,20 @@ void emit_store(jitdata *jd, instruction
 		}
 #else
 		switch (dst->type) {
+		case TYPE_ADR:
 		case TYPE_INT:
-		case TYPE_ADR:
 			M_IST(d, REG_SP, disp);
+			break;
+		case TYPE_DBL:
+			M_DST(d, REG_SP, disp);
+			break;
+		case TYPE_FLT:
+			M_FST(d, REG_SP, disp);
 			break;
 		case TYPE_LNG:
 			M_LST(d, REG_SP, disp);
 			break;
-		case TYPE_FLT:
-			M_FST(d, REG_SP, disp);
-			break;
-		case TYPE_DBL:
-			M_DST(d, REG_SP, disp);
-			break;
+		
 		default:
 			vm_abort("emit_store: unknown type %d", dst->type);
 		}
@@ -322,14 +323,14 @@ void emit_copy(jitdata *jd, instruction 
 		if (s1 != d) {
 #if defined(ENABLE_SOFTFLOAT)
 			switch (src->type) {
+			case TYPE_ADR:
+			case TYPE_FLT:
 			case TYPE_INT:
-			case TYPE_FLT:
-			case TYPE_ADR:
 				/* XXX grrrr, wrong direction! */
 				M_MOV(d, s1);
 				break;
+			case TYPE_DBL:
 			case TYPE_LNG:
-			case TYPE_DBL:
 				/* XXX grrrr, wrong direction! */
 				M_MOV(GET_LOW_REG(d), GET_LOW_REG(s1));
 				M_MOV(GET_HIGH_REG(d), GET_HIGH_REG(s1));
@@ -339,21 +340,21 @@ void emit_copy(jitdata *jd, instruction 
 			}
 #else
 			switch (src->type) {
+			case TYPE_ADR:
 			case TYPE_INT:
-			case TYPE_ADR:
 				/* XXX grrrr, wrong direction! */
 				M_MOV(d, s1);
+				break;
+			case TYPE_DBL:
+				M_DMOV(s1, d);
+				break;
+			case TYPE_FLT:
+				M_FMOV(s1, d);
 				break;
 			case TYPE_LNG:
 				/* XXX grrrr, wrong direction! */
 				M_MOV(GET_LOW_REG(d), GET_LOW_REG(s1));
 				M_MOV(GET_HIGH_REG(d), GET_HIGH_REG(s1));
-				break;
-			case TYPE_FLT:
-				M_FMOV(s1, d);
-				break;
-			case TYPE_DBL:
-				M_DMOV(s1, d);
 				break;
 			default:
 				vm_abort("emit_copy: unknown type %d", src->type);
@@ -634,22 +635,35 @@ void emit_verbosecall_enter(jitdata *jd)
 	for (i = 0; i < md->paramcount; i++) {
 		if (!md->params[i].inmemory) {
 			s = md->params[i].regoff;
-
+#if defined(ENABLE_SOFTFLOAT)
+                switch (md->paramtypes[i].type) {
+                	case TYPE_ADR:
+        	        case TYPE_FLT:
+	                case TYPE_INT:
+                        	M_IST(s, REG_SP, i * 8);
+                        	break;
+                	case TYPE_DBL:
+                	case TYPE_LNG:
+                        	M_LST(s, REG_SP, i * 8);
+                        	break;
+                	}
+#else
 			switch (md->paramtypes[i].type) {
 			case TYPE_ADR:
 			case TYPE_INT:
 				M_IST(s, REG_SP, i * 8);
 				break;
-			case TYPE_LNG:
-				M_LST(s, REG_SP, i * 8);
+			case TYPE_DBL:
+				M_DST(s, REG_SP, i * 8);
 				break;
 			case TYPE_FLT:
 				M_FST(s, REG_SP, i * 8);
 				break;
-			case TYPE_DBL:
-				M_DST(s, REG_SP, i * 8);
+			case TYPE_LNG:
+				M_LST(s, REG_SP, i * 8);
 				break;
 			}
+#endif
 		}
 	}
 
@@ -664,22 +678,34 @@ void emit_verbosecall_enter(jitdata *jd)
 	for (i = 0; i < md->paramcount; i++) {
 		if (!md->params[i].inmemory) {
 			s = md->params[i].regoff;
-
+#if defined(ENABLE_SOFTFLOAT)
+ 			switch (md->paramtypes[i].type) {
+                        case TYPE_ADR:
+                        case TYPE_FLT:
+                        case TYPE_INT:
+                                M_ILD(s, REG_SP, i * 8);
+                                break;
+                        case TYPE_DBL:
+                        case TYPE_LNG:
+                                M_LLD(s, REG_SP, i * 8);
+                                break;
+                        }
+#else
 			switch (md->paramtypes[i].type) {
 			case TYPE_ADR:
 			case TYPE_INT:
 				M_ILD(s, REG_SP, i * 8);
 				break;
-			case TYPE_LNG:
-				M_LLD(s, REG_SP, i * 8);
+			case TYPE_DBL:
+				M_DLD(s, REG_SP, i * 8);
 				break;
 			case TYPE_FLT:
 				M_FLD(s, REG_SP, i * 8);
 				break;
-			case TYPE_DBL:
-				M_DLD(s, REG_SP, i * 8);
+			case TYPE_LNG:
+				M_LLD(s, REG_SP, i * 8);
 				break;
-			}
+#endif
 		}
 	}
 
@@ -731,12 +757,12 @@ void emit_verbosecall_exit(jitdata *jd)
 
 	switch (md->returntype.type) {
 	case TYPE_ADR:
+	case TYPE_FLT:
 	case TYPE_INT:
-	case TYPE_FLT:
 		M_IST(REG_RESULT, REG_SP, 0 * 8);
 		break;
+	case TYPE_DBL:
 	case TYPE_LNG:
-	case TYPE_DBL:
 		M_LST(REG_RESULT_PACKED, REG_SP, 0 * 8);
 		break;
 	}
@@ -750,12 +776,12 @@ void emit_verbosecall_exit(jitdata *jd)
 
 	switch (md->returntype.type) {
 	case TYPE_ADR:
+	case TYPE_FLT:
 	case TYPE_INT:
-	case TYPE_FLT:
 		M_ILD(REG_RESULT, REG_SP, 0 * 8);
 		break;
+	case TYPE_DBL:
 	case TYPE_LNG:
-	case TYPE_DBL:
 		M_LLD(REG_RESULT_PACKED, REG_SP, 0 * 8);
 		break;
 	}
