| var wast = ` | |
| (module | |
| (memory $0 1 1 shared) | |
| ) | |
| `; | |
| var module = binaryen.parseText(wast); | |
| // i32/i64.atomic.load/store | |
| module.addFunction("main", binaryen.Type.none, binaryen.Type.none, [], module.block("", [ | |
| // i32 | |
| module.i32.atomic.store(0, | |
| module.i32.const(0), | |
| module.i32.atomic.load(0, | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // i32 as u8 | |
| module.i32.atomic.store8(0, | |
| module.i32.const(0), | |
| module.i32.atomic.load8_u(0, | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // i32 as u16 | |
| module.i32.atomic.store16(0, | |
| module.i32.const(0), | |
| module.i32.atomic.load16_u(0, | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // i64 | |
| module.i64.atomic.store(0, | |
| module.i32.const(0), | |
| module.i64.atomic.load(0, | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // i64 as u8 | |
| module.i64.atomic.store8(0, | |
| module.i32.const(0), | |
| module.i64.atomic.load8_u(0, | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // i64 as u16 | |
| module.i64.atomic.store16(0, | |
| module.i32.const(0), | |
| module.i64.atomic.load16_u(0, | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // i64 as u32 | |
| module.i64.atomic.store32(0, | |
| module.i32.const(0), | |
| module.i64.atomic.load32_u(0, | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // wait and notify | |
| module.drop( | |
| module.memory.atomic.wait32( | |
| module.i32.const(0), | |
| module.i32.const(0), | |
| module.i64.const(0) | |
| ) | |
| ), | |
| module.drop( | |
| module.memory.atomic.wait64( | |
| module.i32.const(0), | |
| module.i64.const(0), | |
| module.i64.const(0) | |
| ) | |
| ), | |
| module.drop( | |
| module.memory.atomic.notify( | |
| module.i32.const(0), | |
| module.i32.const(0) | |
| ) | |
| ), | |
| // fence | |
| module.atomic.fence(binaryen.MemoryOrder.seqcst) | |
| ])); | |
| module.setFeatures(binaryen.Features.Atomics); | |
| assert(module.validate()); | |
| console.log(module.emitText()); |