1(module
2  ;; Auxiliary
3  (func $dummy)
4  (table $tab funcref (elem $dummy))
5  (memory 1)
6
7  (func (export "select-i32") (param i32 i32 i32) (result i32)
8    (select (local.get 0) (local.get 1) (local.get 2))
9  )
10  (func (export "select-i64") (param i64 i64 i32) (result i64)
11    (select (local.get 0) (local.get 1) (local.get 2))
12  )
13  (func (export "select-f32") (param f32 f32 i32) (result f32)
14    (select (local.get 0) (local.get 1) (local.get 2))
15  )
16  (func (export "select-f64") (param f64 f64 i32) (result f64)
17    (select (local.get 0) (local.get 1) (local.get 2))
18  )
19
20  (func (export "as-select-first") (param i32) (result i32)
21    (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3))
22  )
23  (func (export "as-select-mid") (param i32) (result i32)
24    (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3))
25  )
26  (func (export "as-select-last") (param i32) (result i32)
27    (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0)))
28  )
29
30  (func (export "as-loop-first") (param i32) (result i32)
31    (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy))
32  )
33  (func (export "as-loop-mid") (param i32) (result i32)
34    (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy))
35  )
36  (func (export "as-loop-last") (param i32) (result i32)
37    (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)))
38  )
39
40  (func (export "as-br_table-first") (param i32) (result i32)
41    (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0))
42  )
43  (func (export "as-br_table-last") (param i32) (result i32)
44    (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0))
45  )
46
47  (func (export "as-if-condition") (param i32)
48    (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy)))
49  )
50  (func (export "as-if-then") (param i32) (result i32)
51    (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4)))
52  )
53  (func (export "as-if-else") (param i32) (result i32)
54    (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0))))
55  )
56
57  (func (export "as-br_if-first") (param i32) (result i32)
58    (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4)))
59  )
60  (func (export "as-br_if-last") (param i32) (result i32)
61    (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0))))
62  )
63
64  (func $f (param i32) (result i32) (local.get 0))
65
66  (func (export "as-call-value") (param i32) (result i32)
67    (call $f (select (i32.const 1) (i32.const 2) (local.get 0)))
68  )
69  (func (export "as-return-value") (param i32) (result i32)
70    (select (i32.const 1) (i32.const 2) (local.get 0)) (return)
71  )
72  (func (export "as-drop-operand") (param i32)
73    (drop (select (i32.const 1) (i32.const 2) (local.get 0)))
74  )
75  (func (export "as-br-value") (param i32) (result i32)
76    (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0))))
77  )
78  (func (export "as-local.set-value") (param i32) (result i32)
79    (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0)
80  )
81  (func (export "as-local.tee-value") (param i32) (result i32)
82    (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0)))
83  )
84  (global $a (mut i32) (i32.const 10))
85  (func (export "as-global.set-value") (param i32) (result i32)
86    (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0)))
87    (global.get $a)
88  )
89
90  (func (export "as-unary-operand") (param i32) (result i32)
91    (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0)))
92  )
93  (func (export "as-binary-operand") (param i32) (result i32)
94    (i32.mul
95      (select (i32.const 1) (i32.const 2) (local.get 0))
96      (select (i32.const 1) (i32.const 2) (local.get 0))
97    )
98  )
99  (func (export "as-test-operand") (param i32) (result i32)
100    (block (result i32)
101      (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0)))
102    )
103  )
104
105  (func (export "as-compare-left") (param i32) (result i32)
106    (block (result i32)
107      (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1))
108    )
109  )
110  (func (export "as-compare-right") (param i32) (result i32)
111    (block (result i32)
112      (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0)))
113    )
114  )
115  (func (export "as-load-operand") (param i32) (result i32)
116    (i32.load (select (i32.const 0) (i32.const 4) (local.get 0)))
117  )
118  (func (export "as-store-first") (param i32)
119    (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store)
120  )
121  (func (export "as-store-last") (param i32)
122    (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store)
123  )
124)
125
126(assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1))
127(assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2))
128(assert_return (invoke "select-f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1))
129(assert_return (invoke "select-f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1))
130
131(assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2))
132(assert_return (invoke "select-i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1))
133(assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2))
134(assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2))
135
136(assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan))
137(assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304))
138(assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1))
139(assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1))
140(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2))
141(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2))
142(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan))
143(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304))
144
145(assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan))
146(assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304))
147(assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1))
148(assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1))
149(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2))
150(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2))
151(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan))
152(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304))
153
154(assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1))
155(assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0))
156(assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2))
157(assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2))
158(assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2))
159(assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3))
160
161(assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3))
162(assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2))
163(assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3))
164(assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2))
165(assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3))
166(assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2))
167
168(assert_return (invoke "as-if-condition" (i32.const 0)))
169(assert_return (invoke "as-if-condition" (i32.const 1)))
170(assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3))
171(assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2))
172(assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3))
173(assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2))
174
175(assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3))
176(assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2))
177(assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2))
178(assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2))
179
180(assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2))
181(assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1))
182(assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2))
183(assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1))
184(assert_return (invoke "as-drop-operand" (i32.const 0)))
185(assert_return (invoke "as-drop-operand" (i32.const 1)))
186(assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2))
187(assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1))
188(assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2))
189(assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1))
190(assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2))
191(assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1))
192(assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2))
193(assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1))
194
195(assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0))
196(assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1))
197(assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4))
198(assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1))
199(assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0))
200(assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1))
201(assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0))
202(assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1))
203(assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0))
204(assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1))
205
206(assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3))
207(assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2))
208(assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2))
209(assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2))
210
211(assert_return (invoke "as-store-first" (i32.const 0)))
212(assert_return (invoke "as-store-first" (i32.const 1)))
213(assert_return (invoke "as-store-last" (i32.const 0)))
214(assert_return (invoke "as-store-last" (i32.const 1)))
215(assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1))
216(assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1))
217
218