diff options
author | Thomas Lively <tlively@google.com> | 2023-02-14 16:36:36 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-14 14:36:36 -0800 |
commit | 8f98375c051f2b8e1be87e7eb97e88d73cfb2c26 (patch) | |
tree | 171ab05759465e63ebe7ce898585813801820cbd /test/wasm2js/atomics_32.2asm.js.opt | |
parent | 3a315fb8248be7a2a7b7e27ebfde634d05668bf3 (diff) | |
download | binaryen-8f98375c051f2b8e1be87e7eb97e88d73cfb2c26.tar.gz binaryen-8f98375c051f2b8e1be87e7eb97e88d73cfb2c26.tar.bz2 binaryen-8f98375c051f2b8e1be87e7eb97e88d73cfb2c26.zip |
[wasm2js] Support nonzero offsets in memory.atomic.wait32 (#5489)
The assertion that the offset is zero does not necessarily hold for code that
uses this instruction via the clang builtin. Add support so that Emscripten
wasm2js tests pass in the presence of such code.
Diffstat (limited to 'test/wasm2js/atomics_32.2asm.js.opt')
-rw-r--r-- | test/wasm2js/atomics_32.2asm.js.opt | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/test/wasm2js/atomics_32.2asm.js.opt b/test/wasm2js/atomics_32.2asm.js.opt index 6f42d5df5..5cb990b7d 100644 --- a/test/wasm2js/atomics_32.2asm.js.opt +++ b/test/wasm2js/atomics_32.2asm.js.opt @@ -24,7 +24,8 @@ memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "aGVsbG8s"); memorySegments[1] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "d29ybGQh"); - function wasm2js_atomic_wait_i32(ptr, expected, timeoutLow, timeoutHigh) { + function wasm2js_atomic_wait_i32(offset, ptr, expected, timeoutLow, timeoutHigh) { + ptr = (ptr + offset) >> 2; var timeout = Infinity; if (timeoutHigh >= 0) { // Convert from nanoseconds to milliseconds @@ -32,7 +33,7 @@ memorySegments[1] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "d29y timeout = ((timeoutLow >>> 0) / 1e6) + timeoutHigh * (4294967296 / 1e6); } var view = new Int32Array(bufferView.buffer); // TODO cache - var result = Atomics.wait(view, ptr >> 2, expected, timeout); + var result = Atomics.wait(view, ptr, expected, timeout); if (result == 'ok') return 0; if (result == 'not-equal') return 1; if (result == 'timed-out') return 2; @@ -117,7 +118,7 @@ function asmFunc(imports) { Atomics.load(HEAPU16, 514); Atomics.load(HEAP32, 257); Atomics.store(HEAP32, 25, 200); - wasm2js_atomic_wait_i32(4, 8, -1, -1) | 0; + wasm2js_atomic_wait_i32(4, 8, 16, -1, -1) | 0; wasm2js_memory_init(0, 512, 0, 4); wasm2js_memory_init(1, 1024, 4, 2); Atomics.notify(HEAP32, 1, 2); |