diff options
Diffstat (limited to 'deps/v8/test/cctest/wasm/test-c-wasm-entry.cc')
-rw-r--r-- | deps/v8/test/cctest/wasm/test-c-wasm-entry.cc | 44 |
1 files changed, 16 insertions, 28 deletions
diff --git a/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc b/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc index c4b8adddf4..ab8545bf5d 100644 --- a/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc +++ b/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc @@ -7,6 +7,7 @@ #include "src/base/overflowing-math.h" #include "src/codegen/assembler-inl.h" #include "src/objects/objects-inl.h" +#include "src/wasm/wasm-arguments.h" #include "src/wasm/wasm-objects.h" #include "test/cctest/cctest.h" #include "test/cctest/compiler/value-helper.h" @@ -41,46 +42,33 @@ class CWasmEntryArgTester { Handle<WasmInstanceObject> instance(runner_.builder().instance_object()); Handle<WasmDebugInfo> debug_info = WasmInstanceObject::GetOrCreateDebugInfo(instance); - c_wasm_entry_fn_ = WasmDebugInfo::GetCWasmEntry(debug_info, sig_); + c_wasm_entry_ = WasmDebugInfo::GetCWasmEntry(debug_info, sig_); } template <typename... Rest> - void WriteToBuffer(Address buf, Rest... rest) { + void WriteToBuffer(CWasmArgumentsPacker* packer, Rest... rest) { static_assert(sizeof...(rest) == 0, "this is the base case"); } template <typename First, typename... Rest> - void WriteToBuffer(Address buf, First first, Rest... rest) { - WriteUnalignedValue(buf, first); - WriteToBuffer(buf + sizeof(first), rest...); + void WriteToBuffer(CWasmArgumentsPacker* packer, First first, Rest... rest) { + packer->Push(first); + WriteToBuffer(packer, rest...); } void CheckCall(Args... args) { - std::vector<uint8_t> arg_buffer(sizeof...(args) * 8); - WriteToBuffer(reinterpret_cast<Address>(arg_buffer.data()), args...); - - Handle<Object> receiver = isolate_->factory()->undefined_value(); - Handle<Object> buffer_obj( - Object(reinterpret_cast<Address>(arg_buffer.data())), isolate_); - CHECK(!buffer_obj->IsHeapObject()); - Handle<Object> code_entry_obj(Object(wasm_code_->instruction_start()), - isolate_); - CHECK(!code_entry_obj->IsHeapObject()); - Handle<Object> call_args[]{code_entry_obj, - runner_.builder().instance_object(), buffer_obj}; - static_assert( - arraysize(call_args) == compiler::CWasmEntryParameters::kNumParameters, - "adapt this test"); + CWasmArgumentsPacker packer(CWasmArgumentsPacker::TotalSize(sig_)); + WriteToBuffer(&packer, args...); + Address wasm_call_target = wasm_code_->instruction_start(); + Handle<Object> object_ref = runner_.builder().instance_object(); wasm_code_->native_module()->SetExecutable(true); - MaybeHandle<Object> return_obj = Execution::Call( - isolate_, c_wasm_entry_fn_, receiver, arraysize(call_args), call_args); - CHECK(!return_obj.is_null()); - CHECK(return_obj.ToHandleChecked()->IsSmi()); - CHECK_EQ(0, Smi::ToInt(*return_obj.ToHandleChecked())); + Execution::CallWasm(isolate_, c_wasm_entry_, wasm_call_target, object_ref, + packer.argv()); + CHECK(!isolate_->has_pending_exception()); + packer.Reset(); // Check the result. - ReturnType result = ReadUnalignedValue<ReturnType>( - reinterpret_cast<Address>(arg_buffer.data())); + ReturnType result = packer.Pop<ReturnType>(); ReturnType expected = expected_fn_(args...); if (std::is_floating_point<ReturnType>::value) { CHECK_DOUBLE_EQ(expected, result); @@ -94,7 +82,7 @@ class CWasmEntryArgTester { Isolate* isolate_; std::function<ReturnType(Args...)> expected_fn_; FunctionSig* sig_; - Handle<JSFunction> c_wasm_entry_fn_; + Handle<Code> c_wasm_entry_; WasmCode* wasm_code_; }; |