function testAtomic(): void { atomic.load(0); // i32.atomic.load8_u atomic.load(0); // i32.atomic.load16_u atomic.load(0); // i32.atomic.load atomic.load(0); // i64.atomic.load8_u atomic.load(0); // i64.atomic.load16_u atomic.load(0); // i64.atomic.load32_u atomic.load(0); // i64.atomic.load atomic.load(0, 8); // with offset atomic.store(0, 1); // i32.atomic.store8 atomic.store(0, 1); // i32.atomic.store16 atomic.store(0, 1); // i32.atomic.store atomic.store(0, 1); // i64.atomic.store8 atomic.store(0, 1); // i64.atomic.store16 atomic.store(0, 1); // i64.atomic.store32 atomic.store(0, 1); // i64.atomic.store atomic.store(0, 1, 8); // with offset atomic.add(0, 1); // i32.atomic.rmw8.add_u atomic.add(0, 1); // i32.atomic.rmw16.add_u atomic.add(0, 1); // i32.atomic.rmw.add atomic.add(0, 1); // i64.atomic.rmw8.add_u atomic.add(0, 1); // i64.atomic.rmw16.add_u atomic.add(0, 1); // i64.atomic.rmw32.add_u atomic.add(0, 1); // i64.atomic.rmw.add atomic.add(0, 1, 8); // with offset atomic.sub(0, 1); // i32.atomic.rmw8.sub_u atomic.sub(0, 1); // i32.atomic.rmw16.sub_u atomic.sub(0, 1); // i32.atomic.rmw.sub atomic.sub(0, 1); // i64.atomic.rmw8.sub_u atomic.sub(0, 1); // i64.atomic.rmw16.sub_u atomic.sub(0, 1); // i64.atomic.rmw32.sub_u atomic.sub(0, 1); // i64.atomic.rmw.sub atomic.sub(0, 1, 8); // with offset atomic.and(0, 1); // i32.atomic.rmw8.and_u atomic.and(0, 1); // i32.atomic.rmw16.and_u atomic.and(0, 1); // i32.atomic.rmw.and atomic.and(0, 1); // i64.atomic.rmw8.and_u atomic.and(0, 1); // i64.atomic.rmw16.and_u atomic.and(0, 1); // i64.atomic.rmw32.and_u atomic.and(0, 1); // i64.atomic.rmw.and atomic.and(0, 1, 8); // with offset atomic.or(0, 1); // i32.atomic.rmw8.or_u atomic.or(0, 1); // i32.atomic.rmw16.or_u atomic.or(0, 1); // i32.atomic.rmw.or atomic.or(0, 1); // i64.atomic.rmw8.or_u atomic.or(0, 1); // i64.atomic.rmw16.or_u atomic.or(0, 1); // i64.atomic.rmw32.or_u atomic.or(0, 1); // i64.atomic.rmw.or atomic.or(0, 1, 8); // with offset atomic.xor(0, 1); // i32.atomic.rmw8.xor_u atomic.xor(0, 1); // i32.atomic.rmw16.xor_u atomic.xor(0, 1); // i32.atomic.rmw.xor atomic.xor(0, 1); // i64.atomic.rmw8.xor_u atomic.xor(0, 1); // i64.atomic.rmw16.xor_u atomic.xor(0, 1); // i64.atomic.rmw32.xor_u atomic.xor(0, 1); // i64.atomic.rmw.xor atomic.xor(0, 1, 8); // with offset atomic.xchg(0, 1); // i32.atomic.rmw8.xchg_u atomic.xchg(0, 1); // i32.atomic.rmw16.xchg_u atomic.xchg(0, 1); // i32.atomic.rmw.xchg atomic.xchg(0, 1); // i64.atomic.rmw8.xchg_u atomic.xchg(0, 1); // i64.atomic.rmw16.xchg_u atomic.xchg(0, 1); // i64.atomic.rmw32.xchg_u atomic.xchg(0, 1); // i64.atomic.rmw.xchg atomic.xchg(0, 1, 8); // with offset atomic.cmpxchg(0, 1, 2); // i32.atomic.rmw8.xchg_u atomic.cmpxchg(0, 1, 2); // i32.atomic.rmw16.xchg_u atomic.cmpxchg(0, 1, 2); // i32.atomic.rmw.xchg atomic.cmpxchg(0, 1, 2); // i64.atomic.rmw8.xchg_u atomic.cmpxchg(0, 1, 2); // i64.atomic.rmw16.xchg_u atomic.cmpxchg(0, 1, 2); // i64.atomic.rmw32.xchg_u atomic.cmpxchg(0, 1, 2); // i64.atomic.rmw.xchg atomic.cmpxchg(0, 1, 2, 8); // with offset // atomic.wait(0, 0, -1); // i32.atomic.wait // atomic.wait(0, 0, -1); // i32.atomic.notify // atomic.notify(0, 1); // i64.atomic.wait // atomic.notify(0, 1); // i64.atomic.notify } function testAtomicAsm(): void { i32.atomic.load8_u(0); i32.atomic.load16_u(0); i32.atomic.load(0); i64.atomic.load8_u(0); i64.atomic.load16_u(0); i64.atomic.load32_u(0); i64.atomic.load(0); i32.atomic.store8(0, 1); i32.atomic.store16(0, 1); i32.atomic.store(0, 1); i64.atomic.store8(0, 1); i64.atomic.store16(0, 1); i64.atomic.store32(0, 1); i64.atomic.store(0, 1); i32.atomic.rmw8.add_u(0, 1); i32.atomic.rmw16.add_u(0, 1); i32.atomic.rmw.add(0, 1); i64.atomic.rmw8.add_u(0, 1); i64.atomic.rmw16.add_u(0, 1); i64.atomic.rmw32.add_u(0, 1); i64.atomic.rmw.add(0, 1); i32.atomic.rmw8.sub_u(0, 1); i32.atomic.rmw16.sub_u(0, 1); i32.atomic.rmw.sub(0, 1); i64.atomic.rmw8.sub_u(0, 1); i64.atomic.rmw16.sub_u(0, 1); i64.atomic.rmw32.sub_u(0, 1); i64.atomic.rmw.sub(0, 1); i32.atomic.rmw8.and_u(0, 1); i32.atomic.rmw16.and_u(0, 1); i32.atomic.rmw.and(0, 1); i64.atomic.rmw8.and_u(0, 1); i64.atomic.rmw16.and_u(0, 1); i64.atomic.rmw32.and_u(0, 1); i64.atomic.rmw.and(0, 1); i32.atomic.rmw8.or_u(0, 1); i32.atomic.rmw16.or_u(0, 1); i32.atomic.rmw.or(0, 1); i64.atomic.rmw8.or_u(0, 1); i64.atomic.rmw16.or_u(0, 1); i64.atomic.rmw32.or_u(0, 1); i64.atomic.rmw.or(0, 1); i32.atomic.rmw8.xor_u(0, 1); i32.atomic.rmw16.xor_u(0, 1); i32.atomic.rmw.xor(0, 1); i64.atomic.rmw8.xor_u(0, 1); i64.atomic.rmw16.xor_u(0, 1); i64.atomic.rmw32.xor_u(0, 1); i64.atomic.rmw.xor(0, 1); i32.atomic.rmw8.xchg_u(0, 1); i32.atomic.rmw16.xchg_u(0, 1); i32.atomic.rmw.xchg(0, 1); i64.atomic.rmw8.xchg_u(0, 1); i64.atomic.rmw16.xchg_u(0, 1); i64.atomic.rmw32.xchg_u(0, 1); i64.atomic.rmw.xchg(0, 1); i32.atomic.rmw8.cmpxchg_u(0, 1, 2); i32.atomic.rmw16.cmpxchg_u(0, 1, 2); i32.atomic.rmw.cmpxchg(0, 1, 2); i64.atomic.rmw8.cmpxchg_u(0, 1, 2); i64.atomic.rmw16.cmpxchg_u(0, 1, 2); i64.atomic.rmw32.cmpxchg_u(0, 1, 2); i64.atomic.rmw.cmpxchg(0, 1, 2); // i32.atomic.wait(0, 0, -1); // i64.atomic.wait(0, 0, -1); // i32.atomic.notify(0, 1); // i64.atomic.notify(0, 1); } if (ASC_FEATURE_THREADS) { testAtomic(); testAtomicAsm(); }