1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 25 05:53:21 2016 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 25 06:40:40 2016 +0100
1.3 @@ -730,7 +730,7 @@
1.4 emit(smapper, this, "var @1 = @2;", lmapper.setD(3), smapper.popD());
1.5 break;
1.6 case opc_iadd:
1.7 - smapper.replace(this, VarType.INTEGER, "(@1).add32(@2)", smapper.getI(1), smapper.popI());
1.8 + smapper.replace(this, VarType.INTEGER, "(((@1) + (@2)) | 0)", smapper.getI(1), smapper.popI());
1.9 break;
1.10 case opc_ladd:
1.11 smapper.replace(this, VarType.LONG, "(@1).add64(@2)", smapper.getL(1), smapper.popL());
1.12 @@ -742,7 +742,7 @@
1.13 smapper.replace(this, VarType.DOUBLE, "(@1 + @2)", smapper.getD(1), smapper.popD());
1.14 break;
1.15 case opc_isub:
1.16 - smapper.replace(this, VarType.INTEGER, "(@1).sub32(@2)", smapper.getI(1), smapper.popI());
1.17 + smapper.replace(this, VarType.INTEGER, "(((@1) - (@2)) | 0)", smapper.getI(1), smapper.popI());
1.18 break;
1.19 case opc_lsub:
1.20 smapper.replace(this, VarType.LONG, "(@1).sub64(@2)", smapper.getL(1), smapper.popL());
1.21 @@ -812,7 +812,7 @@
1.22 smapper.replace(this, VarType.LONG, "(@1).xor64(@2)", smapper.getL(1), smapper.popL());
1.23 break;
1.24 case opc_ineg:
1.25 - smapper.replace(this, VarType.INTEGER, "(@1).neg32()", smapper.getI(0));
1.26 + smapper.replace(this, VarType.INTEGER, "(-(@1))", smapper.getI(0));
1.27 break;
1.28 case opc_lneg:
1.29 smapper.replace(this, VarType.LONG, "(@1).neg64()", smapper.getL(0));
1.30 @@ -886,7 +886,7 @@
1.31 smapper.replace(this, VarType.DOUBLE, "@1", smapper.getI(0));
1.32 break;
1.33 case opc_l2i:
1.34 - smapper.replace(this, VarType.INTEGER, "(@1).toInt32()", smapper.getL(0));
1.35 + smapper.replace(this, VarType.INTEGER, "((@1) | 0)", smapper.getL(0));
1.36 break;
1.37 // max int check?
1.38 case opc_l2f:
1.39 @@ -904,7 +904,7 @@
1.40 smapper.getD(0));
1.41 break;
1.42 case opc_f2i:
1.43 - smapper.replace(this, VarType.INTEGER, "(@1).toInt32()",
1.44 + smapper.replace(this, VarType.INTEGER, "((@1) | 0)",
1.45 smapper.getF(0));
1.46 break;
1.47 case opc_f2l:
1.48 @@ -912,18 +912,18 @@
1.49 smapper.getF(0));
1.50 break;
1.51 case opc_d2i:
1.52 - smapper.replace(this, VarType.INTEGER, "(@1).toInt32()",
1.53 + smapper.replace(this, VarType.INTEGER, "((@1)| 0)",
1.54 smapper.getD(0));
1.55 break;
1.56 case opc_d2l:
1.57 smapper.replace(this, VarType.LONG, "(@1).toLong()", smapper.getD(0));
1.58 break;
1.59 case opc_i2b:
1.60 - smapper.replace(this, VarType.INTEGER, "(@1).toInt8()", smapper.getI(0));
1.61 + smapper.replace(this, VarType.INTEGER, "(((@1) << 24) >> 24)", smapper.getI(0));
1.62 break;
1.63 case opc_i2c:
1.64 case opc_i2s:
1.65 - smapper.replace(this, VarType.INTEGER, "(@1).toInt16()", smapper.getI(0));
1.66 + smapper.replace(this, VarType.INTEGER, "(((@1) << 16) >> 16)", smapper.getI(0));
1.67 break;
1.68 case opc_aconst_null:
1.69 smapper.assign(this, VarType.REFERENCE, "null");