tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

udiv-by-constant.js (2110B)


      1 function uint_seq(count) {
      2    with({}){}
      3    var arr = [];
      4    var x = 0xfac83126;
      5    while (count--) {
      6        x ^= x << 13;
      7        x ^= x >> 17;
      8        x ^= x << 5;
      9        // SpiderMonkey does not know how to represent UInt32, only Int32, and
     10        // including any UInt32 will cause the following function to be
     11        // de-optimized as double math.
     12        if (x|0 > 0)
     13            arr.push(x|0);
     14    }
     15    return arr;
     16 }
     17 
     18 function test(name, asm, ion, int) {
     19    with({}){}
     20    let count = 10000;
     21    let seq = uint_seq(count);
     22    for (let x of seq) {
     23        let rint = int(x);
     24        let rasm = asm(x);
     25        let rion = ion(x);
     26        // console.log(name, x, rint, rasm, rion);
     27        assertEq(rasm, rint);
     28        assertEq(rion, rint);
     29    }
     30 }
     31 
     32 var asmdiv2 = (function(m) {
     33    "use asm"
     34    function f(x) {
     35        x = x|0;
     36        var z = 0;
     37        z = ((x>>>0) / 2)>>>0;
     38        return z|0;
     39    }
     40    return f;
     41 })()
     42 
     43 var plaindiv2 = function(x) {
     44    x = x|0;
     45    var z = 0;
     46    z = ((x>>>0) / 2)>>>0;
     47    return z|0;
     48 }
     49 
     50 var interpdiv2 = function(x) {
     51    with({}){};
     52    x = x|0;
     53    var z = 0;
     54    z = ((x>>>0) / 2)>>>0;
     55    return z|0;
     56 }
     57 
     58 test("div2", asmdiv2, plaindiv2, interpdiv2);
     59 
     60 var asmdiv5 = (function(m) {
     61    "use asm"
     62    function f(x) {
     63        x = x|0;
     64        var z = 0;
     65        z = ((x>>>0) / 5)>>>0;
     66        return z|0;
     67    }
     68    return f;
     69 })()
     70 
     71 var plaindiv5 = function(x) {
     72    x = x|0;
     73    var z = 0;
     74    z = ((x>>>0) / 5)>>>0;
     75    return z|0;
     76 }
     77 
     78 var interpdiv5 = function(x) {
     79    with({}){};
     80    x = x|0;
     81    var z = 0;
     82    z = ((x>>>0) / 5)>>>0;
     83    return z|0;
     84 }
     85 
     86 test("div5", asmdiv5, plaindiv5, interpdiv5);
     87 
     88 var asmdiv7 = (function(m) {
     89    "use asm"
     90    function f(x) {
     91        x = x|0;
     92        var z = 0;
     93        z = ((x>>>0) / 7)>>>0;
     94        return z|0;
     95    }
     96    return f;
     97 })()
     98 
     99 var plaindiv7 = function(x) {
    100    x = x|0;
    101    var z = 0;
    102    z = ((x>>>0) / 7)>>>0;
    103    return z|0;
    104 }
    105 
    106 var interpdiv7 = function(x) {
    107    with({}){};
    108    x = x|0;
    109    var z = 0;
    110    z = ((x>>>0) / 7)>>>0;
    111    return z|0;
    112 }
    113 
    114 test("div7", asmdiv7, plaindiv7, interpdiv7);