diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/dump/atomic.txt | 333 | ||||
-rw-r--r-- | test/interp/atomic-load.txt | 54 | ||||
-rw-r--r-- | test/interp/atomic-rmw-add.txt | 110 | ||||
-rw-r--r-- | test/interp/atomic-rmw-and.txt | 110 | ||||
-rw-r--r-- | test/interp/atomic-rmw-cmpxchg.txt | 180 | ||||
-rw-r--r-- | test/interp/atomic-rmw-or.txt | 110 | ||||
-rw-r--r-- | test/interp/atomic-rmw-sub.txt | 110 | ||||
-rw-r--r-- | test/interp/atomic-rmw-xchg.txt | 110 | ||||
-rw-r--r-- | test/interp/atomic-rmw-xor.txt | 110 | ||||
-rw-r--r-- | test/interp/atomic-store.txt | 70 | ||||
-rw-r--r-- | test/parse/expr/atomic-align.txt | 77 | ||||
-rw-r--r-- | test/parse/expr/atomic-disabled.txt | 269 | ||||
-rw-r--r-- | test/parse/expr/atomic.txt | 77 | ||||
-rw-r--r-- | test/parse/expr/bad-atomic-unnatural-align.txt | 264 | ||||
-rw-r--r-- | test/roundtrip/fold-atomic.txt | 330 | ||||
-rwxr-xr-x | test/run-roundtrip.py | 3 | ||||
-rw-r--r-- | test/typecheck/bad-atomic-type-mismatch.txt | 745 |
17 files changed, 3062 insertions, 0 deletions
diff --git a/test/dump/atomic.txt b/test/dump/atomic.txt new file mode 100644 index 00000000..9b2fc0b6 --- /dev/null +++ b/test/dump/atomic.txt @@ -0,0 +1,333 @@ +;;; TOOL: run-objdump +;;; FLAGS: --enable-threads + +(module + (memory 1) + (func + i32.const 0 i32.atomic.load drop + i32.const 0 i64.atomic.load drop + i32.const 0 i32.atomic.load8_u drop + i32.const 0 i32.atomic.load16_u drop + i32.const 0 i64.atomic.load8_u drop + i32.const 0 i64.atomic.load16_u drop + i32.const 0 i64.atomic.load32_u drop + + i32.const 0 i32.const 0 i32.atomic.store + i32.const 0 i64.const 0 i64.atomic.store + i32.const 0 i32.const 0 i32.atomic.store8 + i32.const 0 i32.const 0 i32.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store8 + i32.const 0 i64.const 0 i64.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store32 + + i32.const 0 i32.const 0 i32.atomic.rmw.add drop + i32.const 0 i64.const 0 i64.atomic.rmw.add drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add drop + + i32.const 0 i32.const 0 i32.atomic.rmw.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub drop + + i32.const 0 i32.const 0 i32.atomic.rmw.and drop + i32.const 0 i64.const 0 i64.atomic.rmw.and drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and drop + + i32.const 0 i32.const 0 i32.atomic.rmw.or drop + i32.const 0 i64.const 0 i64.atomic.rmw.or drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg drop + + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop + +)) +(;; STDOUT ;;; + +atomic.wasm: file format wasm 0x1 + +Code Disassembly: + +00001b func[0]: + 00001e: 41 00 | i32.const 0 + 000021: fe 10 02 00 | i32.atomic.load 2 0 + 000024: 1a | drop + 000025: 41 00 | i32.const 0 + 000028: fe 11 03 00 | i64.atomic.load 3 0 + 00002b: 1a | drop + 00002c: 41 00 | i32.const 0 + 00002f: fe 12 00 00 | i32.atomic.load8_u 0 0 + 000032: 1a | drop + 000033: 41 00 | i32.const 0 + 000036: fe 13 01 00 | i32.atomic.load16_u 1 0 + 000039: 1a | drop + 00003a: 41 00 | i32.const 0 + 00003d: fe 14 00 00 | i64.atomic.load8_u 0 0 + 000040: 1a | drop + 000041: 41 00 | i32.const 0 + 000044: fe 15 01 00 | i64.atomic.load16_u 1 0 + 000047: 1a | drop + 000048: 41 00 | i32.const 0 + 00004b: fe 16 02 00 | i64.atomic.load32_u 2 0 + 00004e: 1a | drop + 00004f: 41 00 | i32.const 0 + 000051: 41 00 | i32.const 0 + 000054: fe 17 02 00 | i32.atomic.store 2 0 + 000057: 41 00 | i32.const 0 + 000059: 42 00 | i64.const 0 + 00005c: fe 18 03 00 | i64.atomic.store 3 0 + 00005f: 41 00 | i32.const 0 + 000061: 41 00 | i32.const 0 + 000064: fe 19 00 00 | i32.atomic.store8 0 0 + 000067: 41 00 | i32.const 0 + 000069: 41 00 | i32.const 0 + 00006c: fe 1a 01 00 | i32.atomic.store16 1 0 + 00006f: 41 00 | i32.const 0 + 000071: 42 00 | i64.const 0 + 000074: fe 1b 00 00 | i64.atomic.store8 0 0 + 000077: 41 00 | i32.const 0 + 000079: 42 00 | i64.const 0 + 00007c: fe 1c 01 00 | i64.atomic.store16 1 0 + 00007f: 41 00 | i32.const 0 + 000081: 42 00 | i64.const 0 + 000084: fe 1d 02 00 | i64.atomic.store32 2 0 + 000087: 41 00 | i32.const 0 + 000089: 41 00 | i32.const 0 + 00008c: fe 1e 02 00 | i32.atomic.rmw.add 2 0 + 00008f: 1a | drop + 000090: 41 00 | i32.const 0 + 000092: 42 00 | i64.const 0 + 000095: fe 1f 03 00 | i64.atomic.rmw.add 3 0 + 000098: 1a | drop + 000099: 41 00 | i32.const 0 + 00009b: 41 00 | i32.const 0 + 00009e: fe 20 00 00 | i32.atomic.rmw8_u.add 0 0 + 0000a1: 1a | drop + 0000a2: 41 00 | i32.const 0 + 0000a4: 41 00 | i32.const 0 + 0000a7: fe 21 01 00 | i32.atomic.rmw16_u.add 1 0 + 0000aa: 1a | drop + 0000ab: 41 00 | i32.const 0 + 0000ad: 42 00 | i64.const 0 + 0000b0: fe 22 00 00 | i64.atomic.rmw8_u.add 0 0 + 0000b3: 1a | drop + 0000b4: 41 00 | i32.const 0 + 0000b6: 42 00 | i64.const 0 + 0000b9: fe 23 01 00 | i64.atomic.rmw16_u.add 1 0 + 0000bc: 1a | drop + 0000bd: 41 00 | i32.const 0 + 0000bf: 42 00 | i64.const 0 + 0000c2: fe 24 02 00 | i64.atomic.rmw32_u.add 2 0 + 0000c5: 1a | drop + 0000c6: 41 00 | i32.const 0 + 0000c8: 41 00 | i32.const 0 + 0000cb: fe 25 02 00 | i32.atomic.rmw.sub 2 0 + 0000ce: 1a | drop + 0000cf: 41 00 | i32.const 0 + 0000d1: 42 00 | i64.const 0 + 0000d4: fe 26 03 00 | i64.atomic.rmw.sub 3 0 + 0000d7: 1a | drop + 0000d8: 41 00 | i32.const 0 + 0000da: 41 00 | i32.const 0 + 0000dd: fe 27 00 00 | i32.atomic.rmw8_u.sub 0 0 + 0000e0: 1a | drop + 0000e1: 41 00 | i32.const 0 + 0000e3: 41 00 | i32.const 0 + 0000e6: fe 28 01 00 | i32.atomic.rmw16_u.sub 1 0 + 0000e9: 1a | drop + 0000ea: 41 00 | i32.const 0 + 0000ec: 42 00 | i64.const 0 + 0000ef: fe 29 00 00 | i64.atomic.rmw8_u.sub 0 0 + 0000f2: 1a | drop + 0000f3: 41 00 | i32.const 0 + 0000f5: 42 00 | i64.const 0 + 0000f8: fe 2a 01 00 | i64.atomic.rmw16_u.sub 1 0 + 0000fb: 1a | drop + 0000fc: 41 00 | i32.const 0 + 0000fe: 42 00 | i64.const 0 + 000101: fe 2b 02 00 | i64.atomic.rmw32_u.sub 2 0 + 000104: 1a | drop + 000105: 41 00 | i32.const 0 + 000107: 41 00 | i32.const 0 + 00010a: fe 2c 02 00 | i32.atomic.rmw.and 2 0 + 00010d: 1a | drop + 00010e: 41 00 | i32.const 0 + 000110: 42 00 | i64.const 0 + 000113: fe 2d 03 00 | i64.atomic.rmw.and 3 0 + 000116: 1a | drop + 000117: 41 00 | i32.const 0 + 000119: 41 00 | i32.const 0 + 00011c: fe 2e 00 00 | i32.atomic.rmw8_u.and 0 0 + 00011f: 1a | drop + 000120: 41 00 | i32.const 0 + 000122: 41 00 | i32.const 0 + 000125: fe 2f 01 00 | i32.atomic.rmw16_u.and 1 0 + 000128: 1a | drop + 000129: 41 00 | i32.const 0 + 00012b: 42 00 | i64.const 0 + 00012e: fe 30 00 00 | i64.atomic.rmw8_u.and 0 0 + 000131: 1a | drop + 000132: 41 00 | i32.const 0 + 000134: 42 00 | i64.const 0 + 000137: fe 31 01 00 | i64.atomic.rmw16_u.and 1 0 + 00013a: 1a | drop + 00013b: 41 00 | i32.const 0 + 00013d: 42 00 | i64.const 0 + 000140: fe 32 02 00 | i64.atomic.rmw32_u.and 2 0 + 000143: 1a | drop + 000144: 41 00 | i32.const 0 + 000146: 41 00 | i32.const 0 + 000149: fe 33 02 00 | i32.atomic.rmw.or 2 0 + 00014c: 1a | drop + 00014d: 41 00 | i32.const 0 + 00014f: 42 00 | i64.const 0 + 000152: fe 34 03 00 | i64.atomic.rmw.or 3 0 + 000155: 1a | drop + 000156: 41 00 | i32.const 0 + 000158: 41 00 | i32.const 0 + 00015b: fe 35 00 00 | i32.atomic.rmw8_u.or 0 0 + 00015e: 1a | drop + 00015f: 41 00 | i32.const 0 + 000161: 41 00 | i32.const 0 + 000164: fe 36 01 00 | i32.atomic.rmw16_u.or 1 0 + 000167: 1a | drop + 000168: 41 00 | i32.const 0 + 00016a: 42 00 | i64.const 0 + 00016d: fe 37 00 00 | i64.atomic.rmw8_u.or 0 0 + 000170: 1a | drop + 000171: 41 00 | i32.const 0 + 000173: 42 00 | i64.const 0 + 000176: fe 38 01 00 | i64.atomic.rmw16_u.or 1 0 + 000179: 1a | drop + 00017a: 41 00 | i32.const 0 + 00017c: 42 00 | i64.const 0 + 00017f: fe 39 02 00 | i64.atomic.rmw32_u.or 2 0 + 000182: 1a | drop + 000183: 41 00 | i32.const 0 + 000185: 41 00 | i32.const 0 + 000188: fe 3a 02 00 | i32.atomic.rmw.xor 2 0 + 00018b: 1a | drop + 00018c: 41 00 | i32.const 0 + 00018e: 42 00 | i64.const 0 + 000191: fe 3b 03 00 | i64.atomic.rmw.xor 3 0 + 000194: 1a | drop + 000195: 41 00 | i32.const 0 + 000197: 41 00 | i32.const 0 + 00019a: fe 3c 00 00 | i32.atomic.rmw8_u.xor 0 0 + 00019d: 1a | drop + 00019e: 41 00 | i32.const 0 + 0001a0: 41 00 | i32.const 0 + 0001a3: fe 3d 01 00 | i32.atomic.rmw16_u.xor 1 0 + 0001a6: 1a | drop + 0001a7: 41 00 | i32.const 0 + 0001a9: 42 00 | i64.const 0 + 0001ac: fe 3e 00 00 | i64.atomic.rmw8_u.xor 0 0 + 0001af: 1a | drop + 0001b0: 41 00 | i32.const 0 + 0001b2: 42 00 | i64.const 0 + 0001b5: fe 3f 01 00 | i64.atomic.rmw16_u.xor 1 0 + 0001b8: 1a | drop + 0001b9: 41 00 | i32.const 0 + 0001bb: 42 00 | i64.const 0 + 0001be: fe 40 02 00 | i64.atomic.rmw32_u.xor 2 0 + 0001c1: 1a | drop + 0001c2: 41 00 | i32.const 0 + 0001c4: 41 00 | i32.const 0 + 0001c7: fe 41 02 00 | i32.atomic.rmw.xchg 2 0 + 0001ca: 1a | drop + 0001cb: 41 00 | i32.const 0 + 0001cd: 42 00 | i64.const 0 + 0001d0: fe 42 03 00 | i64.atomic.rmw.xchg 3 0 + 0001d3: 1a | drop + 0001d4: 41 00 | i32.const 0 + 0001d6: 41 00 | i32.const 0 + 0001d9: fe 43 00 00 | i32.atomic.rmw8_u.xchg 0 0 + 0001dc: 1a | drop + 0001dd: 41 00 | i32.const 0 + 0001df: 41 00 | i32.const 0 + 0001e2: fe 44 01 00 | i32.atomic.rmw16_u.xchg 1 0 + 0001e5: 1a | drop + 0001e6: 41 00 | i32.const 0 + 0001e8: 42 00 | i64.const 0 + 0001eb: fe 45 00 00 | i64.atomic.rmw8_u.xchg 0 0 + 0001ee: 1a | drop + 0001ef: 41 00 | i32.const 0 + 0001f1: 42 00 | i64.const 0 + 0001f4: fe 46 01 00 | i64.atomic.rmw16_u.xchg 1 0 + 0001f7: 1a | drop + 0001f8: 41 00 | i32.const 0 + 0001fa: 42 00 | i64.const 0 + 0001fd: fe 47 02 00 | i64.atomic.rmw32_u.xchg 2 0 + 000200: 1a | drop + 000201: 41 00 | i32.const 0 + 000203: 41 00 | i32.const 0 + 000205: 41 00 | i32.const 0 + 000208: fe 48 02 00 | i32.atomic.rmw.cmpxchg 2 0 + 00020b: 1a | drop + 00020c: 41 00 | i32.const 0 + 00020e: 42 00 | i64.const 0 + 000210: 42 00 | i64.const 0 + 000213: fe 49 03 00 | i64.atomic.rmw.cmpxchg 3 0 + 000216: 1a | drop + 000217: 41 00 | i32.const 0 + 000219: 41 00 | i32.const 0 + 00021b: 41 00 | i32.const 0 + 00021e: fe 4a 00 00 | i32.atomic.rmw8_u.cmpxchg 0 0 + 000221: 1a | drop + 000222: 41 00 | i32.const 0 + 000224: 41 00 | i32.const 0 + 000226: 41 00 | i32.const 0 + 000229: fe 4b 01 00 | i32.atomic.rmw16_u.cmpxchg 1 0 + 00022c: 1a | drop + 00022d: 41 00 | i32.const 0 + 00022f: 42 00 | i64.const 0 + 000231: 42 00 | i64.const 0 + 000234: fe 4c 00 00 | i64.atomic.rmw8_u.cmpxchg 0 0 + 000237: 1a | drop + 000238: 41 00 | i32.const 0 + 00023a: 42 00 | i64.const 0 + 00023c: 42 00 | i64.const 0 + 00023f: fe 4d 01 00 | i64.atomic.rmw16_u.cmpxchg 1 0 + 000242: 1a | drop + 000243: 41 00 | i32.const 0 + 000245: 42 00 | i64.const 0 + 000247: 42 00 | i64.const 0 + 00024a: fe 4e 02 00 | i64.atomic.rmw32_u.cmpxchg 2 0 + 00024d: 1a | drop + 00024e: 0b | end +;;; STDOUT ;;) diff --git a/test/interp/atomic-load.txt b/test/interp/atomic-load.txt new file mode 100644 index 00000000..4c4cf722 --- /dev/null +++ b/test/interp/atomic-load.txt @@ -0,0 +1,54 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + (data (i32.const 0) "\ff\ff\ff\ff") + (data (i32.const 4) "\00\00\ce\41") + (data (i32.const 8) "\00\00\00\00\00\ff\8f\40") + + (func (export "i32.atomic.load8_u") (result i32) + i32.const 1 i32.atomic.load8_u) + (func (export "i32.atomic.load16_u") (result i32) + i32.const 2 i32.atomic.load16_u) + (func (export "i32.atomic.load") (result i32) + i32.const 4 i32.atomic.load) + + (func (export "i64.atomic.load8_u") (result i64) + i32.const 1 i64.atomic.load8_u) + (func (export "i64.atomic.load16_u") (result i64) + i32.const 2 i64.atomic.load16_u) + (func (export "i64.atomic.load32_u") (result i64) + i32.const 4 i64.atomic.load32_u) + (func (export "i64.atomic.load") (result i64) + i32.const 0 i64.atomic.load) + + ;; Test bad alignment + + (func (export "bad.align-i32.atomic.load16_u") (result i32) + i32.const 1 i32.atomic.load16_u) + (func (export "bad.align-i32.atomic.load") (result i32) + i32.const 2 i32.atomic.load) + + (func (export "bad.align-i64.atomic.load16_u") (result i64) + i32.const 1 i64.atomic.load16_u) + (func (export "bad.align-i64.atomic.load32_u") (result i64) + i32.const 2 i64.atomic.load32_u) + (func (export "bad.align-i64.atomic.load") (result i64) + i32.const 4 i64.atomic.load) + + +) +(;; STDOUT ;;; +i32.atomic.load8_u() => i32:255 +i32.atomic.load16_u() => i32:65535 +i32.atomic.load() => i32:1104019456 +i64.atomic.load8_u() => i64:255 +i64.atomic.load16_u() => i64:65535 +i64.atomic.load32_u() => i64:1104019456 +i64.atomic.load() => i64:4741727461962678271 +bad.align-i32.atomic.load16_u() => error: atomic memory access is unaligned +bad.align-i32.atomic.load() => error: atomic memory access is unaligned +bad.align-i64.atomic.load16_u() => error: atomic memory access is unaligned +bad.align-i64.atomic.load32_u() => error: atomic memory access is unaligned +bad.align-i64.atomic.load() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-rmw-add.txt b/test/interp/atomic-rmw-add.txt new file mode 100644 index 00000000..6691e7cf --- /dev/null +++ b/test/interp/atomic-rmw-add.txt @@ -0,0 +1,110 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + + ;; i32 + + (func (export "i32.atomic.rmw8_u.add-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw8_u.add) + + (func (export "i32.atomic.rmw8_u.add-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw8_u.add drop + i32.const 0 i32.load8_u) + + (func (export "i32.atomic.rmw16_u.add-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw16_u.add) + + (func (export "i32.atomic.rmw16_u.add-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw16_u.add drop + i32.const 0 i32.load16_u) + + (func (export "i32.atomic.rmw.add-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw.add) + + (func (export "i32.atomic.rmw.add-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw.add drop + i32.const 0 i32.load) + + + ;; i64 + + (func (export "i64.atomic.rmw8_u.add-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw8_u.add) + + (func (export "i64.atomic.rmw8_u.add-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw8_u.add drop + i32.const 0 i64.load8_u) + + (func (export "i64.atomic.rmw16_u.add-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw16_u.add) + + (func (export "i64.atomic.rmw16_u.add-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw16_u.add drop + i32.const 0 i64.load16_u) + + (func (export "i64.atomic.rmw32_u.add-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw32_u.add) + + (func (export "i64.atomic.rmw32_u.add-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw32_u.add drop + i32.const 0 i64.load32_u) + + (func (export "i64.atomic.rmw.add-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw.add) + + (func (export "i64.atomic.rmw.add-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw.add drop + i32.const 0 i64.load) + + + ;; Test bad alignment + + (func (export "bad_align-i32.atomic.rmw16_u.add") + i32.const 1 i32.const 0 i32.atomic.rmw16_u.add drop) + (func (export "bad_align-i32.atomic.rmw.add") + i32.const 2 i32.const 0 i32.atomic.rmw.add drop) + + (func (export "bad_align-i64.atomic.rmw16_u.add") + i32.const 1 i64.const 0 i64.atomic.rmw16_u.add drop) + (func (export "bad_align-i64.atomic.rmw32_u.add") + i32.const 2 i64.const 0 i64.atomic.rmw32_u.add drop) + (func (export "bad_align-i64.atomic.rmw.add") + i32.const 4 i64.const 0 i64.atomic.rmw.add drop) + +) +(;; STDOUT ;;; +i32.atomic.rmw8_u.add-result() => i32:64 +i32.atomic.rmw8_u.add-memory() => i32:65 +i32.atomic.rmw16_u.add-result() => i32:16960 +i32.atomic.rmw16_u.add-memory() => i32:16961 +i32.atomic.rmw.add-result() => i32:1000000 +i32.atomic.rmw.add-memory() => i32:1000001 +i64.atomic.rmw8_u.add-result() => i64:0 +i64.atomic.rmw8_u.add-memory() => i64:1 +i64.atomic.rmw16_u.add-result() => i64:58368 +i64.atomic.rmw16_u.add-memory() => i64:58369 +i64.atomic.rmw32_u.add-result() => i64:1410065408 +i64.atomic.rmw32_u.add-memory() => i64:1410065409 +i64.atomic.rmw.add-result() => i64:10000000000 +i64.atomic.rmw.add-memory() => i64:10000000001 +bad_align-i32.atomic.rmw16_u.add() => error: atomic memory access is unaligned +bad_align-i32.atomic.rmw.add() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw16_u.add() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw32_u.add() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw.add() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-rmw-and.txt b/test/interp/atomic-rmw-and.txt new file mode 100644 index 00000000..6dee152d --- /dev/null +++ b/test/interp/atomic-rmw-and.txt @@ -0,0 +1,110 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + + ;; i32 + + (func (export "i32.atomic.rmw8_u.and-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 64 i32.atomic.rmw8_u.and) + + (func (export "i32.atomic.rmw8_u.and-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 64 i32.atomic.rmw8_u.and drop + i32.const 0 i32.load8_u) + + (func (export "i32.atomic.rmw16_u.and-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 64 i32.atomic.rmw16_u.and) + + (func (export "i32.atomic.rmw16_u.and-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 64 i32.atomic.rmw16_u.and drop + i32.const 0 i32.load16_u) + + (func (export "i32.atomic.rmw.and-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 64 i32.atomic.rmw.and) + + (func (export "i32.atomic.rmw.and-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 64 i32.atomic.rmw.and drop + i32.const 0 i32.load) + + + ;; i64 + + (func (export "i64.atomic.rmw8_u.and-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 64 i64.atomic.rmw8_u.and) + + (func (export "i64.atomic.rmw8_u.and-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 64 i64.atomic.rmw8_u.and drop + i32.const 0 i64.load8_u) + + (func (export "i64.atomic.rmw16_u.and-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1024 i64.atomic.rmw16_u.and) + + (func (export "i64.atomic.rmw16_u.and-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1024 i64.atomic.rmw16_u.and drop + i32.const 0 i64.load16_u) + + (func (export "i64.atomic.rmw32_u.and-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1024 i64.atomic.rmw32_u.and) + + (func (export "i64.atomic.rmw32_u.and-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1024 i64.atomic.rmw32_u.and drop + i32.const 0 i64.load32_u) + + (func (export "i64.atomic.rmw.and-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1024 i64.atomic.rmw.and) + + (func (export "i64.atomic.rmw.and-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1024 i64.atomic.rmw.and drop + i32.const 0 i64.load) + + + ;; Test bad alignment + + (func (export "bad_align-i32.atomic.rmw16_u.and") + i32.const 1 i32.const 0 i32.atomic.rmw16_u.and drop) + (func (export "bad_align-i32.atomic.rmw.and") + i32.const 2 i32.const 0 i32.atomic.rmw.and drop) + + (func (export "bad_align-i64.atomic.rmw16_u.and") + i32.const 1 i64.const 0 i64.atomic.rmw16_u.and drop) + (func (export "bad_align-i64.atomic.rmw32_u.and") + i32.const 2 i64.const 0 i64.atomic.rmw32_u.and drop) + (func (export "bad_align-i64.atomic.rmw.and") + i32.const 4 i64.const 0 i64.atomic.rmw.and drop) + +) +(;; STDOUT ;;; +i32.atomic.rmw8_u.and-result() => i32:64 +i32.atomic.rmw8_u.and-memory() => i32:64 +i32.atomic.rmw16_u.and-result() => i32:16960 +i32.atomic.rmw16_u.and-memory() => i32:64 +i32.atomic.rmw.and-result() => i32:1000000 +i32.atomic.rmw.and-memory() => i32:64 +i64.atomic.rmw8_u.and-result() => i64:0 +i64.atomic.rmw8_u.and-memory() => i64:0 +i64.atomic.rmw16_u.and-result() => i64:58368 +i64.atomic.rmw16_u.and-memory() => i64:1024 +i64.atomic.rmw32_u.and-result() => i64:1410065408 +i64.atomic.rmw32_u.and-memory() => i64:1024 +i64.atomic.rmw.and-result() => i64:10000000000 +i64.atomic.rmw.and-memory() => i64:1024 +bad_align-i32.atomic.rmw16_u.and() => error: atomic memory access is unaligned +bad_align-i32.atomic.rmw.and() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw16_u.and() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw32_u.and() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw.and() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-rmw-cmpxchg.txt b/test/interp/atomic-rmw-cmpxchg.txt new file mode 100644 index 00000000..74acfc7e --- /dev/null +++ b/test/interp/atomic-rmw-cmpxchg.txt @@ -0,0 +1,180 @@ +;;; FLAGS: --enable-threads +;;; TOOL: run-interp +(module + (memory 1) + + ;; i32 + + (func (export "i32.atomic.rmw8_u.cmpxchg-true-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1000000 i32.const 1 i32.atomic.rmw8_u.cmpxchg) + (func (export "i32.atomic.rmw8_u.cmpxchg-true-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1000000 i32.const 1 i32.atomic.rmw8_u.cmpxchg drop + i32.const 0 i32.load8_u) + + (func (export "i32.atomic.rmw8_u.cmpxchg-false-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 123 i32.const 1 i32.atomic.rmw8_u.cmpxchg) + (func (export "i32.atomic.rmw8_u.cmpxchg-false-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 123 i32.const 1 i32.atomic.rmw8_u.cmpxchg drop + i32.const 0 i32.load8_u) + + + (func (export "i32.atomic.rmw16_u.cmpxchg-true-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1000000 i32.const 1 i32.atomic.rmw16_u.cmpxchg) + (func (export "i32.atomic.rmw16_u.cmpxchg-true-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1000000 i32.const 1 i32.atomic.rmw16_u.cmpxchg drop + i32.const 0 i32.load16_u) + + (func (export "i32.atomic.rmw16_u.cmpxchg-false-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 123 i32.const 1 i32.atomic.rmw16_u.cmpxchg) + (func (export "i32.atomic.rmw16_u.cmpxchg-false-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 123 i32.const 1 i32.atomic.rmw16_u.cmpxchg drop + i32.const 0 i32.load16_u) + + + (func (export "i32.atomic.rmw.cmpxchg-true-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1000000 i32.const 1 i32.atomic.rmw.cmpxchg) + (func (export "i32.atomic.rmw.cmpxchg-true-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1000000 i32.const 1 i32.atomic.rmw.cmpxchg drop + i32.const 0 i32.load) + + (func (export "i32.atomic.rmw.cmpxchg-false-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 123 i32.const 1 i32.atomic.rmw.cmpxchg) + + (func (export "i32.atomic.rmw.cmpxchg-false-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 123 i32.const 1 i32.atomic.rmw.cmpxchg drop + i32.const 0 i32.load) + + + + ;; i64 + + (func (export "i64.atomic.rmw8_u.cmpxchg-true-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw8_u.cmpxchg) + (func (export "i64.atomic.rmw8_u.cmpxchg-true-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw8_u.cmpxchg drop + i32.const 0 i64.load8_u) + + (func (export "i64.atomic.rmw8_u.cmpxchg-false-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw8_u.cmpxchg) + (func (export "i64.atomic.rmw8_u.cmpxchg-false-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw8_u.cmpxchg drop + i32.const 0 i64.load8_u) + + + (func (export "i64.atomic.rmw16_u.cmpxchg-true-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw16_u.cmpxchg) + (func (export "i64.atomic.rmw16_u.cmpxchg-true-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.load16_u) + + (func (export "i64.atomic.rmw16_u.cmpxchg-false-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw16_u.cmpxchg) + (func (export "i64.atomic.rmw16_u.cmpxchg-false-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.load16_u) + + + (func (export "i64.atomic.rmw32_u.cmpxchg-true-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw32_u.cmpxchg) + (func (export "i64.atomic.rmw32_u.cmpxchg-true-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw32_u.cmpxchg drop + i32.const 0 i64.load32_u) + + (func (export "i64.atomic.rmw32_u.cmpxchg-false-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw32_u.cmpxchg) + (func (export "i64.atomic.rmw32_u.cmpxchg-false-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw32_u.cmpxchg drop + i32.const 0 i64.load32_u) + + + (func (export "i64.atomic.rmw.cmpxchg-true-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw.cmpxchg) + (func (export "i64.atomic.rmw.cmpxchg-true-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 10000000000 i64.const 1 i64.atomic.rmw.cmpxchg drop + i32.const 0 i64.load) + + (func (export "i64.atomic.rmw.cmpxchg-false-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw.cmpxchg) + (func (export "i64.atomic.rmw.cmpxchg-false-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 123 i64.const 1 i64.atomic.rmw.cmpxchg drop + i32.const 0 i64.load) + + + ;; Test bad alignment + + (func (export "bad_align-i32.atomic.rmw16_u.cmpxchg") + i32.const 1 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop) + (func (export "bad_align-i32.atomic.rmw.cmpxchg") + i32.const 2 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop) + + (func (export "bad_align-i64.atomic.rmw16_u.cmpxchg") + i32.const 1 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop) + (func (export "bad_align-i64.atomic.rmw32_u.cmpxchg") + i32.const 2 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop) + (func (export "bad_align-i64.atomic.rmw.cmpxchg") + i32.const 4 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop) + +) +(;; STDOUT ;;; +i32.atomic.rmw8_u.cmpxchg-true-result() => i32:64 +i32.atomic.rmw8_u.cmpxchg-true-memory() => i32:1 +i32.atomic.rmw8_u.cmpxchg-false-result() => i32:64 +i32.atomic.rmw8_u.cmpxchg-false-memory() => i32:64 +i32.atomic.rmw16_u.cmpxchg-true-result() => i32:16960 +i32.atomic.rmw16_u.cmpxchg-true-memory() => i32:1 +i32.atomic.rmw16_u.cmpxchg-false-result() => i32:16960 +i32.atomic.rmw16_u.cmpxchg-false-memory() => i32:16960 +i32.atomic.rmw.cmpxchg-true-result() => i32:1000000 +i32.atomic.rmw.cmpxchg-true-memory() => i32:1 +i32.atomic.rmw.cmpxchg-false-result() => i32:1000000 +i32.atomic.rmw.cmpxchg-false-memory() => i32:1000000 +i64.atomic.rmw8_u.cmpxchg-true-result() => i64:0 +i64.atomic.rmw8_u.cmpxchg-true-memory() => i64:1 +i64.atomic.rmw8_u.cmpxchg-false-result() => i64:0 +i64.atomic.rmw8_u.cmpxchg-false-memory() => i64:0 +i64.atomic.rmw16_u.cmpxchg-true-result() => i64:58368 +i64.atomic.rmw16_u.cmpxchg-true-memory() => i64:1 +i64.atomic.rmw16_u.cmpxchg-false-result() => i64:58368 +i64.atomic.rmw16_u.cmpxchg-false-memory() => i64:58368 +i64.atomic.rmw32_u.cmpxchg-true-result() => i64:1410065408 +i64.atomic.rmw32_u.cmpxchg-true-memory() => i64:1 +i64.atomic.rmw32_u.cmpxchg-false-result() => i64:1410065408 +i64.atomic.rmw32_u.cmpxchg-false-memory() => i64:1410065408 +i64.atomic.rmw.cmpxchg-true-result() => i64:10000000000 +i64.atomic.rmw.cmpxchg-true-memory() => i64:1 +i64.atomic.rmw.cmpxchg-false-result() => i64:10000000000 +i64.atomic.rmw.cmpxchg-false-memory() => i64:10000000000 +bad_align-i32.atomic.rmw16_u.cmpxchg() => error: atomic memory access is unaligned +bad_align-i32.atomic.rmw.cmpxchg() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw16_u.cmpxchg() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw32_u.cmpxchg() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw.cmpxchg() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-rmw-or.txt b/test/interp/atomic-rmw-or.txt new file mode 100644 index 00000000..4781ab3d --- /dev/null +++ b/test/interp/atomic-rmw-or.txt @@ -0,0 +1,110 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + + ;; i32 + + (func (export "i32.atomic.rmw8_u.or-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw8_u.or) + + (func (export "i32.atomic.rmw8_u.or-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw8_u.or drop + i32.const 0 i32.load8_u) + + (func (export "i32.atomic.rmw16_u.or-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw16_u.or) + + (func (export "i32.atomic.rmw16_u.or-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw16_u.or drop + i32.const 0 i32.load16_u) + + (func (export "i32.atomic.rmw.or-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw.or) + + (func (export "i32.atomic.rmw.or-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw.or drop + i32.const 0 i32.load) + + + ;; i64 + + (func (export "i64.atomic.rmw8_u.or-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 65 i64.atomic.rmw8_u.or) + + (func (export "i64.atomic.rmw8_u.or-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 65 i64.atomic.rmw8_u.or drop + i32.const 0 i64.load8_u) + + (func (export "i64.atomic.rmw16_u.or-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw16_u.or) + + (func (export "i64.atomic.rmw16_u.or-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw16_u.or drop + i32.const 0 i64.load16_u) + + (func (export "i64.atomic.rmw32_u.or-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw32_u.or) + + (func (export "i64.atomic.rmw32_u.or-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw32_u.or drop + i32.const 0 i64.load32_u) + + (func (export "i64.atomic.rmw.or-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw.or) + + (func (export "i64.atomic.rmw.or-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw.or drop + i32.const 0 i64.load) + + + ;; Test bad alignment + + (func (export "bad_align-i32.atomic.rmw16_u.or") + i32.const 1 i32.const 0 i32.atomic.rmw16_u.or drop) + (func (export "bad_align-i32.atomic.rmw.or") + i32.const 2 i32.const 0 i32.atomic.rmw.or drop) + + (func (export "bad_align-i64.atomic.rmw16_u.or") + i32.const 1 i64.const 0 i64.atomic.rmw16_u.or drop) + (func (export "bad_align-i64.atomic.rmw32_u.or") + i32.const 2 i64.const 0 i64.atomic.rmw32_u.or drop) + (func (export "bad_align-i64.atomic.rmw.or") + i32.const 4 i64.const 0 i64.atomic.rmw.or drop) + +) +(;; STDOUT ;;; +i32.atomic.rmw8_u.or-result() => i32:64 +i32.atomic.rmw8_u.or-memory() => i32:65 +i32.atomic.rmw16_u.or-result() => i32:16960 +i32.atomic.rmw16_u.or-memory() => i32:16961 +i32.atomic.rmw.or-result() => i32:1000000 +i32.atomic.rmw.or-memory() => i32:1000001 +i64.atomic.rmw8_u.or-result() => i64:0 +i64.atomic.rmw8_u.or-memory() => i64:65 +i64.atomic.rmw16_u.or-result() => i64:58368 +i64.atomic.rmw16_u.or-memory() => i64:58369 +i64.atomic.rmw32_u.or-result() => i64:1410065408 +i64.atomic.rmw32_u.or-memory() => i64:1410065409 +i64.atomic.rmw.or-result() => i64:10000000000 +i64.atomic.rmw.or-memory() => i64:10000000001 +bad_align-i32.atomic.rmw16_u.or() => error: atomic memory access is unaligned +bad_align-i32.atomic.rmw.or() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw16_u.or() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw32_u.or() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw.or() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-rmw-sub.txt b/test/interp/atomic-rmw-sub.txt new file mode 100644 index 00000000..5f46d12c --- /dev/null +++ b/test/interp/atomic-rmw-sub.txt @@ -0,0 +1,110 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + + ;; i32 + + (func (export "i32.atomic.rmw8_u.sub-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw8_u.sub) + + (func (export "i32.atomic.rmw8_u.sub-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw8_u.sub drop + i32.const 0 i32.load8_u) + + (func (export "i32.atomic.rmw16_u.sub-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw16_u.sub) + + (func (export "i32.atomic.rmw16_u.sub-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw16_u.sub drop + i32.const 0 i32.load16_u) + + (func (export "i32.atomic.rmw.sub-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw.sub) + + (func (export "i32.atomic.rmw.sub-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw.sub drop + i32.const 0 i32.load) + + + ;; i64 + + (func (export "i64.atomic.rmw8_u.sub-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw8_u.sub) + + (func (export "i64.atomic.rmw8_u.sub-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw8_u.sub drop + i32.const 0 i64.load8_u) + + (func (export "i64.atomic.rmw16_u.sub-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw16_u.sub) + + (func (export "i64.atomic.rmw16_u.sub-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw16_u.sub drop + i32.const 0 i64.load16_u) + + (func (export "i64.atomic.rmw32_u.sub-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw32_u.sub) + + (func (export "i64.atomic.rmw32_u.sub-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw32_u.sub drop + i32.const 0 i64.load32_u) + + (func (export "i64.atomic.rmw.sub-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw.sub) + + (func (export "i64.atomic.rmw.sub-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw.sub drop + i32.const 0 i64.load) + + + ;; Test bad alignment + + (func (export "bad_align-i32.atomic.rmw16_u.sub") + i32.const 1 i32.const 0 i32.atomic.rmw16_u.sub drop) + (func (export "bad_align-i32.atomic.rmw.sub") + i32.const 2 i32.const 0 i32.atomic.rmw.sub drop) + + (func (export "bad_align-i64.atomic.rmw16_u.sub") + i32.const 1 i64.const 0 i64.atomic.rmw16_u.sub drop) + (func (export "bad_align-i64.atomic.rmw32_u.sub") + i32.const 2 i64.const 0 i64.atomic.rmw32_u.sub drop) + (func (export "bad_align-i64.atomic.rmw.sub") + i32.const 4 i64.const 0 i64.atomic.rmw.sub drop) + +) +(;; STDOUT ;;; +i32.atomic.rmw8_u.sub-result() => i32:64 +i32.atomic.rmw8_u.sub-memory() => i32:63 +i32.atomic.rmw16_u.sub-result() => i32:16960 +i32.atomic.rmw16_u.sub-memory() => i32:16959 +i32.atomic.rmw.sub-result() => i32:1000000 +i32.atomic.rmw.sub-memory() => i32:999999 +i64.atomic.rmw8_u.sub-result() => i64:0 +i64.atomic.rmw8_u.sub-memory() => i64:255 +i64.atomic.rmw16_u.sub-result() => i64:58368 +i64.atomic.rmw16_u.sub-memory() => i64:58367 +i64.atomic.rmw32_u.sub-result() => i64:1410065408 +i64.atomic.rmw32_u.sub-memory() => i64:1410065407 +i64.atomic.rmw.sub-result() => i64:10000000000 +i64.atomic.rmw.sub-memory() => i64:9999999999 +bad_align-i32.atomic.rmw16_u.sub() => error: atomic memory access is unaligned +bad_align-i32.atomic.rmw.sub() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw16_u.sub() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw32_u.sub() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw.sub() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-rmw-xchg.txt b/test/interp/atomic-rmw-xchg.txt new file mode 100644 index 00000000..e824203f --- /dev/null +++ b/test/interp/atomic-rmw-xchg.txt @@ -0,0 +1,110 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + + ;; i32 + + (func (export "i32.atomic.rmw8_u.xchg-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw8_u.xchg) + + (func (export "i32.atomic.rmw8_u.xchg-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw8_u.xchg drop + i32.const 0 i32.load8_u) + + (func (export "i32.atomic.rmw16_u.xchg-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw16_u.xchg) + + (func (export "i32.atomic.rmw16_u.xchg-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw16_u.xchg drop + i32.const 0 i32.load16_u) + + (func (export "i32.atomic.rmw.xchg-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw.xchg) + + (func (export "i32.atomic.rmw.xchg-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 1 i32.atomic.rmw.xchg drop + i32.const 0 i32.load) + + + ;; i64 + + (func (export "i64.atomic.rmw8_u.xchg-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw8_u.xchg) + + (func (export "i64.atomic.rmw8_u.xchg-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw8_u.xchg drop + i32.const 0 i64.load8_u) + + (func (export "i64.atomic.rmw16_u.xchg-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw16_u.xchg) + + (func (export "i64.atomic.rmw16_u.xchg-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw16_u.xchg drop + i32.const 0 i64.load16_u) + + (func (export "i64.atomic.rmw32_u.xchg-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw32_u.xchg) + + (func (export "i64.atomic.rmw32_u.xchg-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw32_u.xchg drop + i32.const 0 i64.load32_u) + + (func (export "i64.atomic.rmw.xchg-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw.xchg) + + (func (export "i64.atomic.rmw.xchg-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1 i64.atomic.rmw.xchg drop + i32.const 0 i64.load) + + + ;; Test bad alignment + + (func (export "bad_align-i32.atomic.rmw16_u.xchg") + i32.const 1 i32.const 0 i32.atomic.rmw16_u.xchg drop) + (func (export "bad_align-i32.atomic.rmw.xchg") + i32.const 2 i32.const 0 i32.atomic.rmw.xchg drop) + + (func (export "bad_align-i64.atomic.rmw16_u.xchg") + i32.const 1 i64.const 0 i64.atomic.rmw16_u.xchg drop) + (func (export "bad_align-i64.atomic.rmw32_u.xchg") + i32.const 2 i64.const 0 i64.atomic.rmw32_u.xchg drop) + (func (export "bad_align-i64.atomic.rmw.xchg") + i32.const 4 i64.const 0 i64.atomic.rmw.xchg drop) + +) +(;; STDOUT ;;; +i32.atomic.rmw8_u.xchg-result() => i32:64 +i32.atomic.rmw8_u.xchg-memory() => i32:1 +i32.atomic.rmw16_u.xchg-result() => i32:16960 +i32.atomic.rmw16_u.xchg-memory() => i32:1 +i32.atomic.rmw.xchg-result() => i32:1000000 +i32.atomic.rmw.xchg-memory() => i32:1 +i64.atomic.rmw8_u.xchg-result() => i64:0 +i64.atomic.rmw8_u.xchg-memory() => i64:1 +i64.atomic.rmw16_u.xchg-result() => i64:58368 +i64.atomic.rmw16_u.xchg-memory() => i64:1 +i64.atomic.rmw32_u.xchg-result() => i64:1410065408 +i64.atomic.rmw32_u.xchg-memory() => i64:1 +i64.atomic.rmw.xchg-result() => i64:10000000000 +i64.atomic.rmw.xchg-memory() => i64:1 +bad_align-i32.atomic.rmw16_u.xchg() => error: atomic memory access is unaligned +bad_align-i32.atomic.rmw.xchg() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw16_u.xchg() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw32_u.xchg() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw.xchg() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-rmw-xor.txt b/test/interp/atomic-rmw-xor.txt new file mode 100644 index 00000000..58352200 --- /dev/null +++ b/test/interp/atomic-rmw-xor.txt @@ -0,0 +1,110 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + + ;; i32 + + (func (export "i32.atomic.rmw8_u.xor-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw8_u.xor) + + (func (export "i32.atomic.rmw8_u.xor-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw8_u.xor drop + i32.const 0 i32.load8_u) + + (func (export "i32.atomic.rmw16_u.xor-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw16_u.xor) + + (func (export "i32.atomic.rmw16_u.xor-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw16_u.xor drop + i32.const 0 i32.load16_u) + + (func (export "i32.atomic.rmw.xor-result") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw.xor) + + (func (export "i32.atomic.rmw.xor-memory") (result i32) + i32.const 0 i32.const 1000000 i32.store + i32.const 0 i32.const 65 i32.atomic.rmw.xor drop + i32.const 0 i32.load) + + + ;; i64 + + (func (export "i64.atomic.rmw8_u.xor-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 65 i64.atomic.rmw8_u.xor) + + (func (export "i64.atomic.rmw8_u.xor-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 65 i64.atomic.rmw8_u.xor drop + i32.const 0 i64.load8_u) + + (func (export "i64.atomic.rmw16_u.xor-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw16_u.xor) + + (func (export "i64.atomic.rmw16_u.xor-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw16_u.xor drop + i32.const 0 i64.load16_u) + + (func (export "i64.atomic.rmw32_u.xor-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw32_u.xor) + + (func (export "i64.atomic.rmw32_u.xor-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw32_u.xor drop + i32.const 0 i64.load32_u) + + (func (export "i64.atomic.rmw.xor-result") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw.xor) + + (func (export "i64.atomic.rmw.xor-memory") (result i64) + i32.const 0 i64.const 10000000000 i64.store + i32.const 0 i64.const 1025 i64.atomic.rmw.xor drop + i32.const 0 i64.load) + + + ;; Test bad alignment + + (func (export "bad_align-i32.atomic.rmw16_u.xor") + i32.const 1 i32.const 0 i32.atomic.rmw16_u.xor drop) + (func (export "bad_align-i32.atomic.rmw.xor") + i32.const 2 i32.const 0 i32.atomic.rmw.xor drop) + + (func (export "bad_align-i64.atomic.rmw16_u.xor") + i32.const 1 i64.const 0 i64.atomic.rmw16_u.xor drop) + (func (export "bad_align-i64.atomic.rmw32_u.xor") + i32.const 2 i64.const 0 i64.atomic.rmw32_u.xor drop) + (func (export "bad_align-i64.atomic.rmw.xor") + i32.const 4 i64.const 0 i64.atomic.rmw.xor drop) + +) +(;; STDOUT ;;; +i32.atomic.rmw8_u.xor-result() => i32:64 +i32.atomic.rmw8_u.xor-memory() => i32:1 +i32.atomic.rmw16_u.xor-result() => i32:16960 +i32.atomic.rmw16_u.xor-memory() => i32:16897 +i32.atomic.rmw.xor-result() => i32:1000000 +i32.atomic.rmw.xor-memory() => i32:999937 +i64.atomic.rmw8_u.xor-result() => i64:0 +i64.atomic.rmw8_u.xor-memory() => i64:65 +i64.atomic.rmw16_u.xor-result() => i64:58368 +i64.atomic.rmw16_u.xor-memory() => i64:57345 +i64.atomic.rmw32_u.xor-result() => i64:1410065408 +i64.atomic.rmw32_u.xor-memory() => i64:1410064385 +i64.atomic.rmw.xor-result() => i64:10000000000 +i64.atomic.rmw.xor-memory() => i64:9999998977 +bad_align-i32.atomic.rmw16_u.xor() => error: atomic memory access is unaligned +bad_align-i32.atomic.rmw.xor() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw16_u.xor() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw32_u.xor() => error: atomic memory access is unaligned +bad_align-i64.atomic.rmw.xor() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/interp/atomic-store.txt b/test/interp/atomic-store.txt new file mode 100644 index 00000000..f4a60050 --- /dev/null +++ b/test/interp/atomic-store.txt @@ -0,0 +1,70 @@ +;;; TOOL: run-interp +;;; FLAGS: --enable-threads +(module + (memory 1) + + (func (export "i32.atomic.store8") (result i32) + i32.const 0 i32.const 0xfb i32.atomic.store8 + i32.const 1 i32.const 0xfc i32.atomic.store8 + i32.const 2 i32.const 0xfd i32.atomic.store8 + i32.const 3 i32.const 0xfe i32.atomic.store8 + i32.const 0 i32.load) + + (func (export "i32.atomic.store16") (result i32) + i32.const 0 i32.const 0xcac9 i32.atomic.store16 + i32.const 2 i32.const 0xcccb i32.atomic.store16 + i32.const 0 i32.load) + + (func (export "i32.atomic.store") (result i32) + i32.const 0 i32.const -123456 i32.atomic.store + i32.const 0 i32.load) + + (func (export "i64.atomic.store8") (result i32) + i32.const 0 i64.const 0xeeeeeeeeeeeeeefb i64.atomic.store8 + i32.const 1 i64.const 0xeeeeeeeeeeeeeefc i64.atomic.store8 + i32.const 2 i64.const 0xeeeeeeeeeeeeeefd i64.atomic.store8 + i32.const 3 i64.const 0xeeeeeeeeeeeeeefe i64.atomic.store8 + i32.const 0 i32.load) + + (func (export "i64.atomic.store16") (result i32) + i32.const 0 i64.const 0xeeeeeeeeeeeecac9 i64.atomic.store16 + i32.const 2 i64.const 0xeeeeeeeeeeeecccb i64.atomic.store16 + i32.const 0 i32.load) + + (func (export "i64.atomic.store32") (result i32) + i32.const 0 i64.const -123456 i64.atomic.store32 + i32.const 0 i32.load) + + (func (export "i64.atomic.store") (result i64) + i32.const 0 i64.const 0xbaddc0de600dd00d i64.atomic.store + i32.const 0 i64.load) + + ;; Test bad alignment + + (func (export "bad.align-i32.atomic.store16") + i32.const 1 i32.const 0 i32.atomic.store16) + (func (export "bad.align-i32.atomic.store") + i32.const 2 i32.const 0 i32.atomic.store) + + (func (export "bad.align-i64.atomic.store16") + i32.const 1 i64.const 0 i64.atomic.store16) + (func (export "bad.align-i64.atomic.store32") + i32.const 2 i64.const 0 i64.atomic.store32) + (func (export "bad.align-i64.atomic.store") + i32.const 4 i64.const 0 i64.atomic.store) + +) +(;; STDOUT ;;; +i32.atomic.store8() => i32:4278058235 +i32.atomic.store16() => i32:3435907785 +i32.atomic.store() => i32:4294843840 +i64.atomic.store8() => i32:4278058235 +i64.atomic.store16() => i32:3435907785 +i64.atomic.store32() => i32:4294843840 +i64.atomic.store() => i64:13465130522234441741 +bad.align-i32.atomic.store16() => error: atomic memory access is unaligned +bad.align-i32.atomic.store() => error: atomic memory access is unaligned +bad.align-i64.atomic.store16() => error: atomic memory access is unaligned +bad.align-i64.atomic.store32() => error: atomic memory access is unaligned +bad.align-i64.atomic.store() => error: atomic memory access is unaligned +;;; STDOUT ;;) diff --git a/test/parse/expr/atomic-align.txt b/test/parse/expr/atomic-align.txt new file mode 100644 index 00000000..fc671ad4 --- /dev/null +++ b/test/parse/expr/atomic-align.txt @@ -0,0 +1,77 @@ +;;; FLAGS: --enable-threads +(module + (memory 1) + (func + i32.const 0 i32.atomic.load align=4 drop + i32.const 0 i64.atomic.load align=8 drop + i32.const 0 i32.atomic.load8_u align=1 drop + i32.const 0 i32.atomic.load16_u align=2 drop + i32.const 0 i64.atomic.load8_u align=1 drop + i32.const 0 i64.atomic.load16_u align=2 drop + i32.const 0 i64.atomic.load32_u align=4 drop + + i32.const 0 i32.const 0 i32.atomic.store align=4 + i32.const 0 i64.const 0 i64.atomic.store align=8 + i32.const 0 i32.const 0 i32.atomic.store8 align=1 + i32.const 0 i32.const 0 i32.atomic.store16 align=2 + i32.const 0 i64.const 0 i64.atomic.store8 align=1 + i32.const 0 i64.const 0 i64.atomic.store16 align=2 + i32.const 0 i64.const 0 i64.atomic.store32 align=4 + + i32.const 0 i32.const 0 i32.atomic.rmw.add align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw.add align=8 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add align=1 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add align=1 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add align=4 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.sub align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw.sub align=8 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub align=1 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub align=1 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub align=4 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.and align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw.and align=8 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and align=1 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and align=1 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and align=4 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.or align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw.or align=8 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or align=1 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or align=1 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or align=4 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xor align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw.xor align=8 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor align=1 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor align=1 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor align=4 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xchg align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw.xchg align=8 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg align=1 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg align=1 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg align=4 drop + + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg align=4 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg align=8 drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg align=1 drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg align=2 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg align=1 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg align=2 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg align=4 drop + +)) diff --git a/test/parse/expr/atomic-disabled.txt b/test/parse/expr/atomic-disabled.txt new file mode 100644 index 00000000..43124dfe --- /dev/null +++ b/test/parse/expr/atomic-disabled.txt @@ -0,0 +1,269 @@ +;;; ERROR: 1 + +(module + (memory 1) + (func + i32.const 0 i32.atomic.load drop + i32.const 0 i64.atomic.load drop + i32.const 0 i32.atomic.load8_u drop + i32.const 0 i32.atomic.load16_u drop + i32.const 0 i64.atomic.load8_u drop + i32.const 0 i64.atomic.load16_u drop + i32.const 0 i64.atomic.load32_u drop + + i32.const 0 i32.const 0 i32.atomic.store + i32.const 0 i64.const 0 i64.atomic.store + i32.const 0 i32.const 0 i32.atomic.store8 + i32.const 0 i32.const 0 i32.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store8 + i32.const 0 i64.const 0 i64.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store32 + + i32.const 0 i32.const 0 i32.atomic.rmw.add drop + i32.const 0 i64.const 0 i64.atomic.rmw.add drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add drop + + i32.const 0 i32.const 0 i32.atomic.rmw.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub drop + + i32.const 0 i32.const 0 i32.atomic.rmw.and drop + i32.const 0 i64.const 0 i64.atomic.rmw.and drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and drop + + i32.const 0 i32.const 0 i32.atomic.rmw.or drop + i32.const 0 i64.const 0 i64.atomic.rmw.or drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg drop + + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop + +)) +(;; STDERR ;;; +out/test/parse/expr/atomic-disabled.txt:6:17: error: opcode not allowed: i32.atomic.load + i32.const 0 i32.atomic.load drop + ^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:7:17: error: opcode not allowed: i64.atomic.load + i32.const 0 i64.atomic.load drop + ^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:8:17: error: opcode not allowed: i32.atomic.load8_u + i32.const 0 i32.atomic.load8_u drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:9:17: error: opcode not allowed: i32.atomic.load16_u + i32.const 0 i32.atomic.load16_u drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:10:17: error: opcode not allowed: i64.atomic.load8_u + i32.const 0 i64.atomic.load8_u drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:11:17: error: opcode not allowed: i64.atomic.load16_u + i32.const 0 i64.atomic.load16_u drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:12:17: error: opcode not allowed: i64.atomic.load32_u + i32.const 0 i64.atomic.load32_u drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:14:29: error: opcode not allowed: i32.atomic.store + i32.const 0 i32.const 0 i32.atomic.store + ^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:15:29: error: opcode not allowed: i64.atomic.store + i32.const 0 i64.const 0 i64.atomic.store + ^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:16:29: error: opcode not allowed: i32.atomic.store8 + i32.const 0 i32.const 0 i32.atomic.store8 + ^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:17:29: error: opcode not allowed: i32.atomic.store16 + i32.const 0 i32.const 0 i32.atomic.store16 + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:18:29: error: opcode not allowed: i64.atomic.store8 + i32.const 0 i64.const 0 i64.atomic.store8 + ^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:19:29: error: opcode not allowed: i64.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store16 + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:20:29: error: opcode not allowed: i64.atomic.store32 + i32.const 0 i64.const 0 i64.atomic.store32 + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:22:29: error: opcode not allowed: i32.atomic.rmw.add + i32.const 0 i32.const 0 i32.atomic.rmw.add drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:23:29: error: opcode not allowed: i64.atomic.rmw.add + i32.const 0 i64.const 0 i64.atomic.rmw.add drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:24:29: error: opcode not allowed: i32.atomic.rmw8_u.add + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:25:29: error: opcode not allowed: i32.atomic.rmw16_u.add + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:26:29: error: opcode not allowed: i64.atomic.rmw8_u.add + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:27:29: error: opcode not allowed: i64.atomic.rmw16_u.add + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:28:29: error: opcode not allowed: i64.atomic.rmw32_u.add + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:30:29: error: opcode not allowed: i32.atomic.rmw.sub + i32.const 0 i32.const 0 i32.atomic.rmw.sub drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:31:29: error: opcode not allowed: i64.atomic.rmw.sub + i32.const 0 i64.const 0 i64.atomic.rmw.sub drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:32:29: error: opcode not allowed: i32.atomic.rmw8_u.sub + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:33:29: error: opcode not allowed: i32.atomic.rmw16_u.sub + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:34:29: error: opcode not allowed: i64.atomic.rmw8_u.sub + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:35:29: error: opcode not allowed: i64.atomic.rmw16_u.sub + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:36:29: error: opcode not allowed: i64.atomic.rmw32_u.sub + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:38:29: error: opcode not allowed: i32.atomic.rmw.and + i32.const 0 i32.const 0 i32.atomic.rmw.and drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:39:29: error: opcode not allowed: i64.atomic.rmw.and + i32.const 0 i64.const 0 i64.atomic.rmw.and drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:40:29: error: opcode not allowed: i32.atomic.rmw8_u.and + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:41:29: error: opcode not allowed: i32.atomic.rmw16_u.and + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:42:29: error: opcode not allowed: i64.atomic.rmw8_u.and + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:43:29: error: opcode not allowed: i64.atomic.rmw16_u.and + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:44:29: error: opcode not allowed: i64.atomic.rmw32_u.and + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:46:29: error: opcode not allowed: i32.atomic.rmw.or + i32.const 0 i32.const 0 i32.atomic.rmw.or drop + ^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:47:29: error: opcode not allowed: i64.atomic.rmw.or + i32.const 0 i64.const 0 i64.atomic.rmw.or drop + ^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:48:29: error: opcode not allowed: i32.atomic.rmw8_u.or + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or drop + ^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:49:29: error: opcode not allowed: i32.atomic.rmw16_u.or + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:50:29: error: opcode not allowed: i64.atomic.rmw8_u.or + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or drop + ^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:51:29: error: opcode not allowed: i64.atomic.rmw16_u.or + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:52:29: error: opcode not allowed: i64.atomic.rmw32_u.or + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:54:29: error: opcode not allowed: i32.atomic.rmw.xor + i32.const 0 i32.const 0 i32.atomic.rmw.xor drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:55:29: error: opcode not allowed: i64.atomic.rmw.xor + i32.const 0 i64.const 0 i64.atomic.rmw.xor drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:56:29: error: opcode not allowed: i32.atomic.rmw8_u.xor + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:57:29: error: opcode not allowed: i32.atomic.rmw16_u.xor + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:58:29: error: opcode not allowed: i64.atomic.rmw8_u.xor + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:59:29: error: opcode not allowed: i64.atomic.rmw16_u.xor + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:60:29: error: opcode not allowed: i64.atomic.rmw32_u.xor + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:62:29: error: opcode not allowed: i32.atomic.rmw.xchg + i32.const 0 i32.const 0 i32.atomic.rmw.xchg drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:63:29: error: opcode not allowed: i64.atomic.rmw.xchg + i32.const 0 i64.const 0 i64.atomic.rmw.xchg drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:64:29: error: opcode not allowed: i32.atomic.rmw8_u.xchg + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:65:29: error: opcode not allowed: i32.atomic.rmw16_u.xchg + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg drop + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:66:29: error: opcode not allowed: i64.atomic.rmw8_u.xchg + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:67:29: error: opcode not allowed: i64.atomic.rmw16_u.xchg + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg drop + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:68:29: error: opcode not allowed: i64.atomic.rmw32_u.xchg + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg drop + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:70:41: error: opcode not allowed: i32.atomic.rmw.cmpxchg + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:71:41: error: opcode not allowed: i64.atomic.rmw.cmpxchg + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:72:41: error: opcode not allowed: i32.atomic.rmw8_u.cmpxchg + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:73:41: error: opcode not allowed: i32.atomic.rmw16_u.cmpxchg + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:74:41: error: opcode not allowed: i64.atomic.rmw8_u.cmpxchg + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:75:41: error: opcode not allowed: i64.atomic.rmw16_u.cmpxchg + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/atomic-disabled.txt:76:41: error: opcode not allowed: i64.atomic.rmw32_u.cmpxchg + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +;;; STDERR ;;) diff --git a/test/parse/expr/atomic.txt b/test/parse/expr/atomic.txt new file mode 100644 index 00000000..c6a8fc51 --- /dev/null +++ b/test/parse/expr/atomic.txt @@ -0,0 +1,77 @@ +;;; FLAGS: --enable-threads +(module + (memory 1) + (func + i32.const 0 i32.atomic.load drop + i32.const 0 i64.atomic.load drop + i32.const 0 i32.atomic.load8_u drop + i32.const 0 i32.atomic.load16_u drop + i32.const 0 i64.atomic.load8_u drop + i32.const 0 i64.atomic.load16_u drop + i32.const 0 i64.atomic.load32_u drop + + i32.const 0 i32.const 0 i32.atomic.store + i32.const 0 i64.const 0 i64.atomic.store + i32.const 0 i32.const 0 i32.atomic.store8 + i32.const 0 i32.const 0 i32.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store8 + i32.const 0 i64.const 0 i64.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store32 + + i32.const 0 i32.const 0 i32.atomic.rmw.add drop + i32.const 0 i64.const 0 i64.atomic.rmw.add drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add drop + + i32.const 0 i32.const 0 i32.atomic.rmw.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub drop + + i32.const 0 i32.const 0 i32.atomic.rmw.and drop + i32.const 0 i64.const 0 i64.atomic.rmw.and drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and drop + + i32.const 0 i32.const 0 i32.atomic.rmw.or drop + i32.const 0 i64.const 0 i64.atomic.rmw.or drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg drop + + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop + +)) diff --git a/test/parse/expr/bad-atomic-unnatural-align.txt b/test/parse/expr/bad-atomic-unnatural-align.txt new file mode 100644 index 00000000..0e8a298c --- /dev/null +++ b/test/parse/expr/bad-atomic-unnatural-align.txt @@ -0,0 +1,264 @@ +;;; ERROR: 1 +;;; FLAGS: --enable-threads +(module + (memory 1) + (func + i32.const 0 i32.atomic.load align=8 drop + i32.const 0 i64.atomic.load align=16 drop + i32.const 0 i32.atomic.load8_u align=2 drop + i32.const 0 i32.atomic.load16_u align=4 drop + i32.const 0 i64.atomic.load8_u align=2 drop + i32.const 0 i64.atomic.load16_u align=4 drop + i32.const 0 i64.atomic.load32_u align=8 drop + + i32.const 0 i32.const 0 i32.atomic.store align=8 + i32.const 0 i64.const 0 i64.atomic.store align=16 + i32.const 0 i32.const 0 i32.atomic.store8 align=1 + i32.const 0 i32.const 0 i32.atomic.store16 align=4 + i32.const 0 i64.const 0 i64.atomic.store8 align=1 + i32.const 0 i64.const 0 i64.atomic.store16 align=4 + i32.const 0 i64.const 0 i64.atomic.store32 align=8 + + i32.const 0 i32.const 0 i32.atomic.rmw.add align=8 drop + i32.const 0 i64.const 0 i64.atomic.rmw.add align=16 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add align=2 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add align=8 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.sub align=8 drop + i32.const 0 i64.const 0 i64.atomic.rmw.sub align=16 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub align=2 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub align=8 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.and align=8 drop + i32.const 0 i64.const 0 i64.atomic.rmw.and align=16 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and align=2 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and align=8 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.or align=8 drop + i32.const 0 i64.const 0 i64.atomic.rmw.or align=16 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or align=2 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or align=8 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xor align=8 drop + i32.const 0 i64.const 0 i64.atomic.rmw.xor align=16 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor align=2 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor align=8 drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xchg align=8 drop + i32.const 0 i64.const 0 i64.atomic.rmw.xchg align=16 drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg align=2 drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg align=2 drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg align=4 drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg align=8 drop + + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg align=8 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg align=16 drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg align=2 drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg align=4 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg align=2 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg align=4 drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg align=8 drop + +)) + +(;; STDERR ;;; +out/test/parse/expr/bad-atomic-unnatural-align.txt:6:17: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.atomic.load align=8 drop + ^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:7:17: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.atomic.load align=16 drop + ^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:8:17: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.atomic.load8_u align=2 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:9:17: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.atomic.load16_u align=4 drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:10:17: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.atomic.load8_u align=2 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:11:17: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.atomic.load16_u align=4 drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:12:17: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.atomic.load32_u align=8 drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:14:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.atomic.store align=8 + ^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:15:29: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.atomic.store align=16 + ^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:17:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.atomic.store16 align=4 + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:19:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.atomic.store16 align=4 + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:20:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.atomic.store32 align=8 + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:22:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.atomic.rmw.add align=8 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:23:29: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.atomic.rmw.add align=16 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:24:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:25:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:26:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:27:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:28:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add align=8 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:30:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.atomic.rmw.sub align=8 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:31:29: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.atomic.rmw.sub align=16 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:32:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:33:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:34:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:35:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:36:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub align=8 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:38:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.atomic.rmw.and align=8 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:39:29: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.atomic.rmw.and align=16 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:40:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:41:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:42:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:43:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:44:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and align=8 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:46:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.atomic.rmw.or align=8 drop + ^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:47:29: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.atomic.rmw.or align=16 drop + ^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:48:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or align=2 drop + ^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:49:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or align=4 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:50:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or align=2 drop + ^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:51:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or align=4 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:52:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or align=8 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:54:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.atomic.rmw.xor align=8 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:55:29: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.atomic.rmw.xor align=16 drop + ^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:56:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:57:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:58:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor align=2 drop + ^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:59:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:60:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor align=8 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:62:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.atomic.rmw.xchg align=8 drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:63:29: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.atomic.rmw.xchg align=16 drop + ^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:64:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg align=2 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:65:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:66:29: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg align=2 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:67:29: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:68:29: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg align=8 drop + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:70:41: error: alignment must be equal to natural alignment (4) + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg align=8 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:71:41: error: alignment must be equal to natural alignment (8) + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg align=16 drop + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:72:41: error: alignment must be equal to natural alignment (1) + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg align=2 drop + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:73:41: error: alignment must be equal to natural alignment (2) + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:74:41: error: alignment must be equal to natural alignment (1) + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg align=2 drop + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:75:41: error: alignment must be equal to natural alignment (2) + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg align=4 drop + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/parse/expr/bad-atomic-unnatural-align.txt:76:41: error: alignment must be equal to natural alignment (4) + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg align=8 drop + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +;;; STDERR ;;) diff --git a/test/roundtrip/fold-atomic.txt b/test/roundtrip/fold-atomic.txt new file mode 100644 index 00000000..fc9f07ed --- /dev/null +++ b/test/roundtrip/fold-atomic.txt @@ -0,0 +1,330 @@ +;;; TOOL: run-roundtrip +;;; FLAGS: --stdout --fold-exprs --enable-threads + +(module + (memory 1) + (func + i32.const 0 i32.atomic.load drop + i32.const 0 i64.atomic.load drop + i32.const 0 i32.atomic.load8_u drop + i32.const 0 i32.atomic.load16_u drop + i32.const 0 i64.atomic.load8_u drop + i32.const 0 i64.atomic.load16_u drop + i32.const 0 i64.atomic.load32_u drop + + i32.const 0 i32.const 0 i32.atomic.store + i32.const 0 i64.const 0 i64.atomic.store + i32.const 0 i32.const 0 i32.atomic.store8 + i32.const 0 i32.const 0 i32.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store8 + i32.const 0 i64.const 0 i64.atomic.store16 + i32.const 0 i64.const 0 i64.atomic.store32 + + i32.const 0 i32.const 0 i32.atomic.rmw.add drop + i32.const 0 i64.const 0 i64.atomic.rmw.add drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.add drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.add drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.add drop + + i32.const 0 i32.const 0 i32.atomic.rmw.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub drop + + i32.const 0 i32.const 0 i32.atomic.rmw.and drop + i32.const 0 i64.const 0 i64.atomic.rmw.and drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.and drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.and drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.and drop + + i32.const 0 i32.const 0 i32.atomic.rmw.or drop + i32.const 0 i64.const 0 i64.atomic.rmw.or drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.or drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.or drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.or drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor drop + + i32.const 0 i32.const 0 i32.atomic.rmw.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg drop + i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg drop + i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg drop + + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop + i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop + i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop + +)) +(;; STDOUT ;;; +(module + (type (;0;) (func)) + (func (;0;) (type 0) + (drop + (i32.atomic.load + (i32.const 0))) + (drop + (i64.atomic.load + (i32.const 0))) + (drop + (i32.atomic.load8_u + (i32.const 0))) + (drop + (i32.atomic.load16_u + (i32.const 0))) + (drop + (i64.atomic.load8_u + (i32.const 0))) + (drop + (i64.atomic.load16_u + (i32.const 0))) + (drop + (i64.atomic.load32_u + (i32.const 0))) + (i32.atomic.store + (i32.const 0) + (i32.const 0)) + (i64.atomic.store + (i32.const 0) + (i64.const 0)) + (i32.atomic.store8 + (i32.const 0) + (i32.const 0)) + (i32.atomic.store16 + (i32.const 0) + (i32.const 0)) + (i64.atomic.store8 + (i32.const 0) + (i64.const 0)) + (i64.atomic.store16 + (i32.const 0) + (i64.const 0)) + (i64.atomic.store32 + (i32.const 0) + (i64.const 0)) + (drop + (i32.atomic.rmw.add + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw.add + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw8_u.add + (i32.const 0) + (i32.const 0))) + (drop + (i32.atomic.rmw16_u.add + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw8_u.add + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw16_u.add + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw32_u.add + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw.sub + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw.sub + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw8_u.sub + (i32.const 0) + (i32.const 0))) + (drop + (i32.atomic.rmw16_u.sub + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw8_u.sub + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw16_u.sub + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw32_u.sub + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw.and + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw.and + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw8_u.and + (i32.const 0) + (i32.const 0))) + (drop + (i32.atomic.rmw16_u.and + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw8_u.and + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw16_u.and + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw32_u.and + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw.or + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw.or + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw8_u.or + (i32.const 0) + (i32.const 0))) + (drop + (i32.atomic.rmw16_u.or + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw8_u.or + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw16_u.or + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw32_u.or + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw.xor + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw.xor + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw8_u.xor + (i32.const 0) + (i32.const 0))) + (drop + (i32.atomic.rmw16_u.xor + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw8_u.xor + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw16_u.xor + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw32_u.xor + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw.xchg + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw.xchg + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw8_u.xchg + (i32.const 0) + (i32.const 0))) + (drop + (i32.atomic.rmw16_u.xchg + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw8_u.xchg + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw16_u.xchg + (i32.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw32_u.xchg + (i32.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw.cmpxchg + (i32.const 0) + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw.cmpxchg + (i32.const 0) + (i64.const 0) + (i64.const 0))) + (drop + (i32.atomic.rmw8_u.cmpxchg + (i32.const 0) + (i32.const 0) + (i32.const 0))) + (drop + (i32.atomic.rmw16_u.cmpxchg + (i32.const 0) + (i32.const 0) + (i32.const 0))) + (drop + (i64.atomic.rmw8_u.cmpxchg + (i32.const 0) + (i64.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw16_u.cmpxchg + (i32.const 0) + (i64.const 0) + (i64.const 0))) + (drop + (i64.atomic.rmw32_u.cmpxchg + (i32.const 0) + (i64.const 0) + (i64.const 0)))) + (memory (;0;) 1)) +;;; STDOUT ;;) diff --git a/test/run-roundtrip.py b/test/run-roundtrip.py index bce745c5..e618432b 100755 --- a/test/run-roundtrip.py +++ b/test/run-roundtrip.py @@ -117,6 +117,7 @@ def main(args): parser.add_argument('--generate-names', action='store_true') parser.add_argument('--fold-exprs', action='store_true') parser.add_argument('--enable-exceptions', action='store_true') + parser.add_argument('--enable-threads', action='store_true') parser.add_argument('--inline-exports', action='store_true') parser.add_argument('file', help='test file.') options = parser.parse_args(args) @@ -127,6 +128,7 @@ def main(args): wat2wasm.AppendOptionalArgs({ '--debug-names': options.debug_names, '--enable-exceptions': options.enable_exceptions, + '--enable-threads': options.enable_threads, '--no-check': options.no_check, }) @@ -136,6 +138,7 @@ def main(args): wasm2wat.AppendOptionalArgs({ '--fold-exprs': options.fold_exprs, '--enable-exceptions': options.enable_exceptions, + '--enable-threads': options.enable_threads, '--inline-exports': options.inline_exports, '--no-debug-names': not options.debug_names, '--generate-names': options.generate_names, diff --git a/test/typecheck/bad-atomic-type-mismatch.txt b/test/typecheck/bad-atomic-type-mismatch.txt new file mode 100644 index 00000000..e8d78d37 --- /dev/null +++ b/test/typecheck/bad-atomic-type-mismatch.txt @@ -0,0 +1,745 @@ +;;; ERROR: 1 +;;; FLAGS: --enable-threads + +(module + (memory 1) + + ;; Mismatch address. + (func f32.const 0 i32.atomic.load drop) + (func f32.const 0 i64.atomic.load drop) + (func f32.const 0 i32.atomic.load8_u drop) + (func f32.const 0 i32.atomic.load16_u drop) + (func f32.const 0 i64.atomic.load8_u drop) + (func f32.const 0 i64.atomic.load16_u drop) + (func f32.const 0 i64.atomic.load32_u drop) + (func f32.const 0 i32.const 0 i32.atomic.store) + (func f32.const 0 i64.const 0 i64.atomic.store) + (func f32.const 0 i32.const 0 i32.atomic.store8) + (func f32.const 0 i32.const 0 i32.atomic.store16) + (func f32.const 0 i64.const 0 i64.atomic.store8) + (func f32.const 0 i64.const 0 i64.atomic.store16) + (func f32.const 0 i64.const 0 i64.atomic.store32) + (func f32.const 0 i32.const 0 i32.atomic.rmw.add drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw.add drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.add drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.add drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.add drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.add drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.add drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw.sub drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw.sub drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.sub drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.sub drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.sub drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.sub drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.sub drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw.and drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw.and drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.and drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.and drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.and drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.and drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.and drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw.or drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw.or drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.or drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.or drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.or drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.or drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.or drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw.xor drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw.xor drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.xor drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.xor drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.xor drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.xor drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.xor drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw.xchg drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw.xchg drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg drop) + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg drop) + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg drop) + (func f32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop) + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop) + (func f32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop) + (func f32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop) + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop) + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop) + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop) + + ;; Mismatch first value operand. + (func i32.const 0 f32.const 0 i32.atomic.store) + (func i32.const 0 f64.const 0 i64.atomic.store) + (func i32.const 0 f32.const 0 i32.atomic.store8) + (func i32.const 0 f32.const 0 i32.atomic.store16) + (func i32.const 0 f64.const 0 i64.atomic.store8) + (func i32.const 0 f64.const 0 i64.atomic.store16) + (func i32.const 0 f64.const 0 i64.atomic.store32) + (func i32.const 0 f32.const 0 i32.atomic.rmw.add drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw.add drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.add drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.add drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.add drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.add drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.add drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw.sub drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw.sub drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.sub drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.sub drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.sub drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.sub drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.sub drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw.and drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw.and drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.and drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.and drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.and drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.and drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.and drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw.or drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw.or drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.or drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.or drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.or drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.or drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.or drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw.xor drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw.xor drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.xor drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.xor drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.xor drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.xor drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.xor drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw.xchg drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw.xchg drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.xchg drop) + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.xchg drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.xchg drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.xchg drop) + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.xchg drop) + (func i32.const 0 f32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop) + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop) + (func i32.const 0 f32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop) + (func i32.const 0 f32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop) + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop) + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop) + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop) + + ;; Mismatch second value operand. + (func i32.const 0 i32.const 0 f32.const 0 i32.atomic.rmw.cmpxchg drop) + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw.cmpxchg drop) + (func i32.const 0 i32.const 0 f32.const 0 i32.atomic.rmw8_u.cmpxchg drop) + (func i32.const 0 i32.const 0 f32.const 0 i32.atomic.rmw16_u.cmpxchg drop) + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw8_u.cmpxchg drop) + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw16_u.cmpxchg drop) + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw32_u.cmpxchg drop) + + ;; Mismatch result. + (func (result f32) i32.const 0 i32.atomic.load) + (func (result f64) i32.const 0 i64.atomic.load) + (func (result f32) i32.const 0 i32.atomic.load8_u) + (func (result f32) i32.const 0 i32.atomic.load16_u) + (func (result f64) i32.const 0 i64.atomic.load8_u) + (func (result f64) i32.const 0 i64.atomic.load16_u) + (func (result f64) i32.const 0 i64.atomic.load32_u) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.add) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.add) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.add) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.add) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.add) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.add) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.add) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.sub) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.sub) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.and) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.and) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.and) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.and) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.and) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.and) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.and) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.or) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.or) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.or) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.or) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.or) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.or) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.or) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.xor) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.xor) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.xchg) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.xchg) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg) + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg) + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg) + (func (result f32) i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg) + (func (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg) + (func (result f32) i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg) + (func (result f32) i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg) + (func (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg) + (func (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg) + (func (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg) + +) +(;; STDERR ;;; +out/test/typecheck/bad-atomic-type-mismatch.txt:8:21: error: type mismatch in i32.atomic.load, expected i32 but got f32. + (func f32.const 0 i32.atomic.load drop) + ^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:9:21: error: type mismatch in i64.atomic.load, expected i32 but got f32. + (func f32.const 0 i64.atomic.load drop) + ^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:10:21: error: type mismatch in i32.atomic.load8_u, expected i32 but got f32. + (func f32.const 0 i32.atomic.load8_u drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:11:21: error: type mismatch in i32.atomic.load16_u, expected i32 but got f32. + (func f32.const 0 i32.atomic.load16_u drop) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:12:21: error: type mismatch in i64.atomic.load8_u, expected i32 but got f32. + (func f32.const 0 i64.atomic.load8_u drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:13:21: error: type mismatch in i64.atomic.load16_u, expected i32 but got f32. + (func f32.const 0 i64.atomic.load16_u drop) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:14:21: error: type mismatch in i64.atomic.load32_u, expected i32 but got f32. + (func f32.const 0 i64.atomic.load32_u drop) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:15:33: error: type mismatch in i32.atomic.store, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.store) + ^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:16:33: error: type mismatch in i64.atomic.store, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.store) + ^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:17:33: error: type mismatch in i32.atomic.store8, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.store8) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:18:33: error: type mismatch in i32.atomic.store16, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.store16) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:19:33: error: type mismatch in i64.atomic.store8, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.store8) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:20:33: error: type mismatch in i64.atomic.store16, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.store16) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:21:33: error: type mismatch in i64.atomic.store32, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.store32) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:22:33: error: type mismatch in i32.atomic.rmw.add, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw.add drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:23:33: error: type mismatch in i64.atomic.rmw.add, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw.add drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:24:33: error: type mismatch in i32.atomic.rmw8_u.add, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:25:33: error: type mismatch in i32.atomic.rmw16_u.add, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:26:33: error: type mismatch in i64.atomic.rmw8_u.add, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:27:33: error: type mismatch in i64.atomic.rmw16_u.add, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:28:33: error: type mismatch in i64.atomic.rmw32_u.add, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:29:33: error: type mismatch in i32.atomic.rmw.sub, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw.sub drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:30:33: error: type mismatch in i64.atomic.rmw.sub, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw.sub drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:31:33: error: type mismatch in i32.atomic.rmw8_u.sub, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:32:33: error: type mismatch in i32.atomic.rmw16_u.sub, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:33:33: error: type mismatch in i64.atomic.rmw8_u.sub, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:34:33: error: type mismatch in i64.atomic.rmw16_u.sub, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:35:33: error: type mismatch in i64.atomic.rmw32_u.sub, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:36:33: error: type mismatch in i32.atomic.rmw.and, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw.and drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:37:33: error: type mismatch in i64.atomic.rmw.and, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw.and drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:38:33: error: type mismatch in i32.atomic.rmw8_u.and, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:39:33: error: type mismatch in i32.atomic.rmw16_u.and, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:40:33: error: type mismatch in i64.atomic.rmw8_u.and, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:41:33: error: type mismatch in i64.atomic.rmw16_u.and, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:42:33: error: type mismatch in i64.atomic.rmw32_u.and, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:43:33: error: type mismatch in i32.atomic.rmw.or, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw.or drop) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:44:33: error: type mismatch in i64.atomic.rmw.or, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw.or drop) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:45:33: error: type mismatch in i32.atomic.rmw8_u.or, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.or drop) + ^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:46:33: error: type mismatch in i32.atomic.rmw16_u.or, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.or drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:47:33: error: type mismatch in i64.atomic.rmw8_u.or, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.or drop) + ^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:48:33: error: type mismatch in i64.atomic.rmw16_u.or, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.or drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:49:33: error: type mismatch in i64.atomic.rmw32_u.or, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.or drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:50:33: error: type mismatch in i32.atomic.rmw.xor, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw.xor drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:51:33: error: type mismatch in i64.atomic.rmw.xor, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw.xor drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:52:33: error: type mismatch in i32.atomic.rmw8_u.xor, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:53:33: error: type mismatch in i32.atomic.rmw16_u.xor, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:54:33: error: type mismatch in i64.atomic.rmw8_u.xor, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:55:33: error: type mismatch in i64.atomic.rmw16_u.xor, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:56:33: error: type mismatch in i64.atomic.rmw32_u.xor, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:57:33: error: type mismatch in i32.atomic.rmw.xchg, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw.xchg drop) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:58:33: error: type mismatch in i64.atomic.rmw.xchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw.xchg drop) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:59:33: error: type mismatch in i32.atomic.rmw8_u.xchg, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:60:33: error: type mismatch in i32.atomic.rmw16_u.xchg, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:61:33: error: type mismatch in i64.atomic.rmw8_u.xchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:62:33: error: type mismatch in i64.atomic.rmw16_u.xchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:63:33: error: type mismatch in i64.atomic.rmw32_u.xchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:64:45: error: type mismatch in i32.atomic.rmw.cmpxchg, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:65:45: error: type mismatch in i64.atomic.rmw.cmpxchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:66:45: error: type mismatch in i32.atomic.rmw8_u.cmpxchg, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:67:45: error: type mismatch in i32.atomic.rmw16_u.cmpxchg, expected i32 but got f32. + (func f32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:68:45: error: type mismatch in i64.atomic.rmw8_u.cmpxchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:69:45: error: type mismatch in i64.atomic.rmw16_u.cmpxchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:70:45: error: type mismatch in i64.atomic.rmw32_u.cmpxchg, expected i32 but got f32. + (func f32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:73:33: error: type mismatch in i32.atomic.store, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.store) + ^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:74:33: error: type mismatch in i64.atomic.store, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.store) + ^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:75:33: error: type mismatch in i32.atomic.store8, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.store8) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:76:33: error: type mismatch in i32.atomic.store16, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.store16) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:77:33: error: type mismatch in i64.atomic.store8, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.store8) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:78:33: error: type mismatch in i64.atomic.store16, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.store16) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:79:33: error: type mismatch in i64.atomic.store32, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.store32) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:80:33: error: type mismatch in i32.atomic.rmw.add, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw.add drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:81:33: error: type mismatch in i64.atomic.rmw.add, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw.add drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:82:33: error: type mismatch in i32.atomic.rmw8_u.add, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:83:33: error: type mismatch in i32.atomic.rmw16_u.add, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:84:33: error: type mismatch in i64.atomic.rmw8_u.add, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:85:33: error: type mismatch in i64.atomic.rmw16_u.add, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:86:33: error: type mismatch in i64.atomic.rmw32_u.add, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.add drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:87:33: error: type mismatch in i32.atomic.rmw.sub, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw.sub drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:88:33: error: type mismatch in i64.atomic.rmw.sub, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw.sub drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:89:33: error: type mismatch in i32.atomic.rmw8_u.sub, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:90:33: error: type mismatch in i32.atomic.rmw16_u.sub, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:91:33: error: type mismatch in i64.atomic.rmw8_u.sub, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:92:33: error: type mismatch in i64.atomic.rmw16_u.sub, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:93:33: error: type mismatch in i64.atomic.rmw32_u.sub, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.sub drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:94:33: error: type mismatch in i32.atomic.rmw.and, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw.and drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:95:33: error: type mismatch in i64.atomic.rmw.and, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw.and drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:96:33: error: type mismatch in i32.atomic.rmw8_u.and, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:97:33: error: type mismatch in i32.atomic.rmw16_u.and, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:98:33: error: type mismatch in i64.atomic.rmw8_u.and, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:99:33: error: type mismatch in i64.atomic.rmw16_u.and, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:100:33: error: type mismatch in i64.atomic.rmw32_u.and, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.and drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:101:33: error: type mismatch in i32.atomic.rmw.or, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw.or drop) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:102:33: error: type mismatch in i64.atomic.rmw.or, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw.or drop) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:103:33: error: type mismatch in i32.atomic.rmw8_u.or, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.or drop) + ^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:104:33: error: type mismatch in i32.atomic.rmw16_u.or, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.or drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:105:33: error: type mismatch in i64.atomic.rmw8_u.or, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.or drop) + ^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:106:33: error: type mismatch in i64.atomic.rmw16_u.or, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.or drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:107:33: error: type mismatch in i64.atomic.rmw32_u.or, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.or drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:108:33: error: type mismatch in i32.atomic.rmw.xor, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw.xor drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:109:33: error: type mismatch in i64.atomic.rmw.xor, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw.xor drop) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:110:33: error: type mismatch in i32.atomic.rmw8_u.xor, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:111:33: error: type mismatch in i32.atomic.rmw16_u.xor, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:112:33: error: type mismatch in i64.atomic.rmw8_u.xor, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:113:33: error: type mismatch in i64.atomic.rmw16_u.xor, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:114:33: error: type mismatch in i64.atomic.rmw32_u.xor, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.xor drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:115:33: error: type mismatch in i32.atomic.rmw.xchg, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw.xchg drop) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:116:33: error: type mismatch in i64.atomic.rmw.xchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw.xchg drop) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:117:33: error: type mismatch in i32.atomic.rmw8_u.xchg, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw8_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:118:33: error: type mismatch in i32.atomic.rmw16_u.xchg, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.atomic.rmw16_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:119:33: error: type mismatch in i64.atomic.rmw8_u.xchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw8_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:120:33: error: type mismatch in i64.atomic.rmw16_u.xchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw16_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:121:33: error: type mismatch in i64.atomic.rmw32_u.xchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.atomic.rmw32_u.xchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:122:45: error: type mismatch in i32.atomic.rmw.cmpxchg, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:123:45: error: type mismatch in i64.atomic.rmw.cmpxchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:124:45: error: type mismatch in i32.atomic.rmw8_u.cmpxchg, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:125:45: error: type mismatch in i32.atomic.rmw16_u.cmpxchg, expected i32 but got f32. + (func i32.const 0 f32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:126:45: error: type mismatch in i64.atomic.rmw8_u.cmpxchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:127:45: error: type mismatch in i64.atomic.rmw16_u.cmpxchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:128:45: error: type mismatch in i64.atomic.rmw32_u.cmpxchg, expected i64 but got f64. + (func i32.const 0 f64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:131:45: error: type mismatch in i32.atomic.rmw.cmpxchg, expected i32 but got f32. + (func i32.const 0 i32.const 0 f32.const 0 i32.atomic.rmw.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:132:45: error: type mismatch in i64.atomic.rmw.cmpxchg, expected i64 but got f64. + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:133:45: error: type mismatch in i32.atomic.rmw8_u.cmpxchg, expected i32 but got f32. + (func i32.const 0 i32.const 0 f32.const 0 i32.atomic.rmw8_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:134:45: error: type mismatch in i32.atomic.rmw16_u.cmpxchg, expected i32 but got f32. + (func i32.const 0 i32.const 0 f32.const 0 i32.atomic.rmw16_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:135:45: error: type mismatch in i64.atomic.rmw8_u.cmpxchg, expected i64 but got f64. + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw8_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:136:45: error: type mismatch in i64.atomic.rmw16_u.cmpxchg, expected i64 but got f64. + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw16_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:137:45: error: type mismatch in i64.atomic.rmw32_u.cmpxchg, expected i64 but got f64. + (func i32.const 0 i64.const 0 f64.const 0 i64.atomic.rmw32_u.cmpxchg drop) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:140:34: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.atomic.load) + ^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:141:34: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.atomic.load) + ^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:142:34: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.atomic.load8_u) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:143:34: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.atomic.load16_u) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:144:34: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.atomic.load8_u) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:145:34: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.atomic.load16_u) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:146:34: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.atomic.load32_u) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:147:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.add) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:148:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.add) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:149:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.add) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:150:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.add) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:151:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.add) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:152:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.add) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:153:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.add) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:154:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.sub) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:155:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.sub) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:156:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.sub) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:157:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.sub) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:158:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.sub) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:159:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.sub) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:160:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.sub) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:161:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.and) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:162:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.and) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:163:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.and) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:164:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.and) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:165:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.and) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:166:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.and) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:167:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.and) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:168:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.or) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:169:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.or) + ^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:170:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.or) + ^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:171:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.or) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:172:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.or) + ^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:173:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.or) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:174:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.or) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:175:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.xor) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:176:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.xor) + ^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:177:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.xor) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:178:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.xor) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:179:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.xor) + ^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:180:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.xor) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:181:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.xor) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:182:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw.xchg) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:183:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw.xchg) + ^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:184:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw8_u.xchg) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:185:46: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.atomic.rmw16_u.xchg) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:186:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw8_u.xchg) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:187:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw16_u.xchg) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:188:46: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.atomic.rmw32_u.xchg) + ^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:189:58: error: type mismatch in implicit return, expected f32 but got i32. + (func (result f32) i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw.cmpxchg) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:190:58: error: type mismatch in implicit return, expected f64 but got i64. + (func (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw.cmpxchg) + ^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:191:58: error: type mismatch in implicit return, expected f32 but got i32. +...c (result f32) i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw8_u.cmpxchg) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:192:58: error: type mismatch in implicit return, expected f32 but got i32. +... (result f32) i32.const 0 i32.const 0 i32.const 0 i32.atomic.rmw16_u.cmpxchg) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:193:58: error: type mismatch in implicit return, expected f64 but got i64. +...c (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw8_u.cmpxchg) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:194:58: error: type mismatch in implicit return, expected f64 but got i64. +... (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw16_u.cmpxchg) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +out/test/typecheck/bad-atomic-type-mismatch.txt:195:58: error: type mismatch in implicit return, expected f64 but got i64. +... (result f64) i32.const 0 i64.const 0 i64.const 0 i64.atomic.rmw32_u.cmpxchg) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +;;; STDERR ;;) |