1;;! threads = true 2 3(module 4 ;; NB this should use a shared memory when it's supported 5 (memory 1) 6 7 (func (export "32.load8u") (param i32) (result i32) 8 local.get 0 i32.atomic.load8_u) 9 (func (export "32.load16u") (param i32) (result i32) 10 local.get 0 i32.atomic.load16_u) 11 (func (export "32.load32u") (param i32) (result i32) 12 local.get 0 i32.atomic.load) 13 (func (export "64.load8u") (param i32) (result i64) 14 local.get 0 i64.atomic.load8_u) 15 (func (export "64.load16u") (param i32) (result i64) 16 local.get 0 i64.atomic.load16_u) 17 (func (export "64.load32u") (param i32) (result i64) 18 local.get 0 i64.atomic.load32_u) 19 (func (export "64.load64u") (param i32) (result i64) 20 local.get 0 i64.atomic.load) 21 22 (func (export "32.store8") (param i32) 23 local.get 0 i32.const 0 i32.atomic.store8) 24 (func (export "32.store16") (param i32) 25 local.get 0 i32.const 0 i32.atomic.store16) 26 (func (export "32.store32") (param i32) 27 local.get 0 i32.const 0 i32.atomic.store) 28 (func (export "64.store8") (param i32) 29 local.get 0 i64.const 0 i64.atomic.store8) 30 (func (export "64.store16") (param i32) 31 local.get 0 i64.const 0 i64.atomic.store16) 32 (func (export "64.store32") (param i32) 33 local.get 0 i64.const 0 i64.atomic.store32) 34 (func (export "64.store64") (param i32) 35 local.get 0 i64.const 0 i64.atomic.store) 36 37 (func (export "32.load8u o1") (param i32) (result i32) 38 local.get 0 i32.atomic.load8_u offset=1) 39 (func (export "32.load16u o1") (param i32) (result i32) 40 local.get 0 i32.atomic.load16_u offset=1) 41 (func (export "32.load32u o1") (param i32) (result i32) 42 local.get 0 i32.atomic.load offset=1) 43 (func (export "64.load8u o1") (param i32) (result i64) 44 local.get 0 i64.atomic.load8_u offset=1) 45 (func (export "64.load16u o1") (param i32) (result i64) 46 local.get 0 i64.atomic.load16_u offset=1) 47 (func (export "64.load32u o1") (param i32) (result i64) 48 local.get 0 i64.atomic.load32_u offset=1) 49 (func (export "64.load64u o1") (param i32) (result i64) 50 local.get 0 i64.atomic.load offset=1) 51 52 (func (export "32.store8 o1") (param i32) 53 local.get 0 i32.const 0 i32.atomic.store8 offset=1) 54 (func (export "32.store16 o1") (param i32) 55 local.get 0 i32.const 0 i32.atomic.store16 offset=1) 56 (func (export "32.store32 o1") (param i32) 57 local.get 0 i32.const 0 i32.atomic.store offset=1) 58 (func (export "64.store8 o1") (param i32) 59 local.get 0 i64.const 0 i64.atomic.store8 offset=1) 60 (func (export "64.store16 o1") (param i32) 61 local.get 0 i64.const 0 i64.atomic.store16 offset=1) 62 (func (export "64.store32 o1") (param i32) 63 local.get 0 i64.const 0 i64.atomic.store32 offset=1) 64 (func (export "64.store64 o1") (param i32) 65 local.get 0 i64.const 0 i64.atomic.store offset=1) 66) 67 68;; aligned loads 69(assert_return (invoke "32.load8u" (i32.const 0)) (i32.const 0)) 70(assert_return (invoke "32.load16u" (i32.const 0)) (i32.const 0)) 71(assert_return (invoke "32.load32u" (i32.const 0)) (i32.const 0)) 72(assert_return (invoke "64.load8u" (i32.const 0)) (i64.const 0)) 73(assert_return (invoke "64.load16u" (i32.const 0)) (i64.const 0)) 74(assert_return (invoke "64.load64u" (i32.const 0)) (i64.const 0)) 75(assert_return (invoke "32.load8u o1" (i32.const 0)) (i32.const 0)) 76(assert_return (invoke "32.load16u o1" (i32.const 1)) (i32.const 0)) 77(assert_return (invoke "32.load32u o1" (i32.const 3)) (i32.const 0)) 78(assert_return (invoke "64.load8u o1" (i32.const 0)) (i64.const 0)) 79(assert_return (invoke "64.load16u o1" (i32.const 1)) (i64.const 0)) 80(assert_return (invoke "64.load32u o1" (i32.const 3)) (i64.const 0)) 81(assert_return (invoke "64.load64u o1" (i32.const 7)) (i64.const 0)) 82 83;; misaligned loads 84(assert_return (invoke "32.load8u" (i32.const 1)) (i32.const 0)) 85(assert_trap (invoke "32.load16u" (i32.const 1)) "unaligned atomic") 86(assert_trap (invoke "32.load32u" (i32.const 1)) "unaligned atomic") 87(assert_return (invoke "64.load8u" (i32.const 1)) (i64.const 0)) 88(assert_trap (invoke "64.load16u" (i32.const 1)) "unaligned atomic") 89(assert_trap (invoke "64.load32u" (i32.const 1)) "unaligned atomic") 90(assert_trap (invoke "64.load64u" (i32.const 1)) "unaligned atomic") 91(assert_return (invoke "32.load8u o1" (i32.const 0)) (i32.const 0)) 92(assert_trap (invoke "32.load16u o1" (i32.const 0)) "unaligned atomic") 93(assert_trap (invoke "32.load32u o1" (i32.const 0)) "unaligned atomic") 94(assert_return (invoke "64.load8u o1" (i32.const 0)) (i64.const 0)) 95(assert_trap (invoke "64.load16u o1" (i32.const 0)) "unaligned atomic") 96(assert_trap (invoke "64.load32u o1" (i32.const 0)) "unaligned atomic") 97(assert_trap (invoke "64.load64u o1" (i32.const 0)) "unaligned atomic") 98 99;; aligned stores 100(assert_return (invoke "32.store8" (i32.const 0))) 101(assert_return (invoke "32.store16" (i32.const 0))) 102(assert_return (invoke "32.store32" (i32.const 0))) 103(assert_return (invoke "64.store8" (i32.const 0))) 104(assert_return (invoke "64.store16" (i32.const 0))) 105(assert_return (invoke "64.store64" (i32.const 0))) 106(assert_return (invoke "32.store8 o1" (i32.const 0))) 107(assert_return (invoke "32.store16 o1" (i32.const 1))) 108(assert_return (invoke "32.store32 o1" (i32.const 3))) 109(assert_return (invoke "64.store8 o1" (i32.const 0))) 110(assert_return (invoke "64.store16 o1" (i32.const 1))) 111(assert_return (invoke "64.store32 o1" (i32.const 3))) 112(assert_return (invoke "64.store64 o1" (i32.const 7))) 113 114;; misaligned stores 115(assert_return (invoke "32.store8" (i32.const 1))) 116(assert_trap (invoke "32.store16" (i32.const 1)) "unaligned atomic") 117(assert_trap (invoke "32.store32" (i32.const 1)) "unaligned atomic") 118(assert_return (invoke "64.store8" (i32.const 1))) 119(assert_trap (invoke "64.store16" (i32.const 1)) "unaligned atomic") 120(assert_trap (invoke "64.store32" (i32.const 1)) "unaligned atomic") 121(assert_trap (invoke "64.store64" (i32.const 1)) "unaligned atomic") 122(assert_return (invoke "32.store8 o1" (i32.const 0))) 123(assert_trap (invoke "32.store16 o1" (i32.const 0)) "unaligned atomic") 124(assert_trap (invoke "32.store32 o1" (i32.const 0)) "unaligned atomic") 125(assert_return (invoke "64.store8 o1" (i32.const 0))) 126(assert_trap (invoke "64.store16 o1" (i32.const 0)) "unaligned atomic") 127(assert_trap (invoke "64.store32 o1" (i32.const 0)) "unaligned atomic") 128(assert_trap (invoke "64.store64 o1" (i32.const 0)) "unaligned atomic") 129