v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
wasm-interpreter-objects.cc
Go to the documentation of this file.
1// Copyright 2024 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
12
13namespace v8 {
14namespace internal {
15
16// static
19 DCHECK(v8_flags.wasm_jitless);
20 Isolate* isolate = instance->GetIsolate();
21 Factory* factory = isolate->factory();
23 instance->trusted_data(isolate), isolate);
24 DCHECK(!trusted_data->has_interpreter_object());
25 DirectHandle<Tuple2> interpreter_object = factory->NewTuple2(
26 instance, factory->undefined_value(), AllocationType::kOld);
27 trusted_data->set_interpreter_object(*interpreter_object);
28 return interpreter_object;
29}
30
31// static
33 Isolate* isolate, Address frame_pointer,
34 DirectHandle<WasmInstanceObject> instance, int func_index,
35 const std::vector<wasm::WasmValue>& argument_values,
36 std::vector<wasm::WasmValue>& return_values) {
37 DCHECK_LE(0, func_index);
38
41 DCHECK_NOT_NULL(thread);
42
43 // Assume an instance can run in only one thread.
44 DirectHandle<Tuple2> interpreter_object =
45 WasmTrustedInstanceData::GetInterpreterObject(instance);
47 wasm::GetOrCreateInterpreterHandle(isolate, interpreter_object);
48
49 return handle->Execute(thread, frame_pointer,
50 static_cast<uint32_t>(func_index), argument_values,
51 return_values);
52}
53
54// static
56 Isolate* isolate, Address frame_pointer,
57 DirectHandle<WasmInstanceObject> instance, int func_index,
58 uint8_t* interpreter_sp) {
59 DCHECK_LE(0, func_index);
60
63 DCHECK_NOT_NULL(thread);
64
65 // Assume an instance can run in only one thread.
66 DirectHandle<Tuple2> interpreter_object =
67 WasmTrustedInstanceData::GetInterpreterObject(instance);
69 wasm::GetInterpreterHandle(isolate, interpreter_object);
70
71 return handle->Execute(thread, frame_pointer,
72 static_cast<uint32_t>(func_index), interpreter_sp);
73}
74
75// static
76std::vector<WasmInterpreterStackEntry>
78 Address frame_pointer) {
79 Tagged<Object> handle_obj = get_interpreter_handle(interpreter_object);
80 DCHECK(!IsUndefined(handle_obj));
82 ->raw()
83 ->GetInterpretedStack(frame_pointer);
84}
85
86// static
88 Address frame_pointer, int index) {
89 Tagged<Object> handle_obj = get_interpreter_handle(interpreter_object);
90 DCHECK(!IsUndefined(handle_obj));
92 ->raw()
93 ->GetFunctionIndex(frame_pointer, index);
94}
95
96} // namespace internal
97} // namespace v8
DirectHandle< Tuple2 > NewTuple2(DirectHandle< Object > value1, DirectHandle< Object > value2, AllocationType allocation)
Definition factory.cc:396
static Tagged< Object > get_interpreter_handle(Tagged< Tuple2 > interpreter_object)
static int GetFunctionIndex(Tagged< Tuple2 > interpreter_object, Address frame_pointer, int index)
static DirectHandle< Tuple2 > New(DirectHandle< WasmInstanceObject >)
static std::vector< WasmInterpreterStackEntry > GetInterpretedStack(Tagged< Tuple2 > interpreter_object, Address frame_pointer)
static bool RunInterpreter(Isolate *isolate, Address frame_pointer, DirectHandle< WasmInstanceObject > instance, int func_index, const std::vector< wasm::WasmValue > &argument_values, std::vector< wasm::WasmValue > &return_values)
static WasmInterpreterThread * GetCurrentInterpreterThread(Isolate *isolate)
V8_EXPORT_PRIVATE InterpreterHandle * GetInterpreterHandle(Isolate *isolate, DirectHandle< Tuple2 > interpreter_object)
V8_EXPORT_PRIVATE InterpreterHandle * GetOrCreateInterpreterHandle(Isolate *isolate, DirectHandle< Tuple2 > interpreter_object)
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
Definition handles-inl.h:72
V8_EXPORT_PRIVATE FlagValues v8_flags
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
Definition casting.h:150
#define DCHECK_LE(v1, v2)
Definition logging.h:490
#define DCHECK_NOT_NULL(val)
Definition logging.h:492
#define DCHECK(condition)
Definition logging.h:482