diff options
-rw-r--r-- | src/passes/FuncCastEmulation.cpp | 7 | ||||
-rw-r--r-- | test/passes/fpcast-emu.txt | 184 |
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 |