73#define LOAD_ROOT(RootName, factory_name) \
74 (isolate_ ? graph()->NewNode(mcgraph()->common()->HeapConstant( \
75 isolate_->factory()->factory_name())) \
76 : gasm_->LoadImmutable( \
77 MachineType::Pointer(), BuildLoadIsolateRoot(), \
78 IsolateData::root_slot_offset(RootIndex::k##RootName)))
81bool ContainsSimd(
const Signature<T>*
sig) {
82 for (
auto type :
sig->all()) {
88bool ContainsInt64(
const wasm::CanonicalSig*
sig) {
89 for (
auto type :
sig->all()) {
109 has_simd_(
sig ? ContainsSimd(
sig) : ContainsSimd(wrapper_sig)),
111 wrapper_sig_(wrapper_sig),
113 parameter_mode_(parameter_mode),
131 std::any_of(env->
module->memories.begin(),
132 env->
module->memories.end(),
134 return memory.bounds_checks ==
150 if (v8_flags.trace_turbo_inlining) { \
151 StdoutStream() << x << "\n"; \
159 const uint32_t kMaxWasmInlineeSize = 30;
160 if (inlinee.
code.
length() > kMaxWasmInlineeSize) {
161 TRACE(
"- not inlining: function body is larger than max inlinee size ("
162 << inlinee.
code.
length() <<
" > " << kMaxWasmInlineeSize <<
")");
166 TRACE(
"- not inlining: function is imported");
171 bool is_shared =
module->type(inlinee.sig_index).is_shared;
178 &unused_detected_features, inlinee_body)
184 TRACE(
"- not inlining: function body is invalid");
187 module->set_function_validated(fct_index);
195 :
"- not inlining: function body contains unsupported instructions"));
206 for (
unsigned i = 0;
i < params;
i++) {
214 Assert(
gasm_->HasInstanceType(param, WASM_TRUSTED_INSTANCE_DATA_TYPE),
215 AbortReason::kUnexpectedInstanceType);
223 Assert(
gasm_->HasInstanceType(param, WASM_IMPORT_DATA_TYPE),
224 AbortReason::kUnexpectedInstanceType);
228 WasmImportData::kProtectedInstanceDataOffset));
234 Assert(
gasm_->HasInstanceType(param, JS_FUNCTION_TYPE),
235 AbortReason::kUnexpectedInstanceType);
238 gasm_->LoadFunctionDataFromJSFunction(param));
262 gasm_->MergeControlToEnd(terminate);
263 gasm_->InitializeEffectControl(
nullptr,
nullptr);
272 :
gasm_->LoadRootRegister();
286#define TRAPREASON_TO_TRAPID(name) \
287 case wasm::k##name: \
288 static_assert(static_cast<int>(TrapId::k##name) == \
289 static_cast<int>(Builtin::kThrowWasm##name), \
290 "trap id mismatch"); \
291 return TrapId::k##name;
293#undef TRAPREASON_TO_TRAPID
300 unsigned count =
static_cast<unsigned>(vals.
size());
313 gasm_->MergeControlToEnd(ret);
324 return gasm_->IsNull(
object, type);
348 Node* implicit_first_arg,
351 const size_t has_frame_state = frame_state !=
nullptr ? 1 : 0;
352 const size_t extra = 3;
353 const size_t count = 1 + param_count + extra + has_frame_state;
361 inputs[1] = implicit_first_arg;
362 if (param_count > 0) {
363 memcpy(&inputs[2], &
args[1], param_count *
sizeof(
Node*));
367 if (has_frame_state != 0) inputs[param_count + 2] = frame_state;
368 inputs[param_count + has_frame_state + 2] =
effect();
369 inputs[param_count + has_frame_state + 3] =
control();
385 Node* implicit_first_arg,
bool indirect,
389 mcgraph()->zone(),
sig, call_kind, frame_state !=
nullptr);
392 implicit_first_arg, op, frame_state);
398 size_t ret_count =
sig->return_count();
399 if (ret_count == 0)
return call;
402 if (ret_count == 1) {
407 for (
size_t i = 0;
i < ret_count;
i++) {
429 auto centry_id = Builtin::kWasmCEntry;
436 static const int kMaxParams = 5;
438 Node* inputs[kMaxParams + 6];
440 inputs[
count++] = centry_stub;
442 inputs[
count++] = parameters[
i];
447 inputs[
count++] = js_context;
451 return gasm_->Call(call_descriptor,
count, inputs);
463 int alignment =
offset % type.value_kind_size();
470 if (alignment == 0 ||
mcgraph()->machine()->UnalignedLoadSupported(
471 type.machine_representation())) {
480 int alignment =
offset % type.value_kind_size();
487 mcgraph()->machine()->BitcastTaggedToWord(), value, effect,
control);
489 if (alignment == 0 ||
mcgraph()->machine()->UnalignedStoreSupported(rep)) {
508 sig->parameter_count());
509 for (
auto ret :
sig->returns()) {
513 builder.
AddReturn(ret.machine_representation());
517 for (
auto param :
sig->parameters()) {
524 builder.
AddParam(param.machine_representation());
527 return builder.
Get();
556 Node* low_word =
gasm_->TruncateInt64ToInt32(input);
557 Node* high_word =
gasm_->TruncateInt64ToInt32(
558 gasm_->Word64Shr(input,
gasm_->Int32Constant(32)));
559 return gasm_->CallBuiltin(Builtin::kI32PairToBigInt,
581 Node* thread_in_wasm_flag_address,
bool new_value) {
587 Assert(check, new_value ? AbortReason::kUnexpectedThreadInWasmSet
588 : AbortReason::kUnexpectedThreadInWasmUnset);
592 thread_in_wasm_flag_address, 0,
600 Node* thread_in_wasm_flag_address =
613 Node* message_id =
gasm_->NumberConstant(
static_cast<int32_t
>(abort_reason));
617 check.merge->ReplaceInput(1, call);
647 : origins_(
origins), decoder_(decoder) {}
650 origins_->SetNodeOrigin(
651 node,
NodeOrigin(
"wasm graph creation",
"n/a",
668 ParameterMode parameter_mode,
Isolate* isolate,
673 class ModifyThreadInWasmFlagScope {
675 ModifyThreadInWasmFlagScope(
676 WasmWrapperGraphBuilder* wasm_wrapper_graph_builder,
690 ModifyThreadInWasmFlagScope(
const ModifyThreadInWasmFlagScope&) =
delete;
692 ~ModifyThreadInWasmFlagScope() {
704 Node* BuildCallAndReturn(Node* js_context, Node* function_data,
705 base::SmallVector<Node*, 16>
args, Node* frame_state,
706 bool set_in_wasm_flag) {
707 const int rets_count =
static_cast<int>(wrapper_sig_->return_count());
708 base::SmallVector<Node*, 1> rets(rets_count);
712 std::optional<ModifyThreadInWasmFlagScope>
713 modify_thread_in_wasm_flag_builder;
714 if (set_in_wasm_flag) {
715 modify_thread_in_wasm_flag_builder.emplace(
this,
gasm_.get());
724 WasmFunctionData::kProtectedInternalOffset));
728 WasmInternalFunction::kRawCallTargetOffset));
731 WasmInternalFunction::kProtectedImplicitArgOffset));
737 if (wrapper_sig_->return_count() == 0) {
738 jsval = UndefinedValue();
739 }
else if (wrapper_sig_->return_count() == 1) {
747 void BuildJSToWasmWrapper(Node* frame_state =
nullptr,
748 bool set_in_wasm_flag =
true) {
749 const int wasm_param_count =
750 static_cast<int>(wrapper_sig_->parameter_count());
758 Start(wasm_param_count + 6);
762 Node* js_context = Param(
770 BuildCallToRuntimeWithContext(Runtime::kWasmThrowJSTypeError, js_context,
772 TerminateThrow(effect(), control());
776#if V8_ENABLE_DRUMBRAKE
777 if (
v8_flags.wasm_enable_exec_time_histograms &&
v8_flags.slow_histograms &&
779 Node* runtime_call = BuildCallToRuntimeWithContext(
780 Runtime::kWasmTraceBeginExecution, js_context,
nullptr, 0);
781 SetControl(runtime_call);
785 const int args_count = wasm_param_count + 1;
789 base::SmallVector<Node*, 16> params(args_count);
790 for (
int i = 0;
i < wasm_param_count; ++
i) params[
i + 1] = Param(
i + 1);
795 base::SmallVector<Node*, 16>
args(args_count);
796 for (
int i = 0;
i < wasm_param_count; ++
i) {
797 Node* wasm_param = params[
i + 1];
803 if (wrapper_sig_->GetParam(
i).kind() == wasm::kF32) {
804 wasm_param =
gasm_->TruncateFloat64ToFloat32(wasm_param);
807 args[
i + 1] = wasm_param;
810 Node* jsval = BuildCallAndReturn(js_context, function_data,
args,
811 frame_state, set_in_wasm_flag);
813#if V8_ENABLE_DRUMBRAKE
814 if (
v8_flags.wasm_enable_exec_time_histograms &&
v8_flags.slow_histograms &&
816 Node* runtime_call = BuildCallToRuntimeWithContext(
817 Runtime::kWasmTraceEndExecution, js_context,
nullptr, 0);
818 SetControl(runtime_call);
826 Node* BuildReceiverNode(Node* callable_node, Node*
native_context,
827 Node* undefined_node) {
833 Node* strict_check =
gasm_->Word32And(
834 flags, Int32Constant(SharedFunctionInfo::IsNativeBit::kMask |
835 SharedFunctionInfo::IsStrictBit::kMask));
838 Diamond strict_d(
graph(), mcgraph()->common(), strict_check,
840 Node* old_effect = effect();
841 SetControl(strict_d.if_false);
844 SetEffectControl(strict_d.EffectPhi(old_effect, global_proxy),
850 template <
typename... Args>
854 Node* call_args[] = {function,
args..., effect(), control()};
856 auto call_descriptor =
862 Node* BuildSwitchToTheCentralStack() {
864 ExternalReference::wasm_switch_to_the_central_stack_for_js());
869 Node* central_stack_sp = BuildCCall(
873 Node* old_sp =
gasm_->LoadStackPointer();
875 gasm_->SetStackPointer(central_stack_sp);
879 void BuildSwitchBackFromCentralStack(Node* old_sp) {
883 ExternalReference::wasm_switch_from_the_central_stack_for_js());
886 BuildCCall(&
sig, do_switch,
888 gasm_->SetStackPointer(old_sp);
893 Node* BuildSwitchToTheCentralStackIfNeeded() {
896 Node* isolate_root = BuildLoadIsolateRoot();
897 Node* is_on_central_stack_flag =
899 IsolateData::is_on_central_stack_flag_offset());
903 Node* old_sp = BuildSwitchToTheCentralStack();
910 void BuildJSFastApiCallWrapper(DirectHandle<JSReceiver> callable) {
928 Node* undefined_node = UndefinedValue();
930 BuildModifyThreadInWasmFlag(
false);
932 DirectHandle<JSFunction>
target;
935 Isolate* isolate = callable->GetIsolate();
936 if (IsJSBoundFunction(*callable)) {
944 JSBoundFunction::kBoundTargetFunctionOffset));
949 DCHECK(IsJSFunction(*callable));
951 target_node = callable_node;
958 const Address c_address = api_func_data->GetCFunction(isolate, 0);
960 api_func_data->GetCSignature(target->GetIsolate(), 0);
962#ifdef V8_USE_SIMULATOR_WITH_GENERIC_C_CALLS
963 Address c_functions[] = {c_address};
965 target->GetIsolate()->simulator_data()->RegisterFunctionsAndSignatures(
966 c_functions, c_signatures, 1);
970 Node* function_template_info =
973 SharedFunctionInfo::kUntrustedFunctionDataOffset));
974 Node* api_data_argument =
977 FunctionTemplateInfo::kCallbackDataOffset));
979 FastApiCallFunction c_function{c_address, c_signature};
980 Node* old_sp = BuildSwitchToTheCentralStackIfNeeded();
982 target->GetIsolate(), graph(),
gasm_.get(), c_function,
985 [
this, c_signature, receiver_node](
987 GraphAssemblerLabel<0>* ) {
988 if (param_index == 0) {
989 return gasm_->AdaptLocalArgument(receiver_node);
992 case CTypeInfo::Type::kV8Value:
993 return gasm_->AdaptLocalArgument(Param(param_index));
995 return Param(param_index);
999 [](
const CFunctionInfo* signature, Node* c_return_value) {
1000 return c_return_value;
1002 [](Node* options_stack_slot) {},
1009 BuildSwitchBackFromCentralStack(old_sp);
1011 BuildModifyThreadInWasmFlag(
true);
1016 void BuildCWasmEntry() {
1025 Node* fp_value =
graph()->
NewNode(mcgraph()->machine()->LoadFramePointer());
1031 int wasm_arg_count =
static_cast<int>(wrapper_sig_->parameter_count());
1032 base::SmallVector<Node*, 16>
args(wasm_arg_count + 4);
1039 for (wasm::CanonicalValueType type : wrapper_sig_->parameters()) {
1040 Node* arg_load = SetEffect(
1041 graph()->NewNode(GetSafeLoadOperator(
offset, type), arg_buffer,
1042 Int32Constant(
offset), effect(), control()));
1044 offset += type.value_kind_size();
1057 Node* if_success =
graph()->
NewNode(mcgraph()->common()->IfSuccess(), call);
1058 Node* if_exception =
1059 graph()->
NewNode(mcgraph()->common()->IfException(), call, call);
1062 SetEffectControl(if_exception);
1063 Return(if_exception);
1066 SetEffectControl(call, if_success);
1069 for (wasm::CanonicalValueType type : wrapper_sig_->returns()) {
1070 Node* value = wrapper_sig_->return_count() == 1
1075 BuildSafeStore(
offset, type, arg_buffer, value, effect(), control()));
1076 offset += type.value_kind_size();
1082 if (mcgraph()->machine()->Is32() && ContainsInt64(wrapper_sig_)) {
1091 Signature<MachineRepresentation> c_entry_sig(1, 4, sig_reps);
1092 Int64Lowering
r(mcgraph()->
graph(), mcgraph()->machine(),
1094 mcgraph()->zone(), &c_entry_sig);
1113 Node* frame_state,
bool set_in_wasm_flag) {
1114 WasmWrapperGraphBuilder builder(zone, mcgraph, signature,
1115 WasmGraphBuilder::kJSFunctionAbiMode, isolate,
1117 builder.BuildJSToWasmWrapper(frame_state, set_in_wasm_flag);
1122 return Pipeline::NewWasmTurboshaftWrapperCompilationJob(
1129MachineGraph* CreateCommonMachineGraph(
Zone* zone) {
1130 return zone->
New<MachineGraph>(
1131 zone->
New<TFGraph>(zone), zone->
New<CommonOperatorBuilder>(zone),
1132 zone->
New<MachineOperatorBuilder>(
1134 InstructionSelector::SupportedMachineOperatorFlags(),
1135 InstructionSelector::AlignmentRequirements()));
1148 "wasm.CompileWasmImportCallWrapper");
1155 constexpr size_t kMaxNameLen = 128;
1156 char func_name[kMaxNameLen];
1157 int name_prefix_len = SNPrintF(
base::VectorOf(func_name, kMaxNameLen),
1158 "wasm-to-js-%d-",
static_cast<int>(
kind));
1162 auto result = Pipeline::GenerateCodeForWasmNativeStubFromTurboshaft(
1165 expected_arity, suspend},
1170 int codesize =
result.code_desc.body_size();
1171 StdoutStream{} <<
"Compiled WasmToJS wrapper " << func_name <<
", took "
1172 << time.InMilliseconds() <<
" ms; codesize " << codesize
1182 "wasm.CompileWasmCapiFunction");
1184 return Pipeline::GenerateCodeForWasmNativeStubFromTurboshaft(
1190 return fast_api_call::CanOptimizeFastSignature(
sig);
1196 "wasm.CompileWasmJSFastCallWrapper");
1200 MachineGraph* mcgraph = CreateCommonMachineGraph(&zone);
1202 WasmWrapperGraphBuilder builder(&zone, mcgraph,
sig,
1203 WasmGraphBuilder::kWasmImportDataMode,
1207 int param_count =
static_cast<int>(
sig->parameter_count()) +
1210 builder.Start(param_count);
1211 builder.BuildJSFastApiCallWrapper(callable);
1217 call_descriptor = GetI32WasmCallDescriptor(&zone, call_descriptor);
1220 const char* debug_name =
"WasmJSFastApiCall";
1222 call_descriptor, mcgraph, CodeKind::WASM_TO_JS_FUNCTION, debug_name,
1231 std::unique_ptr<Zone> zone = std::make_unique<Zone>(
1237 InstructionSelector::SupportedMachineOperatorFlags(),
1238 InstructionSelector::AlignmentRequirements());
1241 WasmWrapperGraphBuilder builder(zone.get(), mcgraph,
sig,
1242 WasmGraphBuilder::kNoSpecialParameterMode,
1244 builder.BuildCWasmEntry();
1257 Linkage::GetSimplifiedCDescriptor(zone.get(), &incoming_sig, flags);
1260 constexpr size_t kMaxNameLen = 128;
1261 constexpr size_t kNamePrefixLen = 13;
1262 auto name_buffer = std::unique_ptr<char[]>(
new char[kMaxNameLen]);
1263 memcpy(name_buffer.get(),
"c-wasm-entry:", kNamePrefixLen);
1268 std::unique_ptr<TurbofanCompilationJob> job(
1269 Pipeline::NewWasmHeapStubCompilationJob(
1270 isolate, incoming, std::move(zone), graph, CodeKind::C_WASM_ENTRY,
1273 CHECK_NE(job->ExecuteJob(isolate->counters()->runtime_call_stats(),
nullptr),
1277 return job->compilation_info()->code();
1283 .record_reloc_info_for_serialization =
true,
1284 .enable_root_relative_access =
false,
1292 .record_reloc_info_for_serialization =
false,
1293 .enable_root_relative_access =
false,
#define Assert(condition)
const CTypeInfo & ArgumentInfo(unsigned int index) const
Vector< T > SubVector(size_t from, size_t to) const
constexpr size_t size() const
constexpr T * begin() const
static V8_EXPORT_PRIVATE ExternalReference isolate_address()
static ExternalReference Create(const SCTableReference &table_ref)
static constexpr int BuiltinSlotOffset(Builtin id)
static constexpr uint32_t thread_in_wasm_flag_address_offset()
static constexpr uint32_t context_offset()
Address isolate_root() const
constexpr bool IsTagged() const
static constexpr MachineType Pointer()
static constexpr MachineType Uint8()
static constexpr MachineType Int32()
static constexpr MachineType AnyTagged()
static constexpr MachineType Uint32()
static constexpr MachineType TaggedPointer()
static constexpr MachineRepresentation PointerRepresentation()
static V8_EXPORT_PRIVATE const Function * FunctionForId(FunctionId id)
static constexpr int kFirstPushedFrameValueOffset
static std::unique_ptr< char[]> GetDebugName(const wasm::CanonicalSig *sig)
T * AllocateArray(size_t length)
const Operator * Call(const CallDescriptor *call_descriptor)
detail::GraphAssemblerLabelForReps< Reps... > MakeLabel(Reps... reps)
Node * BitcastMaybeObjectToWord(Node *value)
Node * Store(StoreRepresentation rep, Node *object, Node *offset, Node *value)
Node * IntPtrConstant(intptr_t value)
Node * ExternalConstant(ExternalReference ref)
Node * LoadFramePointer()
Node * IntPtrEqual(Node *left, Node *right)
TNode< Object > Call(const CallDescriptor *call_descriptor, int inputs_size, Node **inputs)
Node * LoadRootRegister()
void GotoIf(Node *condition, detail::GraphAssemblerLabelForVars< Vars... > *label, BranchHint hint, Vars...)
void Bind(GraphAssemblerLabel< VarCount > *label)
Node * Load(MachineType type, Node *object, Node *offset)
void Goto(detail::GraphAssemblerLabelForVars< Vars... > *label, Vars...)
static constexpr int GetJSCallContextParamIndex(int parameter_count)
static CallDescriptor * GetSimplifiedCDescriptor(Zone *zone, const MachineSignature *sig, CallDescriptor::Flags flags=CallDescriptor::kNoFlags, Operator::Properties properties=Operator::kNoThrow)
static CallDescriptor * GetRuntimeCallDescriptor(Zone *zone, Runtime::FunctionId function, int js_parameter_count, Operator::Properties properties, CallDescriptor::Flags flags, LazyDeoptOnThrow lazy_deopt_on_throw=LazyDeoptOnThrow::kNo)
static constexpr int kJSCallClosureParamIndex
Node * ExternalConstant(ExternalReference ref)
CommonOperatorBuilder * common() const
Node * IntPtrConstant(intptr_t value)
MachineOperatorBuilder * machine() const
Node * Int32Constant(int32_t value)
const Operator * Load(LoadRepresentation rep)
const Operator * UnalignedLoad(LoadRepresentation rep)
static Type GetType(const Node *node)
static bool IsTyped(const Node *node)
static void SetType(Node *node, Type type)
int EffectOutputCount() const
int ControlOutputCount() const
void SetSourcePosition(Node *node, SourcePosition position)
void SetStart(Node *start)
Node * NewNode(const Operator *op, int input_count, Node *const *inputs, bool incomplete=false)
WasmDecorator(NodeOriginTable *origins, wasm::Decoder *decoder)
compiler::NodeOriginTable * origins_
void Decorate(Node *node) final
Node * LoadFunctionDataFromJSFunction(Node *js_function)
Node * LoadFromObject(MachineType type, Node *base, Node *offset)
Node * LoadTrustedDataFromInstanceObject(Node *instance_object)
SimplifiedOperatorBuilder * simplified() override
Node * LoadFixedArrayElementPtr(Node *array, int index)
Node * LoadImmutableProtectedPointerFromObject(Node *object, Node *offset)
Node * LoadSharedFunctionInfo(Node *js_function)
Node * BuildSafeStore(int offset, wasm::ValueTypeBase type, Node *arg_buffer, Node *value, Node *effect, Node *control)
V8_EXPORT_PRIVATE void LowerInt64(Signature< MachineRepresentation > *sig)
Node * Return(base::Vector< Node * > nodes)
Node * SetType(Node *node, wasm::ValueType type)
Node * SetEffect(Node *node)
void BuildModifyThreadInWasmFlagHelper(Node *thread_in_wasm_flag_address, bool new_value)
bool TryWasmInlining(int fct_index, wasm::NativeModule *native_module, int inlining_id)
void Assert(Node *condition, AbortReason abort_reason)
std::unique_ptr< WasmGraphAssembler > gasm_
@ kNoSpecialParameterMode
Node * Int32Constant(int32_t value)
const ParameterMode parameter_mode_
Node * BuildCallToRuntime(Runtime::FunctionId f, Node **parameters, int parameter_count)
SetOncePointer< Node > instance_data_node_
V8_EXPORT_PRIVATE ~WasmGraphBuilder()
const wasm::CanonicalSig *const wrapper_sig_
Node * SetControl(Node *node)
Node * TypeGuard(Node *value, wasm::ValueType type)
wasm::CompilationEnv *const env_
wasm::WasmEnabledFeatures enabled_features_
Node * BuildWasmCall(const Signature< T > *sig, base::Vector< Node * > args, base::Vector< Node * > rets, wasm::WasmCodePosition position, Node *implicit_first_arg, bool indirect, Node *frame_state=nullptr)
Node * NoContextConstant()
void SetSourcePosition(Node *node, wasm::WasmCodePosition position)
MachineGraph *const mcgraph_
Node * Param(int index, const char *debug_name=nullptr)
Node * IsNull(Node *object, wasm::ValueType type)
Node * BuildCallNode(size_t param_count, base::Vector< Node * > args, wasm::WasmCodePosition position, Node *instance_node, const Operator *op, Node *frame_state=nullptr)
const Operator * GetSafeLoadOperator(int offset, wasm::ValueTypeBase type)
void SetEffectControl(Node *effect, Node *control)
void TerminateThrow(Node *effect, Node *control)
Node * BuildLoadIsolateRoot()
V8_EXPORT_PRIVATE WasmGraphBuilder(wasm::CompilationEnv *env, Zone *zone, MachineGraph *mcgraph, const wasm::FunctionSig *sig, compiler::SourcePositionTable *spt, ParameterMode parameter_mode, Isolate *isolate, wasm::WasmEnabledFeatures enabled_features, const wasm::CanonicalSig *wrapper_sig=nullptr)
const wasm::FunctionSig *const function_sig_
Node * BuildChangeInt64ToBigInt(Node *input, StubCallMode stub_mode)
TrapId GetTrapIdForTrap(wasm::TrapReason reason)
compiler::SourcePositionTable *const source_position_table_
void Start(unsigned params)
Node * BuildCallToRuntimeWithContext(Runtime::FunctionId f, Node *js_context, Node **parameters, int parameter_count)
void BuildModifyThreadInWasmFlag(bool new_value)
static bool TryInlining(Zone *zone, const wasm::WasmModule *module, MachineGraph *mcgraph, const wasm::FunctionBody &body, base::Vector< const uint8_t > bytes, SourcePositionTable *source_position_table, int inlining_id)
constexpr IndependentHeapType AsNonNull() const
const WasmModule * module() const
bool HasWireBytes() const
base::Vector< const uint8_t > wire_bytes() const
static constexpr int ToTagged(int offset)
static constexpr int FlagsOffsetInSharedFunctionInfo()
static constexpr WasmEnabledFeatures All()
uint32_t end_offset() const
#define COMPRESS_POINTERS_BOOL
#define FOREACH_WASM_TRAPREASON(V)
base::Vector< const DirectHandle< Object > > args
NodeOriginTable * origins
SourcePositionTable * source_positions
ZoneVector< RpoNumber > & result
const compiler::NullCheckStrategy null_check_strategy_
CompilationEnv *const env_
const WasmEnabledFeatures enabled_features_
constexpr Vector< T > VectorOf(T *start, size_t size)
Node * BuildFastApiCall(Isolate *isolate, TFGraph *graph, GraphAssembler *graph_assembler, FastApiCallFunction c_function, Node *data_argument, const GetParameter &get_parameter, const ConvertReturnValue &convert_return_value, const InitializeOptions &initialize_options, const GenerateSlowApiCall &generate_slow_api_call)
AssemblerOptions WasmAssemblerOptions()
AssemblerOptions WasmStubAssemblerOptions()
Signature< MachineRepresentation > * CreateMachineSignature(Zone *zone, const Signature< T > *sig, wasm::CallOrigin origin)
bool IsFastCallSupportedSignature(const v8::CFunctionInfo *sig)
wasm::WasmCompilationResult CompileWasmCapiCallWrapper(const wasm::CanonicalSig *sig)
std::unique_ptr< OptimizedCompilationJob > NewJSToWasmCompilationJob(Isolate *isolate, const wasm::CanonicalSig *sig)
wasm::WasmCompilationResult CompileWasmImportCallWrapper(wasm::ImportCallKind kind, const wasm::CanonicalSig *sig, bool source_positions, int expected_arity, wasm::Suspend suspend)
void BuildInlinedJSToWasmWrapper(Zone *zone, MachineGraph *mcgraph, const wasm::CanonicalSig *signature, Isolate *isolate, compiler::SourcePositionTable *spt, Node *frame_state, bool set_in_wasm_flag)
CallDescriptor * GetWasmCallDescriptor(Zone *zone, const Signature< T > *fsig, WasmCallKind call_kind, bool need_frame_state)
wasm::WasmCompilationResult CompileWasmJSFastCallWrapper(const wasm::CanonicalSig *sig, DirectHandle< JSReceiver > callable)
Handle< Code > CompileCWasmEntry(Isolate *isolate, const wasm::CanonicalSig *sig)
static const Operator * IntPtrConstant(CommonOperatorBuilder *common, intptr_t value)
bool IsTrapHandlerEnabled()
constexpr int kWasmInstanceDataParameterIndex
constexpr WasmCodePosition kNoCodePosition
constexpr IndependentHeapType kWasmExternRef
bool IsJSCompatibleSignature(const CanonicalSig *sig)
constexpr IndependentHeapType kWasmRefExternString
WasmEngine * GetWasmEngine()
constexpr IndependentValueType kWasmS128
constexpr IndependentValueType kWasmI64
constexpr int kMinParameterIndex
Tagged(T object) -> Tagged< T >
V8_INLINE DirectHandle< T > direct_handle(Tagged< T > object, Isolate *isolate)
kWasmInternalFunctionIndirectPointerTag kProtectedInstanceDataOffset sig
constexpr bool IsAnyTagged(MachineRepresentation rep)
Signature< MachineType > MachineSignature
static constexpr bool kCompressGraphZone
V8_EXPORT_PRIVATE FlagValues v8_flags
JSArrayBuffer::IsDetachableBit is_shared
!IsContextMap !IsContextMap native_context
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK_LE(v1, v2)
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_NE(v1, v2)
#define CHECK_NE(lhs, rhs)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define DCHECK_GT(v1, v2)
static AssemblerOptions Default(Isolate *isolate)
const WasmModule *const module
bool function_was_validated(int func_index) const
#define TRACE_EVENT0(category_group, name)
#define TRACE_DISABLED_BY_DEFAULT(name)
#define V8_STATIC_ROOTS_BOOL
#define V8_UNLIKELY(condition)
Node * thread_in_wasm_flag_address_
SetOncePointer< const Operator > int32_to_heapnumber_operator_
#define TRAPREASON_TO_TRAPID(name)
SetOncePointer< const Operator > tagged_to_float64_operator_
SetOncePointer< const Operator > float64_to_number_operator_
SetOncePointer< const Operator > float32_to_number_operator_
SetOncePointer< const Operator > tagged_non_smi_to_int32_operator_
WasmWrapperGraphBuilder * wasm_wrapper_graph_builder_
SourcePositionTable * source_position_table_