Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/js/src/jit-test/tests/asm.js/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 30 kB image not shown  

Quelle  testHeapAccess.js   Sprache: JAVA

 
load(libdir + "asm.js");

assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[0>>2] = 4.0; return i32[0>>2]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f32[0>>2] = 4; return +f32[0>>2]; } return f');

assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { var x=0,y=0; return i8[x+y]|0 } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { var x=0,y=0; return u8[x+y]|0 } return f');

assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i32[0>>0]|0 }; return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i32[0>>1]|0 }; return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i32[0>>4]|0 }; return f');
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i32[0]|0 }; return f'), thisnullnew ArrayBuffer(BUF_MIN))(), 0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i = i32[i>>2]|0; return i|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0), 0);

// In order to allow following tests work on both big-endian and little-
// endian architectures we need to define least significant byte (lsb) and
// least significant word (lsw).
var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return i8[0]|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
var lsb=0;
var lsw=0
if (f(0x12345678) == 0x12) {
  lsb=3;
  lsw=1;
}

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return i8[' + lsb + ']|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7f),0x7f);
assertEq(f(0xff),-1);
assertEq(f(0x100),0);

{
      var buf = new ArrayBuffer(BUF_MIN);
      var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + '/* not a clone */ function f(i) {i=i|0; i32[0] = i; return i8[' + lsb + ']|0}; return f');
      var f = asmLink(code, thisnull, buf);
      assertEq(f(0),0);
      assertEq(f(0x7f),0x7f);
      assertEq(f(0xff),-1);
      assertEq(f(0x100),0);

      // Bug 1088655
      assertEq(asmLink(asmCompile('stdlib''foreign''heap', USE_ASM + 'var i32=new stdlib.Int32Array(heap); function f(i) {i=i|0;var j=0x10000;return (i32[j>>2] = i)|0 } return f'), thisnull, buf)(1), 1);
}

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return u8[' + lsb + ']|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7f),0x7f);
assertEq(f(0xff),0xff);
assertEq(f(0x100),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return i16[' + lsw + ']|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7fff),0x7fff);
assertEq(f(0xffff),-1);
assertEq(f(0x10000),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return u16[' + lsw + ']|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7fff),0x7fff);
assertEq(f(0xffff),0xffff);
assertEq(f(0x10000),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return i32[0]|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7fffffff),0x7fffffff);
assertEq(f(0xffffffff),-1);
assertEq(f(0x100000000),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return u32[0]|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7fffffff),0x7fffffff);
assertEq(f(0xffffffff),-1);
assertEq(f(0x100000000),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return i8[' + lsb + ']|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7f),0x7f);
assertEq(f(0xff),-1);
assertEq(f(0x100),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i32[0] = i; return u8[' + lsb + ']|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7f),0x7f);
assertEq(f(0xff),0xff);
assertEq(f(0x100),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i8[0] = i; return i8[0]|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7f),0x7f);
assertEq(f(0xff),-1);
assertEq(f(0x100),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; i8[0] = i; return u8[0]|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0),0);
assertEq(f(0x7f),0x7f);
assertEq(f(0xff),0xff);
assertEq(f(0x100),0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=+j; f64[i>>3] = j; return (~~+f64[i>>3])|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0, 1.3), 1);
assertEq(f(BUF_MIN-8, 2.5), 2);
assertEq(f(BUF_MIN, 3.8), 0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=+j; f64[i>>3] = j; return (~~f64[i>>3])|0}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0, 1.3), 1);
assertEq(f(BUF_MIN-8, 2.5), 2);
assertEq(f(BUF_MIN, 3.8), 0);

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i,j) {i=i|0;j=+j; f64[i>>3] = j; return +f64[i>>3]}; return f');
var f = asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));
assertEq(f(0, 1.3), 1.3);
assertEq(f(BUF_MIN-8, 2.5), 2.5);
assertEq(f(BUF_MIN, 3.8), NaN);

var i32 = new Int32Array(BUF_MIN);
i32[0] = 42;
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[1] = i32[0] }; return f'), thisnull, i32.buffer)();
assertEq(i32[1], 42);

