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 Fri Feb 01 09:00:30 2013 +0100
1.2 +++ b/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js Mon Feb 04 09:41:33 2013 +0100
1.3 @@ -80,6 +80,32 @@
1.4 return hi.next32(low);
1.5 };
1.6
1.7 +Number.prototype.mul64 = function(x) {
1.8 + var low = this.mul32(x);
1.9 + low += (low < 0) ? (__m32+1) : 0;
1.10 + // first count upper 32 bits of (this.low * x.low)
1.11 + var hi_hi = 0;
1.12 + var hi_low = 0;
1.13 + var m = 1;
1.14 + for (var i = 0; i < 32; i++) {
1.15 + if (x & m) {
1.16 + hi_hi += this >>> 16;
1.17 + hi_low += this & 0xFFFF
1.18 + }
1.19 + hi_low >>= 1;
1.20 + hi_low += (hi_hi & 1) ? 0x8000 : 0;
1.21 + hi_hi >>= 1;
1.22 + m <<= 1;
1.23 + }
1.24 + var hi = (hi_hi << 16) + hi_low;
1.25 +
1.26 + var m1 = this.high32().mul32(x);
1.27 + var m2 = this.mul32(x.high32());
1.28 + hi = hi.add32(m1).add32(m2);
1.29 +
1.30 + return hi.next32(low);
1.31 +};
1.32 +
1.33 Number.prototype.div64 = function(x) {
1.34 var low = Math.floor(this.toFP() / x.toFP()); // TODO: not exact enough
1.35 if (low > __m32) {