aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/cacao/files/cacao-codegen-arm2.patch
blob: 710f284345d67f890c704d996ec1c85f3be7b85e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# HG changeset patch
# User Christian Thalinger <twisti@complang.tuwien.ac.at>
# Date 1221467463 -7200
# Node ID a67fe1cb2b81b7cbfc9d824f17b440e50c7697ef
# Parent d88bf99453b644bd2cc5c0dc5f8038f3151d897a
* src/vm/jit/arm/codegen.c (codegen_emit) [__VFP_FP__]: Implemented
I2F, I2D, F2I, and D2I correctly.

--- a/src/vm/jit/arm/codegen.c	Mon Sep 15 10:17:30 2008 +0200
+++ b/src/vm/jit/arm/codegen.c	Mon Sep 15 10:31:03 2008 +0200
@@ -1013,7 +1013,12 @@
 
 			s1 = emit_load_s1(jd, iptr, REG_ITMP1);
 			d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
+#if defined(__VFP_FP__)
+			M_FMSR(s1, d);
+			M_CVTIF(d, d);
+#else
 			M_CVTIF(s1, d);
+#endif
 			emit_store_dst(jd, iptr, d);
 			break;
 
@@ -1021,7 +1026,12 @@
 
 			s1 = emit_load_s1(jd, iptr, REG_ITMP1);
 			d = codegen_reg_of_dst(jd, iptr, REG_FTMP1);
+#if defined(__VFP_FP__)
+			M_FMSR(s1, d);
+			M_CVTID(d, d);
+#else
 			M_CVTID(s1, d);
+#endif
 			emit_store_dst(jd, iptr, d);
 			break;
 
@@ -1029,9 +1039,12 @@
 
 			s1 = emit_load_s1(jd, iptr, REG_FTMP1);
 			d = codegen_reg_of_dst(jd, iptr, REG_ITMP1);
+#if defined(__VFP_FP__)
+			M_CVTFI(s1, REG_FTMP2);
+			M_FMRS(REG_FTMP2, d);
+#else
 			/* this uses round towards zero, as Java likes it */
 			M_CVTFI(s1, d);
-#if !defined(__VFP_FP__)
 			/* this checks for NaN; to return zero as Java likes it */
 			M_FCMP(s1, 0x8);
 			M_MOVVS_IMM(0, d);
@@ -1043,9 +1056,12 @@
 
 			s1 = emit_load_s1(jd, iptr, REG_FTMP1);
 			d = codegen_reg_of_dst(jd, iptr, REG_ITMP1);
+#if defined(__VFP_FP__)
+			M_CVTDI(s1, REG_FTMP2);
+			M_FMRS(REG_FTMP2, d);
+#else
 			/* this uses round towards zero, as Java likes it */
 			M_CVTDI(s1, d);
-#if !defined(__VFP_FP__)
 			/* this checks for NaN; to return zero as Java likes it */
 			M_DCMP(s1, 0x8);
 			M_MOVVS_IMM(0, d);