rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 1857 f1344425bcb1
parent 1856 9cdc403018b5
child 1858 4dea14fafc31
     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");