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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 load(libdir + "asm.js");
michael@0 2
michael@0 3 setCachingEnabled(true);
michael@0 4 if (!isAsmJSCompilationAvailable() || !isCachingEnabled())
michael@0 5 quit();
michael@0 6
michael@0 7 var body1 = "'use asm'; function f() { return 42 } function ff() { return 43 } return f";
michael@0 8 var m = new Function(body1);
michael@0 9 assertEq(isAsmJSModule(m), true);
michael@0 10 assertEq(m()(), 42);
michael@0 11 var m = new Function(body1);
michael@0 12 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 13 assertEq(m()(), 42);
michael@0 14 var body2 = body1 + "f";
michael@0 15 var m = new Function(body2);
michael@0 16 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 17 assertEq(m()(), 43);
michael@0 18 var evalStr1 = "(function() { " + body1 + "})";
michael@0 19 var m = eval(evalStr1);
michael@0 20 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 21 assertEq(m()(), 42);
michael@0 22 var m = eval(evalStr1);
michael@0 23 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 24 assertEq(m()(), 42);
michael@0 25 var evalStr2 = "(function() { " + body2 + "})";
michael@0 26 var m = eval(evalStr2);
michael@0 27 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 28 assertEq(m()(), 43);
michael@0 29 var m = eval(evalStr2);
michael@0 30 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 31 assertEq(m()(), 43);
michael@0 32
michael@0 33 var evalStr3 = "(function(global) { 'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g })";
michael@0 34 var m = eval(evalStr3);
michael@0 35 assertEq(isAsmJSModule(m), true);
michael@0 36 assertEq(m(this)(.3), Math.sin(.3));
michael@0 37 var m = eval(evalStr3);
michael@0 38 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 39 assertEq(m(this)(.3), Math.sin(.3));
michael@0 40 var evalStr4 = "(function(gobal) { 'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g })";
michael@0 41 var m = eval(evalStr4);
michael@0 42 assertEq(isAsmJSModule(m), false);
michael@0 43 var m = eval(evalStr3);
michael@0 44 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 45 var evalStr5 = "(function(global,foreign) { 'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g })";
michael@0 46 var m = eval(evalStr5);
michael@0 47 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 48
michael@0 49 var m = new Function(body1);
michael@0 50 assertEq(isAsmJSModule(m), true);
michael@0 51 var body3 = "'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g";
michael@0 52 var m = new Function('global', body3);
michael@0 53 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 54 assertEq(m(this)(.2), Math.sin(.2));
michael@0 55 var m = new Function('gobal', body3);
michael@0 56 assertEq(isAsmJSModule(m), false);
michael@0 57 var m = new Function('global', body3);
michael@0 58 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 59 var m = new Function('global','foreign', body3);
michael@0 60 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 61 var m = new Function('global','foreign', body3);
michael@0 62 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 63 var m = new Function('gobal','foreign', body3);
michael@0 64 assertEq(isAsmJSModule(m), false);
michael@0 65 var m = new Function('global','foreign', body3);
michael@0 66 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 67 var m = new Function('global','foregn', body3);
michael@0 68 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 69 var m = new Function('global','foreign', 'buffer', body3);
michael@0 70 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 71 var m = new Function('global','foreign', 'buffer', 'foopy', body3);
michael@0 72 assertEq(isAsmJSModule(m), false);
michael@0 73 var m = new Function('global','foreign', 'buffer', body3);
michael@0 74 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 75 var m = new Function('global','foreign', 'bffer', body3);
michael@0 76 assertEq(isAsmJSModuleLoadedFromCache(m), false);
michael@0 77 var m = new Function('global','foreign', 'foreign', body3);
michael@0 78 assertEq(isAsmJSModule(m), false);
michael@0 79
michael@0 80 var body = "f() { 'use asm'; function g() {} return g }";
michael@0 81 var evalStr6 = "(function " + body + ")";
michael@0 82 var evalStr7 = "(function* " + body + ")";
michael@0 83 var m = eval(evalStr6);
michael@0 84 assertEq(isAsmJSModule(m), true);
michael@0 85 var m = eval(evalStr6);
michael@0 86 assertEq(isAsmJSModuleLoadedFromCache(m), true);
michael@0 87 var m = eval(evalStr7);
michael@0 88 assertEq(isAsmJSModule(m), false);
michael@0 89
michael@0 90 // Test caching using a separate process (which, with ASLR, should mean a
michael@0 91 // separate address space) to compile/cache the code. Ideally, every asmCompile
michael@0 92 // would do this, but that makes jit-tests run 100x slower. Do it here, for one
michael@0 93 // of each feature. asm.js/testBullet.js should pound on everything.
michael@0 94 assertEq(asmLink(asmCompileCached(USE_ASM + "function f(i) { i=i|0; return +((i+1)|0) } function g(d) { d=+d; return +(d + +f(42) + 1.5) } return g"))(.2), .2+43+1.5);
michael@0 95 assertEq(asmLink(asmCompileCached(USE_ASM + "function f1() { return 1 } function f2() { return 2 } function f(i) { i=i|0; return T[i&1]()|0 } var T=[f1,f2]; return f"))(1), 2);
michael@0 96 assertEq(asmLink(asmCompileCached("g", USE_ASM + "var s=g.Math.sin; function f(d) { d=+d; return +s(d) } return f"), this)(.3), Math.sin(.3));
michael@0 97 assertEq(asmLink(asmCompileCached("g","ffis", USE_ASM + "var ffi=ffis.ffi; function f(i) { i=i|0; return ffi(i|0)|0 } return f"), null, {ffi:function(i){return i+2}})(1), 3);
michael@0 98 assertEq(asmLink(asmCompileCached("g","ffis", USE_ASM + "var x=ffis.x|0; function f() { return x|0 } return f"), null, {x:43})(), 43);
michael@0 99 var i32 = new Int32Array(4096);
michael@0 100 i32[4] = 42;
michael@0 101 assertEq(asmLink(asmCompileCached("g","ffis","buf", USE_ASM + "var i32=new g.Int32Array(buf); function f(i) { i=i|0; return i32[i>>2]|0 } return f"), this, null, i32.buffer)(4*4), 42);
michael@0 102 assertEq(asmLink(asmCompileCached('glob', USE_ASM + 'var x=glob.Math.PI; function f() { return +x } return f'), this)(), Math.PI);

mercurial