idiv-by-constant.js (1828B)
1 function int_seq(count) { 2 var arr = []; 3 var x = 0xfac83126; 4 while (count--) { 5 x ^= x << 13; 6 x ^= x >> 17; 7 x ^= x << 5; 8 arr.push(x | 0); 9 } 10 return arr; 11 } 12 13 function test(name, asm, ion, int) { 14 let count = 10000; 15 let seq = int_seq(count); 16 for (let x of seq) { 17 let rint = int(x); 18 let rasm = asm(x); 19 let rion = ion(x); 20 // console.log(name, x, rint, rasm, rion); 21 assertEq(rasm, rint); 22 assertEq(rion, rint); 23 } 24 } 25 26 var asmdiv2 = (function(m) { 27 "use asm" 28 function f(x) { 29 x = x|0; 30 var z = 0; 31 z = ((x|0) / 2)|0; 32 return z|0; 33 } 34 return f; 35 })() 36 37 var plaindiv2 = function(x) { 38 x = x|0; 39 var z = 0; 40 z = ((x|0) / 2)|0; 41 return z|0; 42 } 43 44 var interpdiv2 = function(x) { 45 with({}){}; 46 x = x|0; 47 var z = 0; 48 z = ((x|0) / 2)|0; 49 return z|0; 50 } 51 52 test("div2", asmdiv2, plaindiv2, interpdiv2); 53 54 var asmdiv3 = (function(m) { 55 "use asm" 56 function f(x) { 57 x = x|0; 58 var z = 0; 59 z = ((x|0) / 3)|0; 60 return z|0; 61 } 62 return f; 63 })() 64 65 var plaindiv3 = function(x) { 66 x = x|0; 67 var z = 0; 68 z = ((x|0) / 3)|0; 69 return z|0; 70 } 71 72 var interpdiv3 = function(x) { 73 with({}){}; 74 x = x|0; 75 var z = 0; 76 z = ((x|0) / 3)|0; 77 return z|0; 78 } 79 80 test("div3", asmdiv3, plaindiv3, interpdiv3); 81 82 var asmdiv7 = (function(m) { 83 "use asm" 84 function f(x) { 85 x = x|0; 86 var z = 0; 87 z = ((x|0) / 7)|0; 88 return z|0; 89 } 90 return f; 91 })() 92 93 var plaindiv7 = function(x) { 94 x = x|0; 95 var z = 0; 96 z = ((x|0) / 7)|0; 97 return z|0; 98 } 99 100 var interpdiv7 = function(x) { 101 with({}){}; 102 x = x|0; 103 var z = 0; 104 z = ((x|0) / 7)|0; 105 return z|0; 106 } 107 108 test("div7", asmdiv7, plaindiv7, interpdiv7);