testFastHeapAccess.js (3863B)
1 load(libdir + "asm.js"); 2 3 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=j|0; u32[((i<<2)+32 & 0xffff)>>2] = j } return f'); 4 var f = asmLink(code, this, null, BUF_64KB); 5 for (var i = 0; i < 100; i++) 6 f(i, i); 7 var u32 = new Uint32Array(BUF_64KB); 8 for (var i = 0; i < 100; i++) 9 assertEq(u32[8+i], i); 10 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return u32[((i<<2)+32 & 0xffff)>>2]|0 } return f'); 11 var f = asmLink(code, this, null, BUF_64KB); 12 for (var i = 0; i < 100; i++) 13 assertEq(f(i), i); 14 15 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=j|0; u32[(i<<2 & 0xffff)>>2] = j } return f'); 16 var f = asmLink(code, this, null, BUF_64KB); 17 for (var i = 0; i < 100; i++) 18 f(i, i); 19 var u32 = new Uint32Array(BUF_64KB); 20 for (var i = 0; i < 100; i++) 21 assertEq(u32[i], i); 22 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return u32[(i<<2 & 0xffff)>>2]|0 } return f'); 23 var f = asmLink(code, this, null, BUF_64KB); 24 for (var i = 0; i < 100; i++) 25 assertEq(f(i), i); 26 27 // For legacy compatibility, test Int8/Uint8 accesses with no shift. 28 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=j|0; u8[i+20 & 0xffff] = j } return f'); 29 var f = asmLink(code, this, null, BUF_64KB); 30 for (var i = 0; i < 100; i++) 31 f(i, i); 32 var u8 = new Uint8Array(BUF_64KB); 33 for (var i = 0; i < 100; i++) 34 assertEq(u8[i+20], i); 35 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return u8[i+20 & 0xffff]|0 } return f'); 36 var f = asmLink(code, this, null, BUF_64KB); 37 for (var i = 0; i < 100; i++) 38 assertEq(f(i), i); 39 40 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=j|0; u8[(i+20 & 0xffff)>>0] = j } return f'); 41 var f = asmLink(code, this, null, BUF_64KB); 42 for (var i = 0; i < 100; i++) 43 f(i, i); 44 var u8 = new Uint8Array(BUF_64KB); 45 for (var i = 0; i < 100; i++) 46 assertEq(u8[i+20], i); 47 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return u8[(i+20 & 0xffff)>>0]|0 } return f'); 48 var f = asmLink(code, this, null, BUF_64KB); 49 for (var i = 0; i < 100; i++) 50 assertEq(f(i), i); 51 52 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j,k) {i=i|0;j=j|0;k=k|0; i32[(i + (j<<2) & 0xffff) >> 2] = k } return f'); 53 var f = asmLink(code, this, null, BUF_64KB); 54 for (var i = 0; i < 100; i++) 55 f(32, i, i); 56 var u32 = new Uint32Array(BUF_64KB); 57 for (var i = 0; i < 100; i++) 58 assertEq(u32[8+i], i); 59 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=j|0; return i32[(i + (j<<2) & 0xffff) >> 2]|0 } return f'); 60 var f = asmLink(code, this, null, BUF_64KB); 61 for (var i = 0; i < 100; i++) 62 assertEq(f(32, i), i); 63 64 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j,k) {i=i|0;j=j|0;k=k|0; i32[(((i + (j<<2))|0) + 16 & 0xffff) >> 2] = k } return f'); 65 var f = asmLink(code, this, null, BUF_64KB); 66 for (var i = 0; i < 100; i++) 67 f(32, i, i); 68 var u32 = new Uint32Array(BUF_64KB); 69 for (var i = 0; i < 100; i++) 70 assertEq(u32[8+i+4], i); 71 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=j|0; return i32[(((i + (j<<2))|0) + 16 & 0xffff) >> 2]|0 } return f'); 72 var f = asmLink(code, this, null, BUF_64KB); 73 for (var i = 0; i < 100; i++) 74 assertEq(f(32, i), i); 75 76 var code = asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=j|0; return ((i32[(i+(j<<2)&0xffff)>>2]|0) + (i32[(((i+(j<<2))|0)+4&0xffff)>>2]|0))|0 } return f'); 77 var f = asmLink(code, this, null, BUF_64KB); 78 var i32 = new Uint32Array(BUF_64KB); 79 i32[11] = 3; 80 i32[12] = 97; 81 assertEq(f(12,8), 100);