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