emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js
author Martin Soch <Martin.Soch@oracle.com>
Sun, 27 Jan 2013 10:19:02 +0100
brancharithmetic
changeset 593 b42911b78a16
parent 582 emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_Number.js@8e546d108658
parent 555 emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_Number.js@cde0c2d7794e
child 594 035fcbd7a33c
permissions -rw-r--r--
merge with trunk
     1 // empty line needed here
     2 Number.prototype.add32 = function(x) { return (this + x) | 0; };
     3 Number.prototype.sub32 = function(x) { return (this - x) | 0; };
     4 Number.prototype.mul32 = function(x) { 
     5     return (((this * (x >> 16)) << 16) + this * (x & 0xFFFF)) | 0;
     6 };
     7 
     8 Number.prototype.toInt8 = function()  { return (this << 24) >> 24; };
     9 Number.prototype.toInt16 = function() { return (this << 16) >> 16; };
    10 
    11 var Long = function(low, hi) {
    12     this.low = low;
    13     this.hi = hi;
    14 };
    15 
    16 function LongFromNumber(x) {
    17     return new Long(x % 0xFFFFFFFF, Math.floor(x / 0xFFFFFFFF));
    18 };
    19 
    20 function MakeLong(x) {
    21     if ((x.hi == undefined) && (x.low == undefined)) {
    22         return LongFromNumber(x);
    23     }
    24     return x;
    25 };
    26 
    27 Long.prototype.toInt32 = function() { return this.low | 0; };
    28 Long.prototype.toFP = function() { return this.hi * 0xFFFFFFFF + this.low; };
    29 
    30 Long.prototype.toString = function() {
    31     return String(this.toFP());
    32 };
    33 
    34 Long.prototype.valueOf = function() {
    35     return this.toFP();
    36 };
    37 
    38 Long.prototype.compare64 = function(x) {
    39     if (this.hi == x.hi) {
    40         return (this.low == x.low) ? 0 : ((this.low < x.low) ? -1 : 1);
    41     }
    42     return (this.hi < x.hi) ? -1 : 1;
    43 };
    44 
    45 Long.prototype.add64 = function(x) {
    46     low = this.low + x.low;
    47     carry = 0;
    48     if (low > 0xFFFFFFFF) {
    49         carry = 1;
    50         low -= 0xFFFFFFFF;
    51     }
    52     hi = (this.hi + x.hi + carry) & 0xFFFFFFFF;
    53     return new Long(low, hi);
    54 };
    55 
    56 Long.prototype.div64 = function(x) {
    57     return LongFromNumber(Math.floor(this.toFP() / x.toFP()));
    58 };
    59 
    60 Long.prototype.shl64 = function(x) {
    61     if (x > 32) {
    62         hi = (this.low << (x - 32)) & 0xFFFFFFFF;
    63         low = 0;
    64     } else {
    65         hi = (this.hi << x) & 0xFFFFFFFF;
    66         low_reminder = this.low >> x;
    67         hi |= low_reminder;
    68         low = this.low << x;
    69     }
    70     return new Long(low, hi);
    71 };