Skip to content

Commit 5bfb98b

Browse files
willglynnkripken
authored andcommitted
Increase FuncCastEmulation NUM_PARAMS (#1884)
FuncCastEmulation supports a hardcoded number of parameters: // This should be enough for everybody. (As described above, we need this // to match when dynamically linking, and also dynamic linking is why we // can't just detect this automatically in the module we see.) static const int NUM_PARAMS = 15; Turns out 15 is not enough for everybody: Ruby 2.6.0 needs NUM_PARAMS = 16. This patch is necessary to support Ruby 2.6.0 in WebAssembly, and in fact is the only patch needed to make the relevant build process work with an otherwise normal emscripten toolchain.
1 parent 153ba18 commit 5bfb98b

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

src/passes/FuncCastEmulation.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace wasm {
3939
// This should be enough for everybody. (As described above, we need this
4040
// to match when dynamically linking, and also dynamic linking is why we
4141
// can't just detect this automatically in the module we see.)
42-
static const int NUM_PARAMS = 15;
42+
static const int NUM_PARAMS = 16;
4343

4444
// Converts a value to the ABI type of i64.
4545
static Expression* toABI(Expression* value, Module* module) {

test/passes/fpcast-emu.txt

+24-16
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
(type $dff (func (param f32 f32) (result f64)))
66
(type $idd (func (param f64 f64) (result i32)))
77
(type $FUNCSIG$fijfd (func (param i32 i64 f32 f64) (result f32)))
8-
(type $FUNCSIG$jjjjjjjjjjjjjjjj (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64)))
8+
(type $FUNCSIG$jjjjjjjjjjjjjjjjj (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64)))
99
(type $FUNCSIG$vijfd (func (param i32 i64 f32 f64)))
1010
(type $FUNCSIG$jii (func (param i32 i32) (result i64)))
1111
(type $FUNCSIG$fjj (func (param i64 i64) (result f32)))
@@ -18,7 +18,7 @@
1818
(export "dynCall_idd" (func $dynCall_idd))
1919
(func $a (; 1 ;) (type $vijfd) (param $x i32) (param $y i64) (param $z f32) (param $w f64)
2020
(drop
21-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
21+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
2222
(i64.extend_i32_u
2323
(i32.const 1)
2424
)
@@ -42,12 +42,13 @@
4242
(i64.const 0)
4343
(i64.const 0)
4444
(i64.const 0)
45+
(i64.const 0)
4546
(i32.const 1337)
4647
)
4748
)
4849
)
4950
(func $b (; 2 ;) (type $jii) (param $x i32) (param $y i32) (result i64)
50-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
51+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
5152
(i64.extend_i32_u
5253
(i32.const 1)
5354
)
@@ -67,13 +68,14 @@
6768
(i64.const 0)
6869
(i64.const 0)
6970
(i64.const 0)
71+
(i64.const 0)
7072
(i32.const 1337)
7173
)
7274
)
7375
(func $c (; 3 ;) (type $fjj) (param $x i64) (param $y i64) (result f32)
7476
(f32.reinterpret_i32
7577
(i32.wrap_i64
76-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
78+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
7779
(i64.const 1)
7880
(i64.const 2)
7981
(i64.const 0)
@@ -89,14 +91,15 @@
8991
(i64.const 0)
9092
(i64.const 0)
9193
(i64.const 0)
94+
(i64.const 0)
9295
(i32.const 1337)
9396
)
9497
)
9598
)
9699
)
97100
(func $d (; 4 ;) (type $dff) (param $x f32) (param $y f32) (result f64)
98101
(f64.reinterpret_i64
99-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
102+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
100103
(i64.extend_i32_u
101104
(i32.reinterpret_f32
102105
(f32.const 1)
@@ -120,13 +123,14 @@
120123
(i64.const 0)
121124
(i64.const 0)
122125
(i64.const 0)
126+
(i64.const 0)
123127
(i32.const 1337)
124128
)
125129
)
126130
)
127131
(func $e (; 5 ;) (type $idd) (param $x f64) (param $y f64) (result i32)
128132
(i32.wrap_i64
129-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
133+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
130134
(i64.reinterpret_f64
131135
(f64.const 1)
132136
)
@@ -146,13 +150,14 @@
146150
(i64.const 0)
147151
(i64.const 0)
148152
(i64.const 0)
153+
(i64.const 0)
149154
(i32.const 1337)
150155
)
151156
)
152157
)
153158
(func $dynCall_dff (; 6 ;) (param $fptr i32) (param $0 f32) (param $1 f32) (result f64)
154159
(f64.reinterpret_i64
155-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
160+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
156161
(i64.extend_i32_u
157162
(i32.reinterpret_f32
158163
(local.get $0)
@@ -176,13 +181,14 @@
176181
(i64.const 0)
177182
(i64.const 0)
178183
(i64.const 0)
184+
(i64.const 0)
179185
(local.get $fptr)
180186
)
181187
)
182188
)
183189
(func $dynCall_idd (; 7 ;) (param $fptr i32) (param $0 f64) (param $1 f64) (result i32)
184190
(i32.wrap_i64
185-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
191+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
186192
(i64.reinterpret_f64
187193
(local.get $0)
188194
)
@@ -202,11 +208,12 @@
202208
(i64.const 0)
203209
(i64.const 0)
204210
(i64.const 0)
211+
(i64.const 0)
205212
(local.get $fptr)
206213
)
207214
)
208215
)
209-
(func $byn$fpcast-emu$a (; 8 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (result i64)
216+
(func $byn$fpcast-emu$a (; 8 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
210217
(call $a
211218
(i32.wrap_i64
212219
(local.get $0)
@@ -223,7 +230,7 @@
223230
)
224231
(i64.const 0)
225232
)
226-
(func $byn$fpcast-emu$b (; 9 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (result i64)
233+
(func $byn$fpcast-emu$b (; 9 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
227234
(call $b
228235
(i32.wrap_i64
229236
(local.get $0)
@@ -233,7 +240,7 @@
233240
)
234241
)
235242
)
236-
(func $byn$fpcast-emu$c (; 10 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (result i64)
243+
(func $byn$fpcast-emu$c (; 10 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
237244
(i64.extend_i32_u
238245
(i32.reinterpret_f32
239246
(call $c
@@ -243,7 +250,7 @@
243250
)
244251
)
245252
)
246-
(func $byn$fpcast-emu$d (; 11 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (result i64)
253+
(func $byn$fpcast-emu$d (; 11 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
247254
(i64.reinterpret_f64
248255
(call $d
249256
(f32.reinterpret_i32
@@ -259,7 +266,7 @@
259266
)
260267
)
261268
)
262-
(func $byn$fpcast-emu$e (; 12 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (result i64)
269+
(func $byn$fpcast-emu$e (; 12 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
263270
(i64.extend_i32_u
264271
(call $e
265272
(f64.reinterpret_i64
@@ -271,7 +278,7 @@
271278
)
272279
)
273280
)
274-
(func $byn$fpcast-emu$imported-func (; 13 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (result i64)
281+
(func $byn$fpcast-emu$imported-func (; 13 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
275282
(i64.extend_i32_u
276283
(i32.reinterpret_f32
277284
(call $imported-func
@@ -295,7 +302,7 @@
295302
(module
296303
(type $0 (func (param i64)))
297304
(type $1 (func (param f32) (result i64)))
298-
(type $FUNCSIG$jjjjjjjjjjjjjjjj (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64)))
305+
(type $FUNCSIG$jjjjjjjjjjjjjjjjj (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64)))
299306
(table $0 42 42 funcref)
300307
(global $global$0 (mut i32) (i32.const 10))
301308
(export "func_106" (func $0))
@@ -305,7 +312,7 @@
305312
(global.set $global$0
306313
(i32.const 0)
307314
)
308-
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjj)
315+
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
309316
(br $label$1
310317
(i64.const 4294967295)
311318
)
@@ -323,6 +330,7 @@
323330
(i64.const 0)
324331
(i64.const 0)
325332
(i64.const 0)
333+
(i64.const 0)
326334
(i32.const 18)
327335
)
328336
)

0 commit comments

Comments
 (0)