js/src/jit-test/tests/asm.js/testCloning.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/asm.js/testCloning.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,44 @@
     1.4 +load(libdir + "asm.js");
     1.5 +
     1.6 +var code = asmCompile(USE_ASM + "function g() { return 42 } return g");
     1.7 +assertEq(asmLink(code)(), 42);
     1.8 +assertEq(asmLink(code)(), 42);
     1.9 +
    1.10 +var code = asmCompile('glob', 'ffis', 'buf', USE_ASM + 'var i32=new glob.Int32Array(buf); function g() { return i32[0]|0 } return g');
    1.11 +var i32_1 = new Int32Array(4096);
    1.12 +i32_1[0] = 42;
    1.13 +var i32_2 = new Int32Array(4096);
    1.14 +i32_2[0] = 13;
    1.15 +assertEq(asmLink(code, this, null, i32_1.buffer)(), 42);
    1.16 +assertEq(asmLink(code, this, null, i32_2.buffer)(), 13);
    1.17 +var i32_3 = new Int32Array(4097);
    1.18 +assertAsmLinkFail(code, this, null, i32_3.buffer);
    1.19 +
    1.20 +var code = asmCompile('glob', 'ffis', USE_ASM + 'var ffi=ffis.ffi; function g(n) { n=n|0; var i=0; for(; (i|0)<(n|0); i=(i+1)|0) ffi() } return g');
    1.21 +var calls1 = 0, calls2 = 0;
    1.22 +function ffi1() { calls1++ }
    1.23 +function ffi2() { calls2++ }
    1.24 +asmLink(code, null, {ffi:ffi1})(100000);
    1.25 +assertEq(calls1, 100000);
    1.26 +assertEq(calls2, 0);
    1.27 +calls1 = 0;
    1.28 +asmLink(code, null, {ffi:ffi2})(50000);
    1.29 +assertEq(calls1, 0);
    1.30 +assertEq(calls2, 50000);
    1.31 +
    1.32 +var code = asmCompile(USE_ASM + 'var g = 0; function h() { g=(g+1)|0; return g|0 } return h');
    1.33 +var h1 = code();
    1.34 +assertEq(h1(), 1);
    1.35 +assertEq(h1(), 2);
    1.36 +var h2 = code();
    1.37 +assertEq(h2(), 1);
    1.38 +assertEq(h1(), 3);
    1.39 +assertEq(h2(), 2);
    1.40 +assertEq(h1(), 4);
    1.41 +
    1.42 +var code = asmCompile(USE_ASM + "return {}");
    1.43 +var h1 = code();
    1.44 +var h2 = code();
    1.45 +assertEq(h1 === h2, false);
    1.46 +assertEq(Object.keys(h1).length, 0);
    1.47 +assertEq(Object.keys(h2).length, 0);

mercurial