var f64 = new Float64Array(BUF_MIN);
f64[0] = 42;
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f64[1] = f64[0] }; return f'), thisnull, f64.buffer)();
assertEq(f64[1], 42);

var i32 = new Int32Array(BUF_MIN/4);
i32[0] = 13;
i32[1] = 0xfffeeee;
var f = asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return i32[((i<<2)+1)>>2]|0 }; return f'), thisnull, i32.buffer);
assertEq(f(0), 13);
assertEq(f(1), 0xfffeeee);
var f = asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return i32[((i<<2)+2)>>2]|0 }; return f'), thisnull, i32.buffer);
assertEq(f(0), 13);
assertEq(f(1), 0xfffeeee);
var f = asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return i32[(i<<1)>>2]|0 }; return f'), thisnull, i32.buffer);
assertEq(f(0), 13);
assertEq(f(1), 13);
assertEq(f(2), 0xfffeeee);
assertEq(f(3), 0xfffeeee);

var f = asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return i32[(i<<2)>>2]|0 }; return f'), thisnull, i32.buffer);
assertEq(f(0), 13);
assertEq(f(1), 0xfffeeee);

var f = asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) {i=i|0; return i32[((i<<2)+4)>>2]|0 }; return f'), thisnull, i32.buffer);
assertEq(f(0), 0xfffeeee);

// For legacy compatibility, test Int8/Uint8 accesses with no shift.
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u8[7&0xffff] = 41 } return f'an>), thisnull, BUF_64KB)();
assertEq(new Uint8Array(BUF_64KB)[7], 41);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i8[7&0xffff] = -41 } return f'an>), thisnull, BUF_64KB)();
assertEq(new Int8Array(BUF_64KB)[7], -41);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u8[(7&0xffff)>>0] = 41 } return f'pan>), thisnull, BUF_64KB)();
assertEq(new Uint8Array(BUF_64KB)[7], 41);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i8[(7&0xffff)>>0] = -41 } return f'pan>), thisnull, BUF_64KB)();
assertEq(new Int8Array(BUF_64KB)[7], -41);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u16[(6&0xffff)>>1] = 0xabc } return f'span>), thisnull, BUF_64KB)();
assertEq(new Uint16Array(BUF_64KB)[3], 0xabc);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i16[(6&0xffff)>>1] = -0xabc } return f'span>), thisnull, BUF_64KB)();
assertEq(new Int16Array(BUF_64KB)[3], -0xabc);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u32[(4&0xffff)>>2] = 0xabcde } return f'span>), thisnull, BUF_64KB)();
assertEq(new Uint32Array(BUF_64KB)[1], 0xabcde);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[(4&0xffff)>>2] = -0xabcde } return f'span>), thisnull, BUF_64KB)();
assertEq(new Int32Array(BUF_64KB)[1], -0xabcde);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f32[(4&0xffff)>>2] = 1.0 } return f'span>), thisnull, BUF_64KB)();
assertEq(new Float32Array(BUF_64KB)[1], 1.0);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f64[(8&0xffff)>>3] = 1.3 } return f'span>), thisnull, BUF_64KB)();
assertEq(new Float64Array(BUF_64KB)[1], 1.3);

new Float32Array(BUF_64KB)[1] = 1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f32[(4&0xffff)>>2] } return f'), thisnull, BUF_64KB)(), 1.0);
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'var toFloat32 = glob.Math.fround; function f() { return toFloat32(f32[(4&0xffff)>>2]) } return f'), thisnull, BUF_64KB)(), 1.0);
new Float64Array(BUF_64KB)[1] = 1.3;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[(8&0xffff)>>3] } return f'), thisnull, BUF_64KB)(), 1.3);

asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; u8[255]; u8[i] } return f');
// For legacy compatibility, test Int8/Uint8 accesses with no shift.
asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; u8[i&0xff]; u8[255] } return f');
asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; u8[(i&0xff)>>0]; u8[255] } return f');
asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; u32[63]; u32[i>>2] } return f');
asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; u32[i>>2]; u32[63] } return f');

