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)