@@ -15,6 +15,14 @@ grammar Binstr/parametric : instr =
1515
1616;; Control instructions
1717
18+ syntax castop = (null?, null?)
19+
20+ grammar Bcastop : castop =
21+ | 0x00 => (eps, eps)
22+ | 0x01 => (NULL, eps)
23+ | 0x02 => (eps, NULL)
24+ | 0x03 => (NULL, NULL)
25+
1826grammar Bblocktype : blocktype =
1927 | 0x40 => _RESULT eps
2028 | t:Bvaltype => _RESULT t
@@ -39,7 +47,15 @@ grammar Binstr/control : instr = ...
3947 | 0x11 y:Btypeidx x:Btableidx => CALL_INDIRECT x (_IDX y)
4048 | 0x12 x:Bfuncidx => RETURN_CALL x
4149 | 0x13 y:Btypeidx x:Btableidx => RETURN_CALL_INDIRECT x (_IDX y)
50+ | 0x14 x:Btypeidx => CALL_REF (_IDX x)
51+ | 0x15 x:Btypeidx => RETURN_CALL_REF (_IDX x)
4252 | 0x1F bt:Bblocktype c*:Blist(Bcatch) (in:Binstr)* 0x0B => TRY_TABLE bt c* in*
53+ | 0xD5 l:Blabelidx => BR_ON_NULL l
54+ | 0xD6 l:Blabelidx => BR_ON_NON_NULL l
55+ | 0xFB 24:Bu32 (null_1?, null_2?):Bcastop
56+ l:Blabelidx ht_1:Bheaptype ht_2:Bheaptype => BR_ON_CAST l (REF null_1? ht_1) (REF null_2? ht_2)
57+ | 0xFB 25:Bu32 (null_1?, null_2?):Bcastop
58+ l:Blabelidx ht_1:Bheaptype ht_2:Bheaptype => BR_ON_CAST_FAIL l (REF null_1? ht_1) (REF null_2? ht_2)
4359 | ...
4460
4561grammar Bcatch : catch =
@@ -120,22 +136,16 @@ grammar Binstr/memory : instr = ...
120136
121137;; Reference instructions
122138
123- syntax castop = (null?, null?)
124-
125- grammar Bcastop : castop =
126- | 0x00 => (eps, eps)
127- | 0x01 => (NULL, eps)
128- | 0x02 => (eps, NULL)
129- | 0x03 => (NULL, NULL)
130-
131139grammar Binstr/ref : instr = ...
132140 | 0xD0 ht:Bheaptype => REF.NULL ht
133141 | 0xD1 => REF.IS_NULL
134142 | 0xD2 x:Bfuncidx => REF.FUNC x
135143 | 0xD3 => REF.EQ
136144 | 0xD4 => REF.AS_NON_NULL
137- | 0xD5 l:Blabelidx => BR_ON_NULL l
138- | 0xD6 l:Blabelidx => BR_ON_NON_NULL l
145+ | 0xFB 20:Bu32 ht:Bheaptype => REF.TEST (REF ht)
146+ | 0xFB 21:Bu32 ht:Bheaptype => REF.TEST (REF NULL ht)
147+ | 0xFB 22:Bu32 ht:Bheaptype => REF.CAST (REF ht)
148+ | 0xFB 23:Bu32 ht:Bheaptype => REF.CAST (REF NULL ht)
139149 | ...
140150
141151grammar Binstr/struct : instr = ...
@@ -164,17 +174,6 @@ grammar Binstr/array : instr = ...
164174 | 0xFB 19:Bu32 x:Btypeidx y:Belemidx => ARRAY.INIT_ELEM x y
165175 | ...
166176
167- grammar Binstr/cast : instr = ...
168- | 0xFB 20:Bu32 ht:Bheaptype => REF.TEST (REF ht)
169- | 0xFB 21:Bu32 ht:Bheaptype => REF.TEST (REF NULL ht)
170- | 0xFB 22:Bu32 ht:Bheaptype => REF.CAST (REF ht)
171- | 0xFB 23:Bu32 ht:Bheaptype => REF.CAST (REF NULL ht)
172- | 0xFB 24:Bu32 (null_1?, null_2?):Bcastop
173- l:Blabelidx ht_1:Bheaptype ht_2:Bheaptype => BR_ON_CAST l (REF null_1? ht_1) (REF null_2? ht_2)
174- | 0xFB 25:Bu32 (null_1?, null_2?):Bcastop
175- l:Blabelidx ht_1:Bheaptype ht_2:Bheaptype => BR_ON_CAST_FAIL l (REF null_1? ht_1) (REF null_2? ht_2)
176- | ...
177-
178177grammar Binstr/extern : instr = ...
179178 | 0xFB 26:Bu32 => ANY.CONVERT_EXTERN
180179 | 0xFB 27:Bu32 => EXTERN.CONVERT_ANY
@@ -369,7 +368,7 @@ grammar Binstr/num-cvt : instr = ...
369368 | 0xB8 => CVTOP F64 I32 CONVERT U
370369 | 0xB9 => CVTOP F64 I64 CONVERT S
371370 | 0xBA => CVTOP F64 I64 CONVERT U
372- | 0xBB => CVTOP F32 F64 PROMOTE
371+ | 0xBB => CVTOP F64 F32 PROMOTE
373372 | 0xBC => CVTOP I32 F32 REINTERPRET
374373 | 0xBD => CVTOP I64 F64 REINTERPRET
375374 | 0xBE => CVTOP F32 I32 REINTERPRET
0 commit comments