Fixed >> operator for 64-bit long arithmetic
authorMartin Soch <Martin.Soch@oracle.com>
Thu, 31 Jan 2013 14:45:11 +0100
brancharithmetic
changeset 6195134b1d78432
parent 618 171fa0ca3add
child 620 189f695d0b02
Fixed >> operator for 64-bit long
emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js
     1.1 --- a/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js	Thu Jan 31 13:59:34 2013 +0100
     1.2 +++ b/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js	Thu Jan 31 14:45:11 2013 +0100
     1.3 @@ -102,13 +102,15 @@
     1.4  };
     1.5  
     1.6  Number.prototype.shr64 = function(x) {
     1.7 -    if (x > 32) {
     1.8 -        var low = (this.high32() >> (x - 32)) & 0xFFFFFFFF;
     1.9 +    if (x >= 32) {
    1.10 +        var low = (this.high32() >> (x - 32)) | 0;
    1.11 +        low += (low < 0) ? (__m32+1) : 0;
    1.12          return low;
    1.13      } else {
    1.14 -        var low = (this >> x) & 0xFFFFFFFF;
    1.15 -        var hi_reminder = (this.high32() << (32 - x)) >> (32 - x);
    1.16 +        var low = (this >> x) | 0;
    1.17 +        var hi_reminder = this.high32() << (32 - x);
    1.18          low |= hi_reminder;
    1.19 +        low += (low < 0) ? (__m32+1) : 0;
    1.20          var hi = this.high32() >> x;
    1.21          return hi.next32(low);
    1.22      }