var code = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; u32[64] } return f');
asmLink(code, thisnullnew ArrayBuffer(BUF_MIN));

asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; u32[12] = i } return f'), thisnull, BUF_64KB)(11);
assertEq(new Int32Array(BUF_64KB)[12], 11);
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u32[12]|0 } return f'), thisnull, BUF_64KB)(), 11);
new Float64Array(BUF_64KB)[0] = 3.5;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +-f64[0] } return f'), thisnull, BUF_64KB)(), -3.5);

// Test constant loads.
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u8[1] = -1 } return f'), thisnull, buf)();
assertEq(new Uint8Array(buf)[0], 0);
assertEq(new Uint8Array(buf)[1], 255);
assertEq(new Uint8Array(buf)[2], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u8[4095] = -1 } return f'), thisnull, buf)();
assertEq(new Uint8Array(buf)[4094], 0);
assertEq(new Uint8Array(buf)[4095], 255);
assertEq(new Uint8Array(buf)[4096], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u8[4096] = -1 } return f'), thisnull, buf)();
assertEq(new Uint8Array(buf)[4095], 0);
assertEq(new Uint8Array(buf)[4096], 255);
assertEq(new Uint8Array(buf)[4097], 0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u8[' + BUF_MIN + '] = -1 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u8[258048] = -1 } return f'), thisnull, buf)();
assertEq(new Uint8Array(buf)[258047], 0);
assertEq(new Uint8Array(buf)[258048], 255);
assertEq(new Uint8Array(buf)[258049], 0);

var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i8[1] = -1 } return f'), thisnull, buf)();
assertEq(new Int8Array(buf)[0], 0);
assertEq(new Int8Array(buf)[1], -1);
assertEq(new Int8Array(buf)[2], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i8[4095] = -1 } return f'), thisnull, buf)();
assertEq(new Int8Array(buf)[4094], 0);
assertEq(new Int8Array(buf)[4095], -1);
assertEq(new Int8Array(buf)[4096], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i8[4096] = -1 } return f'), thisnull, buf)();
assertEq(new Int8Array(buf)[4095], 0);
assertEq(new Int8Array(buf)[4096], -1);
assertEq(new Int8Array(buf)[4097], 0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i8[' + BUF_MIN + '] = -1 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i8[258048] = -1 } return f'), thisnull, buf)();
assertEq(new Int8Array(buf)[258047], 0);
assertEq(new Int8Array(buf)[258048], -1);
assertEq(new Int8Array(buf)[258049], 0);

