5#ifndef V8_EXECUTION_FRAME_CONSTANTS_H_
6#define V8_EXECUTION_FRAME_CONSTANTS_H_
173#define FRAME_PUSHED_VALUE_OFFSET(parent, x) \
174 (parent::kFirstPushedFrameValueOffset - (x)*kSystemPointerSize)
175#define FRAME_SIZE(parent, count) \
176 (parent::kFixedFrameSize + (count)*kSystemPointerSize)
177#define FRAME_SIZE_FROM_FP(parent, count) \
178 (parent::kFixedFrameSizeFromFp + (count)*kSystemPointerSize)
179#define DEFINE_FRAME_SIZES(parent, count) \
180 static constexpr int kFixedFrameSize = FRAME_SIZE(parent, count); \
181 static constexpr int kFixedSlotCount = kFixedFrameSize / kSystemPointerSize; \
182 static constexpr int kFixedFrameSizeFromFp = \
183 FRAME_SIZE_FROM_FP(parent, count); \
184 static constexpr int kFixedSlotCountFromFp = \
185 kFixedFrameSizeFromFp / kSystemPointerSize; \
186 static constexpr int kFirstPushedFrameValueOffset = \
187 parent::kFirstPushedFrameValueOffset - (count) * kSystemPointerSize; \
189 template <typename TParentFrameConstants> \
190 static constexpr int getExtraSlotsCountFrom() { \
191 return kFixedSlotCount - TParentFrameConstants::kFixedSlotCount; \
196 static constexpr int kExtraSlotCount = \
197 kFixedSlotCount - parent::kFixedSlotCount
199#define STANDARD_FRAME_EXTRA_PUSHED_VALUE_OFFSET(x) \
200 FRAME_PUSHED_VALUE_OFFSET(StandardFrameConstants, x)
201#define DEFINE_STANDARD_FRAME_SIZES(count) \
202 DEFINE_FRAME_SIZES(StandardFrameConstants, count)
204#define TYPED_FRAME_PUSHED_VALUE_OFFSET(x) \
205 FRAME_PUSHED_VALUE_OFFSET(TypedFrameConstants, x)
206#define DEFINE_TYPED_FRAME_SIZES(count) \
207 DEFINE_FRAME_SIZES(TypedFrameConstants, count)
239#if V8_ENABLE_WEBASSEMBLY
247class WasmFrameConstants :
public TypedFrameConstants {
250 static constexpr int kWasmInstanceDataOffset =
273 static constexpr int kProtectedInstructionReturnAddressOffset = 1;
276#if V8_ENABLE_DRUMBRAKE
277class WasmInterpreterFrameConstants :
public TypedFrameConstants {
280 static constexpr int kWasmInstanceObjectOffset =
286class WasmToJSInterpreterFrameConstants :
public TypedFrameConstants {
290 static constexpr int kGCScanSlotLimitOffset =
300class WasmInterpreterCWasmEntryConstants :
public TypedFrameConstants {
309class WasmExitFrameConstants :
public WasmFrameConstants {
317class JSToWasmWrapperFrameConstants :
public TypedFrameConstants {
325 static constexpr int kWrapperBufferOffset =
330 static constexpr size_t kWrapperBufferReturnCount = 0;
331 static constexpr size_t kWrapperBufferRefReturnCount = 4;
332 static constexpr size_t kWrapperBufferSigRepresentationArray = 8;
333 static constexpr size_t kWrapperBufferStackReturnBufferSize = 16;
334 static constexpr size_t kWrapperBufferCallTarget = 24;
335 static constexpr size_t kWrapperBufferParamStart = 32;
336 static constexpr size_t kWrapperBufferParamEnd = 40;
340 static constexpr size_t kWrapperBufferStackReturnBufferStart = 16;
341 static constexpr size_t kWrapperBufferFPReturnRegister1 = 24;
342 static constexpr size_t kWrapperBufferFPReturnRegister2 = 32;
343 static constexpr size_t kWrapperBufferGPReturnRegister1 = 40;
344 static constexpr size_t kWrapperBufferGPReturnRegister2 =
348 static constexpr int kWrapperBufferSize =
356class StackSwitchFrameConstants :
public JSToWasmWrapperFrameConstants {
378 static constexpr int kGCScanSlotCountOffset =
385 static constexpr int kLastSpillOffset = kResultArrayOffset;
386 static constexpr int kNumSpillSlots = 4;
389class WasmToJSWrapperConstants {
395#if V8_ENABLE_DRUMBRAKE
396class BuiltinWasmInterpreterWrapperConstants :
public TypedFrameConstants {
400 static constexpr int kGCScanSlotCountOffset =
411 static constexpr int kValueTypesArrayStartOffset =
414 static constexpr int kArgRetsAddressOffset =
417 static constexpr int kArgRetsIsArgsOffset =
422 static constexpr int kSignatureDataOffset =
461#define EXIT_FRAME_PUSHED_VALUE_OFFSET(x) \
462 FRAME_PUSHED_VALUE_OFFSET(ExitFrameConstants, x)
463#define DEFINE_EXIT_FRAME_SIZES(x) DEFINE_FRAME_SIZES(ExitFrameConstants, x);
667 static constexpr int kPropertyCallbackInfoPropertyKeyIndex = 0;
668 static constexpr int kPropertyCallbackInfoHolderIndex = 2;
669 static constexpr int kPropertyCallbackInfoReturnValueIndex = 5;
670 static constexpr int kPropertyCallbackInfoReceiverIndex = 7;
671 static constexpr int kPropertyCallbackInfoArgsLength = 8;
677 static constexpr int kPropertyNameOffset =
686 static constexpr int kHolderOffset =
690 static constexpr int kPropertyCallbackInfoOffset = kArgsArrayOffset;
738 static constexpr int kBytecodeArrayFromFp =
740 static constexpr int kBytecodeOffsetOrFeedbackCellFromFp =
742 static constexpr int kFeedbackVectorFromFp =
746 static constexpr int kFirstParamFromFp =
747 StandardFrameConstants::kCallerSPOffset;
748 static constexpr int kRegisterFileFromFp =
750 static constexpr int kExpressionsOffset = kRegisterFileFromFp;
753 static constexpr int kBytecodeArrayExpressionIndex = -3;
754 static constexpr int kBytecodeOffsetOrFeedbackCellExpressionIndex = -2;
755 static constexpr int kFeedbackVectorExpressionIndex = -1;
756 static constexpr int kRegisterFileExpressionIndex = 0;
761 static int RegisterStackSlotCount(
int register_count);
769 static constexpr int kBytecodeOffsetExpressionIndex =
770 kBytecodeOffsetOrFeedbackCellExpressionIndex;
772 static constexpr int kBytecodeOffsetFromFp =
773 kBytecodeOffsetOrFeedbackCellFromFp;
781 static constexpr int kFeedbackCellExpressionIndex =
782 kBytecodeOffsetOrFeedbackCellExpressionIndex;
784 static constexpr int kFeedbackCellFromFp =
785 kBytecodeOffsetOrFeedbackCellFromFp;
801#if V8_TARGET_ARCH_IA32
803#elif V8_TARGET_ARCH_X64
805#elif V8_TARGET_ARCH_ARM64
807#elif V8_TARGET_ARCH_ARM
809#elif V8_TARGET_ARCH_PPC64
811#elif V8_TARGET_ARCH_MIPS64
813#elif V8_TARGET_ARCH_LOONG64
815#elif V8_TARGET_ARCH_S390X
817#elif V8_TARGET_ARCH_RISCV32 || V8_TARGET_ARCH_RISCV64
820#error Unsupported target architecture.
static constexpr int kReceiverOffset
static constexpr int kFCIImplicitArgsOffset
static constexpr int kFunctionCallbackInfoNewTargetIndex
static constexpr int kFirstArgumentOffset
static constexpr int kContextOffset
static constexpr int kTargetOffset
static constexpr int kFCIArgcOffset
static constexpr int kReturnValueOffset
static constexpr int kFunctionCallbackInfoContextIndex
static constexpr int kFCIValuesOffset
static constexpr int kFunctionCallbackInfoReturnValueIndex
static constexpr int kNewTargetOffset
static constexpr int kFunctionCallbackInfoTargetIndex
static constexpr int kFunctionCallbackInfoOffset
static constexpr int kImplicitArgsArrayOffset
static constexpr int kFunctionCallbackInfoArgsLength
static int PaddingSlotCount(int register_count)
static constexpr int kBuiltinIndexOffset
static constexpr int kFunctionOffset
static constexpr int kBuiltinContextOffset
static constexpr int kArgCOffset
static constexpr int kFrameSPtoFPDeltaAtDeoptimize
DEFINE_TYPED_FRAME_SIZES(4)
static constexpr int kFirstArgumentOffset
static constexpr int kNewTargetOffset
static constexpr int kReceiverOffset
static constexpr int kNewTargetIndex
static constexpr int kTargetOffset
static constexpr int kArgcIndex
static constexpr int kNumExtraArgs
static constexpr int kArgumentsArrayOffset
static constexpr int kTargetIndex
static constexpr int kNumExtraArgsWithReceiver
static constexpr int kArgcOffset
static constexpr int kPaddingIndex
static constexpr int kFunctionOffset
DEFINE_TYPED_FRAME_SIZES(2)
static constexpr int kLengthOffset
static constexpr int kContextOrFrameTypeSize
static constexpr int kContextOrFrameTypeOffset
static constexpr int kConstantPoolOffset
static constexpr int kCallerSPOffset
static constexpr int kCPSlotSize
static constexpr int kCallerFPOffset
static constexpr int kCallerPCOffset
static constexpr int kFixedSlotCountAboveFp
static constexpr int kCPSlotCount
static constexpr int kFixedFrameSizeAboveFp
static constexpr int kPaddingOffset
static constexpr int kNewTargetOrImplicitReceiverOffset
static constexpr int kConstructorOffset
static constexpr int kLengthOffset
static constexpr int kLastObjectOffset
static constexpr int kContextOffset
DEFINE_TYPED_FRAME_SIZES(5)
static constexpr int kSPOffset
static constexpr int kCallerSPDisplacement
DEFINE_TYPED_FRAME_SIZES(1)
static constexpr int kLastExitFrameField
DEFINE_TYPED_FRAME_SIZES(2)
static constexpr int kImplicitReceiverOffset
static constexpr int kContextOffset
static constexpr int kExpressionsOffset
static constexpr int kContextOffset
static constexpr int kFixedFrameSizeFromFp
static constexpr int kFixedSlotCount
static constexpr int kFirstPushedFrameValueOffset
static constexpr int kLastObjectOffset
static constexpr int kArgCOffset
static constexpr int kFunctionOffset
static constexpr int kFixedSlotCountFromFp
static constexpr int kFixedFrameSize
static constexpr int kFrameTypeSize
static constexpr int kFixedFrameSize
static constexpr int kFixedSlotCount
static constexpr int kFirstPushedFrameValueOffset
static constexpr int kFixedFrameSizeFromFp
static constexpr int kFrameTypeOffset
static constexpr int kFixedSlotCountFromFp
DEFINE_STANDARD_FRAME_SIZES(3)
#define V8_EMBEDDED_CONSTANT_POOL_BOOL
#define STANDARD_FRAME_EXTRA_PUSHED_VALUE_OFFSET(x)
#define TYPED_FRAME_PUSHED_VALUE_OFFSET(x)
#define DEFINE_EXIT_FRAME_SIZES(x)
#define EXIT_FRAME_PUSHED_VALUE_OFFSET(x)
#define DEFINE_TYPED_FRAME_SIZES(count)
static int FPOffsetToFrameSlot(int frame_offset)
constexpr int kPCOnStackSize
constexpr int kFPOnStackSize
constexpr int kSystemPointerSize
static int FrameSlotToFPOffset(int slot)