20namespace interpreter {
24using compiler::CodeAssemblerState;
31 operand_scale_(operand_scale),
48 reloaded_frame_ptr_(false),
49 bytecode_array_valid_(true) {
50#ifdef V8_TRACE_UNOPTIMIZED
88 InterpreterDispatchDescriptor::kBytecodeOffset))) {
116 int zero_offset = store_offset + 4;
117 int payload_offset = store_offset;
118#if V8_TARGET_LITTLE_ENDIAN
119 std::swap(zero_offset, payload_offset);
146 InterpreterDispatchDescriptor::kDispatchTable))) {
148 ExternalReference::interpreter_dispatch_table_address(
isolate()));
191 Label context_found(
this);
193 Label context_search(
this, {&cur_depth, &cur_context});
199 BIND(&context_search);
209 BIND(&context_found);
210 return cur_context.value();
241#if V8_TARGET_LITTLE_ENDIAN
311 this, UintPtrGreaterThanOrEqual(opcode,
UintPtrConstant(
static_cast<int>(
321 constexpr int short_star_to_operand =
324 static_assert(short_star_to_operand ==
394 static const int kMaxCount = 4;
411#if V8_TARGET_LITTLE_ENDIAN
412 const int kStep = -1;
413 int msb_offset =
count - 1;
414#elif V8_TARGET_BIG_ENDIAN
418#error "Unknown Architecture"
436 for (
int i = 1; --
count >= 0;
i++) {
518 switch (operand_size) {
534 switch (operand_size) {
661 DCHECK_EQ(OperandType::kNativeContextIndex,
734 bytecode_ == Bytecode::kInvokeIntrinsic);
747 args.base_reg_location(), function);
753template <
class... TArgs>
761 bytecode_ == Bytecode::kInvokeIntrinsic);
769 args..., UndefinedConstant());
807 CollectCallFeedback(function,
receiver, context, maybe_feedback_vector,
811 Comment(
"call using CallWithSpread builtin");
817 args.base_reg_location(), function);
830 Label return_result(
this), try_fast_construct(
this), construct_generic(
this),
831 construct_array(
this, &var_site);
835 CollectConstructFeedback(context, target,
new_target, maybe_feedback_vector,
838 &try_fast_construct, &construct_array, &var_site);
840 BIND(&try_fast_construct);
842 Comment(
"call using FastConstruct builtin");
846 CallBuiltin(Builtin::kInterpreterPushArgsThenFastConstructFunction,
847 context, args_count,
args.base_reg_location(), target,
849 Goto(&return_result);
852 BIND(&construct_generic);
855 Comment(
"call using Construct builtin");
861 Goto(&return_result);
864 BIND(&construct_array);
868 Comment(
"call using ConstructArray builtin");
874 Goto(&return_result);
877 BIND(&return_result);
878 return var_result.value();
894 GotoIf(IsUndefined(maybe_feedback_vector), &construct);
908 Label check_initialized(
this), initialize(
this), mark_megamorphic(
this);
911 Comment(
"check if megamorphic");
915 GotoIf(is_megamorphic, &construct);
917 Comment(
"check if weak reference");
922 Comment(
"check if weak reference is cleared");
925 BIND(&check_initialized);
928 Comment(
"check if uninitialized");
930 TaggedEqual(feedback, UninitializedSymbolConstant());
931 Branch(is_uninitialized, &initialize, &mark_megamorphic);
936 Comment(
"check if function in same native context");
941 Label loop(
this, &var_current), done_loop(
this);
945 Label if_boundfunction(
this), if_function(
this);
963 &done_loop, &mark_megamorphic);
966 BIND(&if_boundfunction);
970 current, JSBoundFunction::kBoundTargetFunctionOffset);
978 "ConstructWithSpread:Initialize");
982 BIND(&mark_megamorphic);
986 Comment(
"transition to megamorphic");
989 feedback_vector, slot_id,
993 "ConstructWithSpread:TransitionMegamorphic");
1000 Comment(
"call using ConstructWithSpread builtin");
1004 return CallBuiltin(builtin, context, args_count,
args.base_reg_location(),
1018 Label construct(
this);
1022 GotoIf(IsUndefined(maybe_feedback_vector), &construct);
1024 CollectConstructFeedback(context, target,
new_target, maybe_feedback_vector,
1026 &construct, &construct, &var_site);
1030 return CallBuiltin(Builtin::kInterpreterForwardAllArgsThenConstruct, context,
1044 ExternalReference::runtime_function_table_address(
isolate())));
1054 args.base_reg_location(), function_entry);
1059 const RegListNodePair&
args,
int return_count);
1063 const RegListNodePair&
args,
1072 feedback_cell, FeedbackCell::kInterruptBudgetOffset);
1078 feedback_cell, FeedbackCell::kInterruptBudgetOffset, new_budget);
1084 Comment(
"[ DecreaseInterruptBudget");
1085 Label done(
this), interrupt_check(
this);
1097 BIND(&interrupt_check);
1100 ? Runtime::kBytecodeBudgetInterruptWithStackCheck_Ignition
1101 : Runtime::kBytecodeBudgetInterrupt_Ignition,
1107 Comment(
"] DecreaseInterruptBudget");
1126#ifdef V8_TRACE_UNOPTIMIZED
1189 int operand_index) {
1195 int operand_index) {
1207 int operand_index) {
1213 int operand_index) {
1232 Label do_inline_star(
this), done(
this);
1240 static_cast<int>(Bytecode::kIllegal));
1246 Branch(is_star, &do_inline_star, &done);
1248 BIND(&do_inline_star);
1271#ifdef V8_TRACE_UNOPTIMIZED
1286 Comment(
"========= Dispatch");
1338 case OperandScale::kDouble:
1341 case OperandScale::kQuadruple:
1399 Abort(abort_reason);
1418 Label osr_to_opt(
this), osr_to_sparkplug(
this);
1444 static_assert(FeedbackVector::OsrUrgencyBits::kShift == 0);
1446 osr_state,
Int32Constant(FeedbackVector::OsrUrgencyBits::kMask));
1447 GotoIf(Uint32LessThan(loop_depth, osr_urgency), &osr_to_opt);
1451 Goto(&osr_to_sparkplug);
1470 CallBuiltin(Builtin::kInterpreterOnStackReplacement, context,
1471 maybe_target_code.value(), expected_param_count);
1476 BIND(&osr_to_sparkplug);
1494 ExternalReference::interpreter_dispatch_counters(
isolate()));
1499 IntPtrAdd(source_bytecode_table_index, target_bytecode));
1505 old_counter,
IntPtrConstant(std::numeric_limits<uintptr_t>::max()));
1506 Branch(counter_reached_max, &counter_saturated, &counter_ok);
1512 counter_offset, new_counter);
1513 Goto(&counter_saturated);
1516 BIND(&counter_saturated);
1521#if V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_RISCV64 || V8_TARGET_ARCH_RISCV32
1523#elif V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_S390X || \
1524 V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_PPC64 || \
1525 V8_TARGET_ARCH_LOONG64
1528#error "Unknown Architecture"
1544 Abort(AbortReason::kInvalidParametersAndRegistersInGenerator);
1567 Label loop(
this, &var_index), done_loop(
this);
1596 Label loop(
this, &var_index), done_loop(
this);
1601 GotoIfNot(UintPtrLessThan(index, register_count), &done_loop);
1633 Label loop(
this, &var_index), done_loop(
this);
1638 GotoIfNot(UintPtrLessThan(index, register_count), &done_loop);
1667 Label if_done(
this), if_objectissmi(
this), if_objectisheapnumber(
this),
1671 Branch(IsHeapNumber(
CAST(
object)), &if_objectisheapnumber, &if_objectisother);
1673 BIND(&if_objectissmi);
1675 var_result =
CAST(
object);
1680 BIND(&if_objectisheapnumber);
1682 var_result =
CAST(
object);
1687 BIND(&if_objectisother);
1689 auto builtin = Builtin::kNonNumberToNumber;
1691 builtin = Builtin::kNonNumberToNumeric;
1693 Label not_bigint(
this);
1696 var_result =
CAST(
object);
1722#undef TVARIABLE_CONSTRUCTOR
#define CSA_DCHECK(csa,...)
#define TVARIABLE_CONSTRUCTOR(...)
static constexpr Builtin InterpreterPushArgsThenCall(ConvertReceiverMode receiver_mode, InterpreterPushArgsMode mode)
static constexpr Builtin InterpreterPushArgsThenConstruct(InterpreterPushArgsMode mode)
static constexpr Builtin Call(ConvertReceiverMode=ConvertReceiverMode::kAny)
static constexpr Builtin InterpreterCEntry(int result_size)
TNode< Object > LoadProtectedPointerField(TNode< TrustedObject > object, TNode< IntPtrT > offset)
TNode< IntPtrT > LoadAndUntagFixedArrayBaseLength(TNode< FixedArrayBase > array)
TNode< Smi > SmiFromInt32(TNode< Int32T > value)
void ReportFeedbackUpdate(TNode< FeedbackVector > feedback_vector, TNode< UintPtrT > slot_id, const char *reason)
TNode< Int32T > LoadBytecodeArrayParameterCount(TNode< BytecodeArray > bytecode_array)
TNode< Int32T > TruncateIntPtrToInt32(TNode< IntPtrT > value)
TNode< BoolT > InstanceTypeEqual(TNode< Int32T > instance_type, int type)
void StoreFixedArrayElement(TNode< FixedArray > object, int index, TNode< Object > value, WriteBarrierMode barrier_mode=UPDATE_WRITE_BARRIER, CheckBounds check_bounds=CheckBounds::kAlways)
TNode< Smi > SmiTag(TNode< IntPtrT > value)
TNode< Smi > SmiFromUint32(TNode< Uint32T > value)
TNode< Code > LoadCodePointerFromObject(TNode< HeapObject > object, int offset)
TNode< BoolT > TaggedEqual(TNode< AnyTaggedT > a, TNode< AnyTaggedT > b)
TNode< T > LoadObjectField(TNode< HeapObject > object, int offset)
TNode< BoolT > IsJSFunction(TNode< HeapObject > object)
TNode< BoolT > TaggedNotEqual(TNode< AnyTaggedT > a, TNode< AnyTaggedT > b)
TNode< Uint32T > LoadAndUntagBytecodeArrayLength(TNode< BytecodeArray > array)
void StoreFeedbackVectorSlot(TNode< FeedbackVector > feedback_vector, TNode< UintPtrT > slot, TNode< AnyTaggedT > value, WriteBarrierMode barrier_mode=UPDATE_WRITE_BARRIER, int additional_offset=0)
TNode< MaybeObject > StoreWeakReferenceInFeedbackVector(TNode< FeedbackVector > feedback_vector, TNode< UintPtrT > slot, TNode< HeapObject > value, int additional_offset=0)
TNode< BoolT > IsWeakOrCleared(TNode< MaybeObject > value)
TNode< IntPtrT > SmiUntag(TNode< Smi > value)
TNode< BoolT > IsWeakReferenceToObject(TNode< MaybeObject > maybe_object, TNode< Object > object)
TNode< BoolT > IsCleared(TNode< MaybeObject > value)
void MaybeUpdateFeedback(TNode< Smi > feedback, TNode< HeapObject > maybe_feedback_vector, TNode< UintPtrT > slot_id)
std::function< TNode< T >()> LazyNode
TNode< IntPtrT > SmiToIntPtr(TNode< Smi > value)
void StoreObjectFieldNoWriteBarrier(TNode< HeapObject > object, TNode< IntPtrT > offset, TNode< T > value)
TNode< Object > LoadFixedArrayElement(TNode< FixedArray > object, TNode< TIndex > index, int additional_offset=0, CheckBounds check_bounds=CheckBounds::kAlways)
TNode< MaybeObject > ClearedValue()
TNode< Uint16T > LoadInstanceType(TNode< HeapObject > object)
TNode< NativeContext > LoadNativeContext(TNode< Context > context)
TNode< BoolT > TaggedIsSmi(TNode< MaybeObject > a)
TNode< BoolT > IsMarkedForDeoptimization(TNode< Code > code)
TNode< Int32T > LoadBytecodeArrayParameterCountWithoutReceiver(TNode< BytecodeArray > bytecode_array)
TNode< Int32T > JSParameterCount(int argc_without_receiver)
TNode< BoolT > SharedFunctionInfoHasBaselineCode(TNode< SharedFunctionInfo > sfi)
TNode< BoolT > IsBigInt(TNode< HeapObject > object)
TNode< BoolT > IsJSFunctionInstanceType(TNode< Int32T > instance_type)
TNode< Int32T > TruncateWordToInt32(TNode< WordT > value)
TNode< MaybeObject > LoadFeedbackVectorSlot(TNode< FeedbackVector > feedback_vector, TNode< TIndex > slot, int additional_offset=0)
TNode< TValue > LoadArrayElement(TNode< Array > array, int array_header_size, TNode< TIndex > index, int additional_offset=0)
void IncrementCallCount(TNode< FeedbackVector > feedback_vector, TNode< UintPtrT > slot_id)
TNode< TaggedIndex > IntPtrToTaggedIndex(TNode< IntPtrT > value)
TNode< HeapObject > GetHeapObjectAssumeWeak(TNode< MaybeObject > value)
TNode< WordT > TimesSystemPointerSize(TNode< WordT > value)
static Handle< Symbol > MegamorphicSentinel(Isolate *isolate)
constexpr bool IsSigned() const
static constexpr MachineType Uint8()
constexpr MachineRepresentation representation() const
static constexpr MachineType Int32()
static constexpr MachineType Uint32()
static constexpr MachineType Uint16()
static constexpr MachineType Int16()
static constexpr MachineType Int8()
static constexpr MachineRepresentation PointerRepresentation()
static constexpr bool IsImmortalImmovable(RootIndex root_index)
TNode< IntPtrT > IntPtrAdd(TNode< IntPtrT > left, TNode< IntPtrT > right)
TNode< Int32T > Signed(TNode< Word32T > x)
void Comment(MessageWithSourceLocation message, Args &&... args)
TNode< IntPtrT > IntPtrConstant(intptr_t value)
TNode< UintPtrT > ChangeUint32ToWord(TNode< Word32T > value)
TNode< T > UncheckedCast(Node *value)
TNode< Int32T > Int32Mul(TNode< Int32T > left, TNode< Int32T > right)
TNode< BoolT > WordEqual(TNode< WordT > left, TNode< WordT > right)
void GotoIfNot(TNode< IntegralT > condition, Label *false_label, GotoHint goto_hint=GotoHint::kNone)
void UnregisterCallGenerationCallbacks()
Isolate * isolate() const
TNode< Object > LoadFullTagged(Node *base)
TNode< Uint32T > Unsigned(TNode< Word32T > x)
TNode< Int32T > Word32And(TNode< Int32T > left, TNode< Int32T > right)
void RegisterCallGenerationCallbacks(const CodeAssemblerCallback &call_prologue, const CodeAssemblerCallback &call_epilogue)
void TailCallBytecodeDispatch(const CallInterfaceDescriptor &descriptor, TNode< RawPtrT > target, TArgs... args)
TNode< T > ReinterpretCast(Node *value)
TNode< Int32T > Int32Add(TNode< Int32T > left, TNode< Int32T > right)
void StoreFullTaggedNoWriteBarrier(TNode< RawPtrT > base, TNode< Object > tagged_value)
TNode< Smi > SmiConstant(Tagged< Smi > value)
void GotoIf(TNode< IntegralT > condition, Label *true_label, GotoHint goto_hint=GotoHint::kNone)
TNode< T > UncheckedParameter(int value)
Node * Load(MachineType type, Node *base)
TNode< IntPtrT > ChangeInt32ToIntPtr(TNode< Word32T > value)
TNode< Int32T > Int32Sub(TNode< Int32T > left, TNode< Int32T > right)
TNode< RawPtrT > LoadParentFramePointer()
TNode< Int32T > Word32Or(TNode< Int32T > left, TNode< Int32T > right)
TNode< Int32T > Word32Shl(TNode< Int32T > left, TNode< Int32T > right)
TNode< BoolT > IntPtrEqual(TNode< WordT > left, TNode< WordT > right)
void TailCallBuiltinThenBytecodeDispatch(Builtin builtin, Node *context, TArgs... args)
TNode< IntPtrT > IntPtrSub(TNode< IntPtrT > left, TNode< IntPtrT > right)
void TailCallBuiltin(Builtin id, TNode< Object > context, TArgs... args)
TNode< ExternalReference > ExternalConstant(ExternalReference address)
TNode< Int32T > Int32Constant(int32_t value)
TNode< Uint32T > Uint32Constant(uint32_t value)
TNode< Type > HeapConstantNoHole(Handle< Type > object)
TNode< BoolT > Word32Equal(TNode< Word32T > left, TNode< Word32T > right)
TNode< T > CallRuntime(Runtime::FunctionId function, TNode< Object > context, TArgs... args)
TNode< Uint32T > Uint32Mul(TNode< Uint32T > left, TNode< Uint32T > right)
TNode< UintPtrT > UintPtrConstant(uintptr_t value)
TNode< T > CallBuiltin(Builtin id, TNode< Object > context, TArgs... args)
void Branch(TNode< IntegralT > condition, Label *true_label, Label *false_label, BranchHint branch_hint=BranchHint::kNone)
void StoreNoWriteBarrier(MachineRepresentation rep, Node *base, Node *value)
static bool ClobbersAccumulator(Bytecode bytecode)
static ImplicitRegisterUse GetImplicitRegisterUse(Bytecode bytecode)
static constexpr bool Returns(Bytecode bytecode)
static OperandSize GetOperandSize(Bytecode bytecode, int i, OperandScale operand_scale)
static bool WritesAccumulator(Bytecode bytecode)
static bool MakesCallAlongCriticalPath(Bytecode bytecode)
static constexpr bool IsCallRuntime(Bytecode bytecode)
static int GetOperandOffset(Bytecode bytecode, int i, OperandScale operand_scale)
static bool ReadsAccumulator(Bytecode bytecode)
static bool IsRegisterOperandType(OperandType operand_type)
static constexpr bool IsCallOrConstruct(Bytecode bytecode)
static OperandType GetOperandType(Bytecode bytecode, int i)
static int Size(Bytecode bytecode, OperandScale operand_scale)
static bool IsRegisterListOperandType(OperandType operand_type)
static int NumberOfOperands(Bytecode bytecode)
static bool IsUnsignedOperandType(OperandType operand_type)
static constexpr bool IsShortStar(Bytecode bytecode)
static ConvertReceiverMode GetReceiverMode(Bytecode bytecode)
static bool IsStarLookahead(Bytecode bytecode, OperandScale operand_scale)
TNode< Word32T > reg_count() const
TNode< IntPtrT > base_reg_location() const
void ClobberAccumulator(TNode< Object > clobber_value)
TNode< JSFunction > LoadFunctionClosure()
TNode< RawPtrT > GetInterpretedFramePointer()
TNode< Int8T > LoadOsrState(TNode< FeedbackVector > feedback_vector)
TNode< IntPtrT > LoadAndUntagRegister(Register reg)
void JumpToOffset(TNode< IntPtrT > new_bytecode_offset)
void JumpIfTaggedEqual(TNode< Object > lhs, TNode< Object > rhs, TNode< IntPtrT > jump_offset)
TNode< Uint32T > BytecodeOperandIntrinsicId(int operand_index)
TNode< WordT > LoadBytecode(TNode< IntPtrT > bytecode_offset)
void CallJSWithSpreadAndDispatch(TNode< JSAny > function, TNode< Context > context, const RegListNodePair &args, TNode< UintPtrT > slot_id)
TNode< Uint32T > BytecodeUnsignedOperand(int operand_index, OperandSize operand_size)
TNode< IntPtrT > RegisterFrameOffset(TNode< IntPtrT > index)
TNode< UintPtrT > BytecodeOperandIdx(int operand_index)
TNode< Object > LoadConstantPoolEntry(TNode< WordT > index)
TNode< Object > LoadRegisterAtOperandIndex(int operand_index)
TNode< IntPtrT > BytecodeOffset()
std::pair< TNode< Object >, TNode< Object > > LoadRegisterPairAtOperandIndex(int operand_index)
void SaveBytecodeOffset()
TNode< Int32T > BytecodeOperandSignedQuad(int operand_index)
void StoreRegisterAtOperandIndex(TNode< Object > value, int operand_index)
TNode< Object > LoadRegisterFromRegisterList(const RegListNodePair ®_list, int index)
TNode< UintPtrT > BytecodeOperandConstantPoolIdx(int operand_index)
TNode< IntPtrT > BytecodeOperandImmIntPtr(int operand_index)
CodeStubAssembler::TVariable< Object > accumulator_
TNode< Uint32T > BytecodeOperandIdxInt32(int operand_index)
TNode< Uint32T > BytecodeOperandFlag8(int operand_index)
ImplicitRegisterUse implicit_register_use_
void CallJSAndDispatch(TNode< JSAny > function, TNode< Context > context, const RegListNodePair &args, ConvertReceiverMode receiver_mode)
TNode< IntPtrT > Advance()
TNode< IntPtrT > NextRegister(TNode< IntPtrT > reg_index)
void JumpConditionalByConstantOperand(TNode< BoolT > condition, int operand_index)
void JumpIfTaggedEqualConstant(TNode< Object > lhs, TNode< Object > rhs, int operand_index)
TNode< Smi > BytecodeOperandIdxSmi(int operand_index)
TNode< Uint8T > BytecodeOperandUnsignedByte(int operand_index)
OperandScale operand_scale() const
void StoreRegisterForShortStar(TNode< Object > value, TNode< WordT > opcode)
TNode< Object > ConstructForwardAllArgs(TNode< JSAny > target, TNode< Context > context, TNode< JSAny > new_target, TNode< TaggedIndex > slot_id)
void DecreaseInterruptBudget(TNode< Int32T > weight, StackCheckBehavior stack_check_behavior)
TNode< Context > GetContextAtDepth(TNode< Context > context, TNode< Uint32T > depth)
void TraceBytecode(Runtime::FunctionId function_id)
TNode< UintPtrT > BytecodeOperandUImmWord(int operand_index)
TNode< IntPtrT > ReloadBytecodeOffset()
void SetContext(TNode< Context > value)
TNode< T > CallRuntimeN(TNode< Uint32T > function_id, TNode< Context > context, const RegListNodePair &args, int return_count)
void JumpIfTaggedNotEqualConstant(TNode< Object > lhs, TNode< Object > rhs, int operand_index)
void StoreRegisterPairAtOperandIndex(TNode< Object > value1, TNode< Object > value2, int operand_index)
void AbortIfRegisterCountInvalid(TNode< FixedArray > parameters_and_registers, TNode< IntPtrT > parameter_count, TNode< UintPtrT > register_count)
TNode< IntPtrT > LoadAndUntagConstantPoolEntryAtOperandIndex(int operand_index)
RegListNodePair GetRegisterListAtOperandIndex(int operand_index)
void Abort(AbortReason abort_reason)
bool bytecode_array_valid_
TNode< Smi > BytecodeOperandImmSmi(int operand_index)
void AbortIfWordNotEqual(TNode< WordT > lhs, TNode< WordT > rhs, AbortReason abort_reason)
TNode< Union< FeedbackVector, Undefined > > LoadFeedbackVector()
TNode< UintPtrT > BytecodeOperandNativeContextIndex(int operand_index)
void DispatchToBytecode(TNode< WordT > target_bytecode, TNode< IntPtrT > new_bytecode_offset)
TNode< FixedArray > ExportParametersAndRegisterFile(TNode< FixedArray > array, const RegListNodePair ®isters)
void DispatchToBytecodeWithOptionalStarLookahead(TNode< WordT > target_bytecode)
static constexpr int kFirstBytecodeOffset
TNode< Int32T > BytecodeOperandImm(int operand_index)
void SetAccumulator(TNode< Object > value)
TNode< Object > LoadConstantPoolEntryAtOperandIndex(int operand_index)
void ToNumberOrNumeric(Object::Conversion mode)
void StarDispatchLookahead(TNode< WordT > target_bytecode)
TNode< Context > GetContext()
static bool TargetSupportsUnalignedAccess()
void UpdateInterruptBudgetOnReturn()
void JumpBackward(TNode< IntPtrT > jump_offset)
void DispatchWide(OperandScale operand_scale)
TNode< Int32T > BytecodeSignedOperand(int operand_index, OperandSize operand_size)
TNode< ExternalReference > DispatchTablePointer()
TNode< IntPtrT > LoadParameterCountWithoutReceiver()
TNode< Uint32T > BytecodeOperandUImm(int operand_index)
void InlineShortStar(TNode< WordT > target_bytecode)
TNode< IntPtrT > RegisterLocation(Register reg)
TNode< BytecodeArray > BytecodeArrayTaggedPointer()
TNode< Uint32T > BytecodeOperandRuntimeId(int operand_index)
TNode< TaggedIndex > BytecodeOperandIdxTaggedIndex(int operand_index)
TNode< Smi > BytecodeOperandUImmSmi(int operand_index)
TNode< Int32T > UpdateInterruptBudget(TNode< Int32T > weight)
void JumpConditional(TNode< BoolT > condition, TNode< IntPtrT > jump_offset)
void StoreRegisterTripleAtOperandIndex(TNode< Object > value1, TNode< Object > value2, TNode< Object > value3, int operand_index)
TNode< Word32T > BytecodeOperandReadUnaligned(int relative_offset, MachineType result_type)
void JumpConditionalByImmediateOperand(TNode< BoolT > condition, int operand_index)
TNode< IntPtrT > RegisterLocationInRegisterList(const RegListNodePair ®_list, int index)
TNode< Int8T > BytecodeOperandSignedByte(int operand_index)
int CurrentBytecodeSize() const
TNode< Uint16T > BytecodeOperandUnsignedShort(int operand_index)
InterpreterAssembler(compiler::CodeAssemblerState *state, Bytecode bytecode, OperandScale operand_scale)
TNode< Uint32T > BytecodeOperandFlag16(int operand_index)
CodeStubAssembler::TVariable< IntPtrT > bytecode_offset_
TNode< Uint32T > BytecodeOperandUnsignedQuad(int operand_index)
TNode< Object > Construct(TNode< JSAny > target, TNode< Context > context, TNode< JSAny > new_target, const RegListNodePair &args, TNode< UintPtrT > slot_id, TNode< Union< FeedbackVector, Undefined > > maybe_feedback_vector)
void StoreRegister(TNode< Object > value, Register reg)
TNode< FixedArray > ImportRegisterFile(TNode< FixedArray > array, const RegListNodePair ®isters)
TNode< Object > GetAccumulator()
TNode< Object > LoadRegister(Register reg)
CodeStubAssembler::TVariable< RawPtrT > interpreted_frame_pointer_
void TraceBytecodeDispatch(TNode< WordT > target_bytecode)
CodeStubAssembler::TVariable< ExternalReference > dispatch_table_
void OnStackReplacement(TNode< Context > context, TNode< FeedbackVector > feedback_vector, TNode< IntPtrT > relative_jump, TNode< Int32T > loop_depth, TNode< IntPtrT > feedback_slot, TNode< Int8T > osr_state, OnStackReplacementParams params)
TNode< IntPtrT > BytecodeOperandReg(int operand_index)
TNode< IntPtrT > OperandOffset(int operand_index)
void JumpIfTaggedNotEqual(TNode< Object > lhs, TNode< Object > rhs, TNode< IntPtrT > jump_offset)
TNode< Int16T > BytecodeOperandSignedShort(int operand_index)
TNode< Object > ConstructWithSpread(TNode< JSAny > target, TNode< Context > context, TNode< JSAny > new_target, const RegListNodePair &args, TNode< UintPtrT > slot_id)
void Jump(TNode< IntPtrT > jump_offset)
void DispatchToBytecodeHandlerEntry(TNode< RawPtrT > handler_entry, TNode< IntPtrT > bytecode_offset)
TNode< IntPtrT > LoadAndUntagConstantPoolEntry(TNode< WordT > index)
TNode< Uint32T > BytecodeOperandCount(int operand_index)
CodeStubAssembler::TVariable< BytecodeArray > bytecode_array_
OperandScale operand_scale_
TNode< Object > GetAccumulatorUnchecked()
static constexpr Register bytecode_array()
static constexpr Register FromParameterIndex(int index)
static constexpr Register feedback_vector()
constexpr int32_t ToOperand() const
static constexpr Register current_context()
static constexpr Register function_closure()
static constexpr Register bytecode_offset()
base::Vector< const DirectHandle< Object > > args
DirectHandle< Object > new_target
base::Vector< const RegExpInstruction > bytecode_
#define V8_IGNITION_DISPATCH_COUNTING_BOOL
ZoneVector< RpoNumber > & result
RegListBase< RegisterT > registers
constexpr int kBitsPerByte
@ UNSAFE_SKIP_WRITE_BARRIER
constexpr int kJSArgcReceiverSlots
constexpr int kSystemPointerSize
V8_EXPORT_PRIVATE FlagValues v8_flags
constexpr bool SmiValuesAre32Bits()
#define DCHECK_LE(v1, v2)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
#define OFFSET_OF_DATA_START(Type)