var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u16[1] = -1 } return f'), thisnull, buf)();
assertEq(new Uint16Array(buf)[0], 0);
assertEq(new Uint16Array(buf)[1], 65535);
assertEq(new Uint16Array(buf)[2], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u16[' + (BUF_MIN/2-1) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Uint16Array(buf)[BUF_MIN/2-2], 0);
assertEq(new Uint16Array(buf)[BUF_MIN/2-1], 65535);
assertEq(new Uint16Array(buf)[BUF_MIN/2], undefined);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u16[' + (BUF_MIN/4) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Uint16Array(buf)[BUF_MIN/4-1], 0);
assertEq(new Uint16Array(buf)[BUF_MIN/4], 65535);
assertEq(new Uint16Array(buf)[BUF_MIN/4+1], 0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u16[' + (BUF_MIN/2) + '] = -1 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u16[126976] = -1 } return f'), thisnull, buf)();
assertEq(new Uint16Array(buf)[126975], 0);
assertEq(new Uint16Array(buf)[126976], 65535);
assertEq(new Uint16Array(buf)[126977], 0);

var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i16[1] = -1 } return f'), thisnull, buf)();
assertEq(new Int16Array(buf)[0], 0);
assertEq(new Int16Array(buf)[1], -1);
assertEq(new Int16Array(buf)[2], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i16[' + (BUF_MIN/2-1) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Int16Array(buf)[BUF_MIN/2-2], 0);
assertEq(new Int16Array(buf)[BUF_MIN/2-1], -1);
assertEq(new Int16Array(buf)[BUF_MIN/2], undefined);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i16[' + (BUF_MIN/4) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Int16Array(buf)[BUF_MIN/4-1], 0);
assertEq(new Int16Array(buf)[BUF_MIN/4], -1);
assertEq(new Int16Array(buf)[BUF_MIN/4+1], 0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i16[' + (BUF_MIN/2) + '] = -1 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i16[126976] = -1 } return f'), thisnull, buf)();
assertEq(new Int16Array(buf)[126975], 0);
assertEq(new Int16Array(buf)[126976], -1);
assertEq(new Int16Array(buf)[126977], 0);

var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u32[1] = -1 } return f'), thisnull, buf)();
assertEq(new Uint32Array(buf)[0], 0);
assertEq(new Uint32Array(buf)[1], 4294967295);
assertEq(new Uint32Array(buf)[2], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u32[' + (BUF_MIN/4-1) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Uint32Array(buf)[BUF_MIN/4-2], 0);
assertEq(new Uint32Array(buf)[BUF_MIN/4-1], 4294967295);
assertEq(new Uint32Array(buf)[BUF_MIN/4], undefined);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u32[' + (BUF_MIN/8) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Uint32Array(buf)[BUF_MIN/8-1], 0);
assertEq(new Uint32Array(buf)[BUF_MIN/8], 4294967295);
assertEq(new Uint32Array(buf)[BUF_MIN/8+1], 0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u32[' + (BUF_MIN/4) + '] = -1 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { u32[61440] = -1 } return f'), thisnull, buf)();
assertEq(new Uint32Array(buf)[61439], 0);
assertEq(new Uint32Array(buf)[61440], 4294967295);
assertEq(new Uint32Array(buf)[61441], 0);

var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[1] = -1 } return f'), thisnull, buf)();
assertEq(new Int32Array(buf)[0], 0);
assertEq(new Int32Array(buf)[1], -1);
assertEq(new Int32Array(buf)[2], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[' + (BUF_MIN/4-1) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Int32Array(buf)[BUF_MIN/4-2], 0);
assertEq(new Int32Array(buf)[BUF_MIN/4-1], -1);
assertEq(new Int32Array(buf)[BUF_MIN/4], undefined);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[' + (BUF_MIN/8) + '] = -1 } return f'), thisnull, buf)();
assertEq(new Int32Array(buf)[BUF_MIN/8-1], 0);
assertEq(new Int32Array(buf)[BUF_MIN/8], -1);
assertEq(new Int32Array(buf)[BUF_MIN/8+1], 0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[' + (BUF_MIN/4) + '] = -1 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { i32[61440] = -1 } return f'), thisnull, buf)();
assertEq(new Int32Array(buf)[61439], 0);
assertEq(new Int32Array(buf)[61440], -1);
assertEq(new Int32Array(buf)[61441], 0);

var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f32[1] = -1.0 } return f'), thisnull, buf)();
assertEq(new Int32Array(buf)[0], 0);
assertEq(new Float32Array(buf)[1], -1.0);
assertEq(new Int32Array(buf)[2], 0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f32[' + (BUF_MIN/4-1) + '] = -1.0 } return f'), thisnull, buf)();
assertEq(new Int32Array(buf)[BUF_MIN/4-2], 0);
assertEq(new Float32Array(buf)[BUF_MIN/4-1], -1.0);
assertEq(new Int32Array(buf)[BUF_MIN/4], undefined);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f32[' + (BUF_MIN/8) + '] = -1.0 } return f'), thisnull, buf)();
assertEq(new Int32Array(buf)[BUF_MIN/8-1], 0);
assertEq(new Float32Array(buf)[BUF_MIN/8], -1.0);
assertEq(new Int32Array(buf)[BUF_MIN/8+1], 0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f32[' + (BUF_MIN/4) + '] = -1.0 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f32[61440] = -1.0 } return f'), thisnull, buf)();
assertEq(new Float32Array(buf)[61439], 0.0);
assertEq(new Float32Array(buf)[61440], -1.0);
assertEq(new Float32Array(buf)[61441], 0.0);

var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f64[1] = -1.0 } return f'), thisnull, buf)();
assertEq(new Float64Array(buf)[0], 0.0);
assertEq(new Float64Array(buf)[1], -1.0);
assertEq(new Float64Array(buf)[2], 0.0);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f64[' + (BUF_MIN/8-1) + '] = -1.0 } return f'), thisnull, buf)();
assertEq(new Float64Array(buf)[BUF_MIN/8-2], 0.0);
assertEq(new Float64Array(buf)[BUF_MIN/8-1], -1.0);
assertEq(new Float64Array(buf)[BUF_MIN/8], undefined);
var buf = new ArrayBuffer(BUF_MIN);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f64[' + (BUF_MIN/16) + '] = -1.0 } return f'), thisnull, buf)();
assertEq(new Float64Array(buf)[BUF_MIN/16-1], 0.0);
assertEq(new Float64Array(buf)[BUF_MIN/16], -1.0);
assertEq(new Float64Array(buf)[BUF_MIN/16+1], 0.0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f64[' + (BUF_MIN/8) + '] = -1.0 } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { f64[28672] = -1.0 } return f'), thisnull, buf)();
assertEq(new Float64Array(buf)[28671], 0.0);
assertEq(new Float64Array(buf)[28672], -1.0);
assertEq(new Float64Array(buf)[28673], 0.0);


var buf = new ArrayBuffer(BUF_MIN);
new Uint8Array(buf)[1] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u8[1]|0; } return f'), thisnull, buf)(),255);
new Int8Array(buf)[1] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i8[1]|0; } return f'), thisnull, buf)(),-1);
var buf = new ArrayBuffer(262144);
new Uint8Array(buf)[126976] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u8[126976]|0; } return f'), thisnull, buf)(),255);
new Int8Array(buf)[126976] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i8[126976]|0; } return f'), thisnull, buf)(),-1);

