michael@0: enableOsiPointRegisterChecks(); michael@0: michael@0: function DiagModule(stdlib, foreign) { michael@0: "use asm"; michael@0: michael@0: var sqrt = stdlib.Math.sqrt; michael@0: var test = foreign.test; michael@0: michael@0: function square(x) { michael@0: x = x|0; michael@0: return ((x|0)+(x|0))|0; michael@0: } michael@0: michael@0: function diag() { michael@0: var x = 0.0; michael@0: while(1) { michael@0: test(1, x); michael@0: x = x+1.0 michael@0: if (x > 15.0) michael@0: return 0; michael@0: } michael@0: return 0; michael@0: } michael@0: michael@0: function diag_1() { michael@0: test(); michael@0: return 0; michael@0: } michael@0: michael@0: michael@0: return { diag: diag, diag_1:diag_1 }; michael@0: } michael@0: michael@0: var foreign = { michael@0: test:function(a,b) { michael@0: print(a+":"+b) michael@0: var c = [0.0]; michael@0: if (b > 10) michael@0: return c[1]; michael@0: return c[0]; michael@0: } michael@0: } michael@0: michael@0: // make sure foreign is compiled michael@0: michael@0: var fast = DiagModule(this, foreign); // produces AOT-compiled version michael@0: print(fast.diag()); // 5 michael@0: gc() michael@0: print(fast.diag()); // 5 michael@0: michael@0: