| if (!this.SharedArrayBuffer) |
| quit(0); |
| |
| function loadModule_uint16(stdlib, foreign, heap) { |
| "use asm"; |
| var atomic_add = stdlib.Atomics.add; |
| var atomic_sub = stdlib.Atomics.sub; |
| var atomic_and = stdlib.Atomics.and; |
| var atomic_or = stdlib.Atomics.or; |
| var atomic_xor = stdlib.Atomics.xor; |
| var i16a = new stdlib.Uint16Array(heap); |
| function do_add_i(i) { |
| i = i|0; |
| var v = 0; |
| v = atomic_add(i16a, i>>1, 0x3333)|0; |
| } |
| function do_sub_i(i) { |
| i = i|0; |
| var v = 0; |
| v = atomic_sub(i16a, i>>1, 0x3333)|0; |
| } |
| function do_and_i(i) { |
| i = i|0; |
| var v = 0; |
| v = atomic_and(i16a, i>>1, 0x3333)|0; |
| } |
| function do_or_i(i) { |
| i = i|0; |
| var v = 0; |
| v = atomic_or(i16a, i>>1, 0x3333)|0; |
| } |
| function do_xor_i(i) { |
| i = i|0; |
| var v = 0; |
| v = atomic_xor(i16a, i>>1, 0x3333)|0; |
| } |
| return { add_i: do_add_i, |
| sub_i: do_sub_i, |
| and_i: do_and_i, |
| or_i: do_or_i, |
| xor_i: do_xor_i }; |
| } |
| |
| function test_uint16(heap) { |
| var i16m = loadModule_uint16(this, {}, heap); |
| var size = Uint16Array.BYTES_PER_ELEMENT; |
| i16m.add_i(size*40) |
| i16m.sub_i(size*40) |
| i16m.and_i(size*40) |
| i16m.or_i(size*40) |
| i16m.xor_i(size*40) |
| } |
| |
| var heap = new SharedArrayBuffer(65536); |
| test_uint16(heap); |