var buf = new ArrayBuffer(BUF_MIN);
new Uint16Array(buf)[1] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u16[1]|0; } return f'), thisnull, buf)(),65535);
new Int16Array(buf)[1] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i16[1]|0; } return f'), thisnull, buf)(),-1);
var buf = new ArrayBuffer(262144);
new Uint16Array(buf)[126976] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u16[126976]|0; } return f'), thisnull, buf)(),65535);
new Int16Array(buf)[126976] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i16[126976]|0; } return f'), thisnull, buf)(),-1);

var buf = new ArrayBuffer(BUF_MIN);
new Uint32Array(buf)[1] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u32[1]|0; } return f'), thisnull, buf)(),-1);
new Int32Array(buf)[1] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i32[1]|0; } return f'), thisnull, buf)(),-1);
var buf = new ArrayBuffer(262144);
new Int32Array(buf)[61440] = -1;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return i32[61440]|0; } return f'), thisnull, buf)(),-1);

var buf = new ArrayBuffer(BUF_MIN);
new Float32Array(buf)[1] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f32[1]; } return f'), thisnull, buf)(),-1.0);
new Float32Array(buf)[BUF_MIN/4-1] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f32[' + (BUF_MIN/4-1) + ']; } return f'), thisnull, buf)(),-1.0);
new Float32Array(buf)[BUF_MIN/8] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f32[' + (BUF_MIN/8) + ']; } return f'), thisnull, buf)(),-1.0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f32[' + (BUF_MIN/4) + ']; } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
new Float32Array(buf)[61440] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f32[61440]; } return f'), thisnull, buf)(),-1.0);

var buf = new ArrayBuffer(BUF_MIN);
new Float64Array(buf)[1] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[1]; } return f'), thisnull, buf)(),-1.0);
new Float64Array(buf)[BUF_MIN/8-1] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[' + (BUF_MIN/8-1) + ']; } return f'), thisnull, buf)(),-1.0);
new Float64Array(buf)[BUF_MIN/16] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[' + (BUF_MIN/16) + ']; } return f'), thisnull, buf)(),-1.0);
assertAsmLinkFail(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[' + (BUF_MIN/8) + ']; } return f'), thisnull, buf);
var buf = new ArrayBuffer(262144);
new Float64Array(buf)[28672] = -1.0;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[28672]; } return f'), thisnull, buf)(),-1.0);

