summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/FuncCastEmulation.cpp7
-rw-r--r--test/passes/fpcast-emu.txt184
2 files changed, 1 insertions, 190 deletions
diff --git a/src/passes/FuncCastEmulation.cpp b/src/passes/FuncCastEmulation.cpp
index 93106b5ef..8ae0db839 100644
--- a/src/passes/FuncCastEmulation.cpp
+++ b/src/passes/FuncCastEmulation.cpp
@@ -26,12 +26,12 @@
//
// This should work even with dynamic linking, however, the number of
// params must be identical, i.e., the "ABI" must match.
+//
#include <asm_v_wasm.h>
#include <ir/literal-utils.h>
#include <pass.h>
#include <wasm-builder.h>
-#include <wasm-emscripten.h>
#include <wasm.h>
namespace wasm {
@@ -165,11 +165,6 @@ struct FuncCastEmulation : public Pass {
// we just need the one ABI function type for all indirect calls
Signature ABIType(Type(std::vector<Type>(NUM_PARAMS, Type::i64)),
Type::i64);
- // Add a way for JS to call into the table (as our i64 ABI means an i64
- // is returned when there is a return value, which JS engines will fail on),
- // using dynCalls
- EmscriptenGlueGenerator generator(*module);
- generator.generateDynCallThunks();
// Add a thunk for each function in the table, and do the call through it.
std::unordered_map<Name, Name> funcThunks;
for (auto& segment : module->table.segments) {
diff --git a/test/passes/fpcast-emu.txt b/test/passes/fpcast-emu.txt
index 2a5632af5..59e1e2574 100644
--- a/test/passes/fpcast-emu.txt
+++ b/test/passes/fpcast-emu.txt
@@ -1,26 +1,14 @@
(module
(type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64 (func (param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64 i64) (result i64)))
- (type $i32_i32_i64_f32_f64_=>_none (func (param i32 i32 i64 f32 f64)))
(type $i32_i64_f32_f64_=>_none (func (param i32 i64 f32 f64)))
- (type $i32_f64_f64_=>_i32 (func (param i32 f64 f64) (result i32)))
(type $f64_f64_=>_i32 (func (param f64 f64) (result i32)))
(type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
- (type $i32_i32_i32_=>_i64 (func (param i32 i32 i32) (result i64)))
- (type $i32_i32_i64_f32_f64_=>_f32 (func (param i32 i32 i64 f32 f64) (result f32)))
- (type $i32_i64_i64_=>_f32 (func (param i32 i64 i64) (result f32)))
(type $i32_i64_f32_f64_=>_f32 (func (param i32 i64 f32 f64) (result f32)))
(type $i64_i64_=>_f32 (func (param i64 i64) (result f32)))
- (type $i32_f32_f32_=>_f64 (func (param i32 f32 f32) (result f64)))
(type $f32_f32_=>_f64 (func (param f32 f32) (result f64)))
(import "env" "imported_func" (func $imported-func (param i32 i64 f32 f64) (result f32)))
(table $0 10 10 funcref)
(elem (i32.const 0) $byn$fpcast-emu$a $byn$fpcast-emu$b $byn$fpcast-emu$c $byn$fpcast-emu$d $byn$fpcast-emu$e $byn$fpcast-emu$e $byn$fpcast-emu$imported-func)
- (export "dynCall_vijfd" (func $dynCall_vijfd))
- (export "dynCall_jii" (func $dynCall_jii))
- (export "dynCall_fjj" (func $dynCall_fjj))
- (export "dynCall_dff" (func $dynCall_dff))
- (export "dynCall_idd" (func $dynCall_idd))
- (export "dynCall_fijfd" (func $dynCall_fijfd))
(func $a (param $x i32) (param $y i64) (param $z f32) (param $w f64)
(drop
(call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64)
@@ -160,178 +148,6 @@
)
)
)
- (func $dynCall_vijfd (param $fptr i32) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64)
- (drop
- (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64)
- (i64.extend_i32_u
- (local.get $0)
- )
- (local.get $1)
- (i64.extend_i32_u
- (i32.reinterpret_f32
- (local.get $2)
- )
- )
- (i64.reinterpret_f64
- (local.get $3)
- )
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (local.get $fptr)
- )
- )
- )
- (func $dynCall_jii (param $fptr i32) (param $0 i32) (param $1 i32) (result i64)
- (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64)
- (i64.extend_i32_u
- (local.get $0)
- )
- (i64.extend_i32_u
- (local.get $1)
- )
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (local.get $fptr)
- )
- )
- (func $dynCall_fjj (param $fptr i32) (param $0 i64) (param $1 i64) (result f32)
- (f32.reinterpret_i32
- (i32.wrap_i64
- (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64)
- (local.get $0)
- (local.get $1)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (local.get $fptr)
- )
- )
- )
- )
- (func $dynCall_dff (param $fptr i32) (param $0 f32) (param $1 f32) (result f64)
- (f64.reinterpret_i64
- (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64)
- (i64.extend_i32_u
- (i32.reinterpret_f32
- (local.get $0)
- )
- )
- (i64.extend_i32_u
- (i32.reinterpret_f32
- (local.get $1)
- )
- )
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (local.get $fptr)
- )
- )
- )
- (func $dynCall_idd (param $fptr i32) (param $0 f64) (param $1 f64) (result i32)
- (i32.wrap_i64
- (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64)
- (i64.reinterpret_f64
- (local.get $0)
- )
- (i64.reinterpret_f64
- (local.get $1)
- )
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (local.get $fptr)
- )
- )
- )
- (func $dynCall_fijfd (param $fptr i32) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result f32)
- (f32.reinterpret_i32
- (i32.wrap_i64
- (call_indirect (type $i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_i64_=>_i64)
- (i64.extend_i32_u
- (local.get $0)
- )
- (local.get $1)
- (i64.extend_i32_u
- (i32.reinterpret_f32
- (local.get $2)
- )
- )
- (i64.reinterpret_f64
- (local.get $3)
- )
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (i64.const 0)
- (local.get $fptr)
- )
- )
- )
- )
(func $byn$fpcast-emu$a (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)
(call $a
(i32.wrap_i64