@@ -39,8 +39,53 @@ class Template:
3939templates = [
4040 Template (op = "i32.atomic.load" , value_type = ValueType .i32 , args = 1 , should_drop = True , bin = b"\xfe \x10 " ),
4141 Template (op = "i64.atomic.load" , value_type = ValueType .i64 , args = 1 , should_drop = True , bin = b"\xfe \x11 " ),
42+ Template (op = "i32.atomic.load8_u" , value_type = ValueType .i64 , args = 1 , should_drop = True , bin = b"\xfe \x12 " ),
43+ Template (op = "i32.atomic.load16_u" , value_type = ValueType .i64 , args = 1 , should_drop = True , bin = b"\xfe \x13 " ),
44+ Template (op = "i64.atomic.load8_u" , value_type = ValueType .i64 , args = 1 , should_drop = True , bin = b"\xfe \x14 " ),
45+ Template (op = "i64.atomic.load16_u" , value_type = ValueType .i64 , args = 1 , should_drop = True , bin = b"\xfe \x15 " ),
46+ Template (op = "i64.atomic.load32_u" , value_type = ValueType .i64 , args = 1 , should_drop = True , bin = b"\xfe \x16 " ),
4247 Template (op = "i32.atomic.store" , value_type = ValueType .i32 , args = 2 , should_drop = False , bin = b"\xfe \x17 " ),
4348 Template (op = "i64.atomic.store" , value_type = ValueType .i64 , args = 2 , should_drop = False , bin = b"\xfe \x18 " ),
49+ Template (op = "i32.atomic.store8" , value_type = ValueType .i32 , args = 2 , should_drop = False , bin = b"\xfe \x19 " ),
50+ Template (op = "i32.atomic.store16" , value_type = ValueType .i32 , args = 2 , should_drop = False , bin = b"\xfe \x1a " ),
51+ Template (op = "i64.atomic.store8" , value_type = ValueType .i64 , args = 2 , should_drop = False , bin = b"\xfe \x1b " ),
52+ Template (op = "i64.atomic.store16" , value_type = ValueType .i64 , args = 2 , should_drop = False , bin = b"\xfe \x1c " ),
53+ Template (op = "i64.atomic.store32" , value_type = ValueType .i64 , args = 2 , should_drop = False , bin = b"\xfe \x1d " ),
54+ Template (op = "i32.atomic.rmw.add" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x1e " ),
55+ Template (op = "i64.atomic.rmw.add" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x1f " ),
56+ Template (op = "i32.atomic.rmw8.add_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x20 " ),
57+ Template (op = "i32.atomic.rmw16.add_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x21 " ),
58+ Template (op = "i64.atomic.rmw8.add_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x22 " ),
59+ Template (op = "i64.atomic.rmw16.add_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x23 " ),
60+ Template (op = "i64.atomic.rmw32.add_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x24 " ),
61+ Template (op = "i32.atomic.rmw.sub" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x25 " ),
62+ Template (op = "i64.atomic.rmw.sub" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x26 " ),
63+ Template (op = "i32.atomic.rmw8.sub_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x27 " ),
64+ Template (op = "i32.atomic.rmw16.sub_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x28 " ),
65+ Template (op = "i64.atomic.rmw8.sub_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x29 " ),
66+ Template (op = "i64.atomic.rmw16.sub_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x2a " ),
67+ Template (op = "i64.atomic.rmw32.sub_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x2b " ),
68+ Template (op = "i32.atomic.rmw.and" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x2c " ),
69+ Template (op = "i64.atomic.rmw.and" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x2d " ),
70+ Template (op = "i32.atomic.rmw8.and_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x2e " ),
71+ Template (op = "i32.atomic.rmw16.and_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x2f " ),
72+ Template (op = "i64.atomic.rmw8.and_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x30 " ),
73+ Template (op = "i64.atomic.rmw16.and_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x31 " ),
74+ Template (op = "i64.atomic.rmw32.and_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x32 " ),
75+ Template (op = "i32.atomic.rmw.or" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x33 " ),
76+ Template (op = "i64.atomic.rmw.or" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x34 " ),
77+ Template (op = "i32.atomic.rmw8.or_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x35 " ),
78+ Template (op = "i32.atomic.rmw16.or_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x36 " ),
79+ Template (op = "i64.atomic.rmw8.or_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x37 " ),
80+ Template (op = "i64.atomic.rmw16.or_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x38 " ),
81+ Template (op = "i64.atomic.rmw32.or_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x39 " ),
82+ Template (op = "i32.atomic.rmw.xor" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x3a " ),
83+ Template (op = "i64.atomic.rmw.xor" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x3b " ),
84+ Template (op = "i32.atomic.rmw8.xor_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x3c " ),
85+ Template (op = "i32.atomic.rmw16.xor_u" , value_type = ValueType .i32 , args = 2 , should_drop = True , bin = b"\xfe \x3d " ),
86+ Template (op = "i64.atomic.rmw8.xor_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x3e " ),
87+ Template (op = "i64.atomic.rmw16.xor_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x3f " ),
88+ Template (op = "i64.atomic.rmw32.xor_u" , value_type = ValueType .i64 , args = 2 , should_drop = True , bin = b"\xfe \x40 " ),
4489]
4590
4691
@@ -151,7 +196,11 @@ def bin_statement_lines(template: Template, mem_idx: int, mem_ptr_type: ValueTyp
151196 yield int .to_bytes (mem_idx ), "memory index"
152197
153198 if has_ordering :
154- yield int .to_bytes (ordering .value ), f"{ ordering .name } memory ordering"
199+ ordering_num = ordering .value
200+ if "rmw" in template .op :
201+ ordering_num |= ordering_num << 4
202+
203+ yield int .to_bytes (ordering_num ), f"{ ordering .name } memory ordering"
155204
156205 yield b"\x00 " , "offset"
157206
0 commit comments