// Bug 913867
var buf = new ArrayBuffer(BUF_MIN);
new Int32Array(buf)[0] = 0x55aa5a5a;
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f1() { i32[0] = 1; return 8; }; function f() { return i32[((f1()|0)&0)>>2]|0; } return f'), thisnull, buf)(),1);
assertEq(new Int32Array(buf)[0], 1);

// Bug 882012
assertEq(asmLink(asmCompile('stdlib''foreign''heap', USE_ASM + "var id=foreign.id;var doubles=new stdlib.Float64Array(heap);function g(){doubles[0]=+id(2.0);return +doubles[0];}return g"), this, {id: function(x){return x;}}, BUF_64KB)(), 2.0);

assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u8[4294967295]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'const i=4294967295; function f() { return u8[i]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u8[-1]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'const i=-1; function f() { return u8[i]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u8[0x80000000]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'const i=0x80000000; function f() { return u8[i]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f() { return u8[-2147483648]|0; } return f');
assertAsmTypeFail('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'const i=-2147483648; function f() { return u8[i]|0; } return f');

// GVN checks
var buf = new ArrayBuffer(BUF_MIN);
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'var i=0; function f() { var x = 0, y = 0; u8[0] = 1; u8[1] = 2; x = 0|u8[i]; i = x; y = 0|u8[i]; return y|0;} return f'), thisnull, buf)(),2);
assertEq(asmLink(asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'var i=0; function f() { var x = 0, y = 0; u8[0] = 1; u8[1] = 2; x = 0|u8[i]; y = 0|u8[i]; return (x+y)|0;} return f'), thisnull, buf)(),2);

// Heap length constraints
var m = asmCompile('glob''imp''b', USE_ASM + HEAP_IMPORTS + 'function f(i) { i=i|0; return u8[i]|0; } return f');
assertAsmLinkAlwaysFail(m, thisnullnew ArrayBuffer(0xffff));
assertEq(asmLink(m, thisnullnew ArrayBuffer(0x10000))(0),0);
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0x10010));
assertEq(asmLink(m, thisnullnew ArrayBuffer(0x20000))(0),0);
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0xfe0000));
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0xfe0010));
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0xfe0000));
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0xff8000));
var buf = new ArrayBuffer(0x100000);
new Uint8Array(buf)[0x4242] = 0xAA;
var f = asmLink(m, thisnull, buf);
assertEq(f(0),0);
assertEq(f(0x4242),0xAA);
assertEq(f(0x100000),0);
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0x104000));
assertEq(asmLink(m, thisnullnew ArrayBuffer(0x200000))(0),0);
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0x3f8000));
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0x3fe000));
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0x3fc000));
assertEq(asmLink(m, thisnullnew ArrayBuffer(0x400000))(0),0);
assertAsmLinkFail(m, thisnullnew ArrayBuffer(0x410000));
assertEq(asmLink(m, thisnullnew ArrayBuffer(0x800000))(0),0);
var buf = new ArrayBuffer(0x1000000);
new Uint8Array(buf)[0x424242] = 0xAA;
var f = asmLink(m, thisnull, buf);
assertEq(f(0),0);
assertEq(f(0x424242),0xAA);
assertEq(f(0x1000000),0);
assertEq(asmLink(m, thisnullnew ArrayBuffer(0x2000000))(0),0);
assertEq(asmLink(m, thisnullnew ArrayBuffer(0x3000000))(0),0);

// Heap offsets
var asmMod = function test (glob, env, b) {
    'use asm';
    var i8 = new glob.Int8Array(b);
    function f(i) {
        i = i | 0;
        i = i & 1;
        i = (i - 0x40000)|0;
        i8[0x3ffff] = 0;
        return i8[(i + 0x7fffe) >> 0] | 0;
    }
    return f;
};
var buffer = new ArrayBuffer(0x40000);
var asm = asmMod(this, {}, buffer);
assertEq(asm(-1),0);

Messung V0.5
C=95 H=96 G=95

¤ Dauer der Verarbeitung: 0.40 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.