* src/vm/jit/s390/codegen.h,
authorpm <none@none>
Wed, 20 Jun 2007 21:20:53 +0000 (21:20 +0000)
committerpm <none@none>
Wed, 20 Jun 2007 21:20:53 +0000 (21:20 +0000)
src/vm/jit/s390/codegen.c (codegen_emit): Support another hercules bug in F2D.

src/vm/jit/s390/codegen.c
src/vm/jit/s390/codegen.h

index 27237d234b8e1df550292b4c491a6edc651df8e4..82606473eef8950edd30a7c3de8b30fc7cd6e91d 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: codegen.c 8115 2007-06-20 19:14:05Z michi $
+   $Id: codegen.c 8117 2007-06-20 21:20:53Z pm $
 
 */
 
@@ -1590,10 +1590,25 @@ bool codegen_emit(jitdata *jd)
                        break;
 
                case ICMD_F2D:       /* ..., value  ==> ..., (double) value           */
-                       s1 = emit_load_s1(jd, iptr, REG_FTMP1);
-                       d = codegen_reg_of_dst(jd, iptr, REG_FTMP2);
-                       M_CVTFD(s1, d);
-                       emit_store_dst(jd, iptr, d);
+                       {
+                               u1 *ref;
+                               s1 = emit_load_s1(jd, iptr, REG_FTMP1);
+                               d = codegen_reg_of_dst(jd, iptr, REG_FTMP2);
+#ifdef SUPPORT_HERCULES
+                               N_LTEBR(s1, s1);
+                               ref = cd->mcodeptr;
+                               N_BRC(DD_0 | DD_1 | DD_2, 0); /* Non a NaN */
+                               disp = dseg_add_double(cd, 0.0 / 0.0);
+                               M_DLD_DSEG(d, disp, REG_ITMP1);
+                               emit_label_br(cd, BRANCH_LABEL_1);
+                               N_BRC_BACK_PATCH(ref);
+#endif
+                               M_CVTFD(s1, d);
+#ifdef SUPPORT_HERCULES
+                               emit_label(cd, BRANCH_LABEL_1);
+#endif
+                               emit_store_dst(jd, iptr, d);
+                       }
                        break;
 
                case ICMD_D2F:       /* ..., value  ==> ..., (float) value            */
index 273972462f3d0fa4ea6076fc080ff78a47a32131..7871ffacf5c8da40ccc3fe8e170e9202a5f708ff 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: codegen.h 8096 2007-06-17 13:45:58Z pm $
+   $Id: codegen.h 8117 2007-06-20 21:20:53Z pm $
 
 */
 
 #define N_LCXBR(r1, r2) N_RRE(0xB343, r1, r2)
 
 #define N_LDEBR(r1, r2) N_RRE(0xB304, r1, r2)
+#      define SZ_LDEBR SZ_RRE
 #define N_LXDBR(r1, r2) N_RRE(0xB305, r1, r2)
 #define N_LXEBR(r1, r2) N_RRE(0xB306, r1, r2)