1.1 --- a/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js Thu Feb 07 17:24:19 2013 +0100
1.2 +++ b/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js Thu Feb 07 17:41:41 2013 +0100
1.3 @@ -4,6 +4,7 @@
1.4 Number.prototype.mul32 = function(x) {
1.5 return (((this * (x >> 16)) << 16) + this * (x & 0xFFFF)) | 0;
1.6 };
1.7 +Number.prototype.neg32 = function() { return (-this) | 0; };
1.8
1.9 Number.prototype.toInt8 = function() { return (this << 24) >> 24; };
1.10 Number.prototype.toInt16 = function() { return (this << 16) >> 16; };
2.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Feb 07 17:24:19 2013 +0100
2.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Feb 07 17:41:41 2013 +0100
2.3 @@ -598,7 +598,7 @@
2.4 emit(out, "@1 = @1.xor64(@2);", smapper.getL(1), smapper.popL());
2.5 break;
2.6 case opc_ineg:
2.7 - emit(out, "@1 = -@1;", smapper.getI(0));
2.8 + emit(out, "@1 = @1.neg32();", smapper.getI(0));
2.9 break;
2.10 case opc_lneg:
2.11 emit(out, "@1 = @1.neg64();", smapper.getL(0));
3.1 --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/IntegerArithmeticTest.java Thu Feb 07 17:24:19 2013 +0100
3.2 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/IntegerArithmeticTest.java Thu Feb 07 17:41:41 2013 +0100
3.3 @@ -47,6 +47,10 @@
3.4 return x % y;
3.5 }
3.6
3.7 + private static int neg(int x) {
3.8 + return (-x);
3.9 + }
3.10 +
3.11 @Compare public int addOverflow() {
3.12 return add(Integer.MAX_VALUE, 1);
3.13 }
3.14 @@ -91,6 +95,18 @@
3.15 return mod(1, 2);
3.16 }
3.17
3.18 + @Compare public int negate() {
3.19 + return neg(123456);
3.20 + }
3.21 +
3.22 + @Compare public int negateMaxInt() {
3.23 + return neg(Integer.MAX_VALUE);
3.24 + }
3.25 +
3.26 + @Compare public int negateMinInt() {
3.27 + return neg(Integer.MIN_VALUE);
3.28 + }
3.29 +
3.30 @Compare public int sumTwoDimensions() {
3.31 int[][] matrix = createMatrix(4, 3);
3.32 matrix[0][0] += 10;