aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc
diff options
context:
space:
mode:
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.cc44
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_;
};