js/src/jit-test/tests/asm.js/testCaching.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/testCaching.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,102 @@
     1.4 +load(libdir + "asm.js");
     1.5 +
     1.6 +setCachingEnabled(true);
     1.7 +if (!isAsmJSCompilationAvailable() || !isCachingEnabled())
     1.8 +    quit();
     1.9 +
    1.10 +var body1 = "'use asm'; function f() { return 42 } function ff() { return 43 } return f";
    1.11 +var m = new Function(body1);
    1.12 +assertEq(isAsmJSModule(m), true);
    1.13 +assertEq(m()(), 42);
    1.14 +var m = new Function(body1);
    1.15 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.16 +assertEq(m()(), 42);
    1.17 +var body2 = body1 + "f";
    1.18 +var m = new Function(body2);
    1.19 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.20 +assertEq(m()(), 43);
    1.21 +var evalStr1 = "(function() { " + body1 + "})";
    1.22 +var m = eval(evalStr1);
    1.23 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.24 +assertEq(m()(), 42);
    1.25 +var m = eval(evalStr1);
    1.26 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.27 +assertEq(m()(), 42);
    1.28 +var evalStr2 = "(function() { " + body2 + "})";
    1.29 +var m = eval(evalStr2);
    1.30 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.31 +assertEq(m()(), 43);
    1.32 +var m = eval(evalStr2);
    1.33 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.34 +assertEq(m()(), 43);
    1.35 +
    1.36 +var evalStr3 = "(function(global) { 'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g })";
    1.37 +var m = eval(evalStr3);
    1.38 +assertEq(isAsmJSModule(m), true);
    1.39 +assertEq(m(this)(.3), Math.sin(.3));
    1.40 +var m = eval(evalStr3);
    1.41 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.42 +assertEq(m(this)(.3), Math.sin(.3));
    1.43 +var evalStr4 = "(function(gobal) { 'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g })";
    1.44 +var m = eval(evalStr4);
    1.45 +assertEq(isAsmJSModule(m), false);
    1.46 +var m = eval(evalStr3);
    1.47 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.48 +var evalStr5 = "(function(global,foreign) { 'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g })";
    1.49 +var m = eval(evalStr5);
    1.50 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.51 +
    1.52 +var m = new Function(body1);
    1.53 +assertEq(isAsmJSModule(m), true);
    1.54 +var body3 = "'use asm'; var sin=global.Math.sin; function g(d) { d=+d; return +sin(d) } return g";
    1.55 +var m = new Function('global', body3);
    1.56 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.57 +assertEq(m(this)(.2), Math.sin(.2));
    1.58 +var m = new Function('gobal', body3);
    1.59 +assertEq(isAsmJSModule(m), false);
    1.60 +var m = new Function('global', body3);
    1.61 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.62 +var m = new Function('global','foreign', body3);
    1.63 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.64 +var m = new Function('global','foreign', body3);
    1.65 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.66 +var m = new Function('gobal','foreign', body3);
    1.67 +assertEq(isAsmJSModule(m), false);
    1.68 +var m = new Function('global','foreign', body3);
    1.69 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.70 +var m = new Function('global','foregn', body3);
    1.71 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.72 +var m = new Function('global','foreign', 'buffer', body3);
    1.73 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.74 +var m = new Function('global','foreign', 'buffer', 'foopy', body3);
    1.75 +assertEq(isAsmJSModule(m), false);
    1.76 +var m = new Function('global','foreign', 'buffer', body3);
    1.77 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.78 +var m = new Function('global','foreign', 'bffer', body3);
    1.79 +assertEq(isAsmJSModuleLoadedFromCache(m), false);
    1.80 +var m = new Function('global','foreign', 'foreign', body3);
    1.81 +assertEq(isAsmJSModule(m), false);
    1.82 +
    1.83 +var body = "f() { 'use asm'; function g() {} return g }";
    1.84 +var evalStr6 = "(function " + body + ")";
    1.85 +var evalStr7 = "(function* " + body + ")";
    1.86 +var m = eval(evalStr6);
    1.87 +assertEq(isAsmJSModule(m), true);
    1.88 +var m = eval(evalStr6);
    1.89 +assertEq(isAsmJSModuleLoadedFromCache(m), true);
    1.90 +var m = eval(evalStr7);
    1.91 +assertEq(isAsmJSModule(m), false);
    1.92 +
    1.93 +// Test caching using a separate process (which, with ASLR, should mean a
    1.94 +// separate address space) to compile/cache the code. Ideally, every asmCompile
    1.95 +// would do this, but that makes jit-tests run 100x slower. Do it here, for one
    1.96 +// of each feature. asm.js/testBullet.js should pound on everything.
    1.97 +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);
    1.98 +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);
    1.99 +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));
   1.100 +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);
   1.101 +assertEq(asmLink(asmCompileCached("g","ffis", USE_ASM + "var x=ffis.x|0; function f() { return x|0 } return f"), null, {x:43})(), 43);
   1.102 +var i32 = new Int32Array(4096);
   1.103 +i32[4] = 42;
   1.104 +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);
   1.105 +assertEq(asmLink(asmCompileCached('glob', USE_ASM + 'var x=glob.Math.PI; function f() { return +x } return f'), this)(), Math.PI);

mercurial