5 #ifndef V8_FRAME_CONSTANTS_H_ 6 #define V8_FRAME_CONSTANTS_H_ 9 #include "src/globals.h" 53 static constexpr
int kCallerFPOffset = 0 * kPointerSize;
54 static constexpr
int kCallerPCOffset = kCallerFPOffset + 1 * kFPOnStackSize;
55 static constexpr
int kCallerSPOffset = kCallerPCOffset + 1 * kPCOnStackSize;
61 static constexpr
int kFixedFrameSizeAboveFp = kPCOnStackSize + kFPOnStackSize;
62 static constexpr
int kFixedSlotCountAboveFp =
63 kFixedFrameSizeAboveFp / kPointerSize;
64 static constexpr
int kCPSlotSize =
65 FLAG_enable_embedded_constant_pool ? kPointerSize : 0;
66 static constexpr
int kCPSlotCount = kCPSlotSize / kPointerSize;
67 static constexpr
int kConstantPoolOffset =
68 kCPSlotSize ? -1 * kPointerSize : 0;
69 static constexpr
int kContextOrFrameTypeSize = kPointerSize;
70 static constexpr
int kContextOrFrameTypeOffset =
71 -(kCPSlotSize + kContextOrFrameTypeSize);
107 static constexpr
int kFixedFrameSizeFromFp = 2 * kPointerSize + kCPSlotSize;
108 static constexpr
int kFixedFrameSize =
109 kFixedFrameSizeAboveFp + kFixedFrameSizeFromFp;
110 static constexpr
int kFixedSlotCountFromFp =
111 kFixedFrameSizeFromFp / kPointerSize;
112 static constexpr
int kFixedSlotCount = kFixedFrameSize / kPointerSize;
113 static constexpr
int kContextOffset = kContextOrFrameTypeOffset;
114 static constexpr
int kFunctionOffset = -2 * kPointerSize - kCPSlotSize;
115 static constexpr
int kExpressionsOffset = -3 * kPointerSize - kCPSlotSize;
116 static constexpr
int kLastObjectOffset = kContextOffset;
155 static constexpr
int kArgCSize = kPointerSize;
156 static constexpr
int kArgCOffset = -3 * kPointerSize - kCPSlotSize;
157 static constexpr
int kFixedFrameSize = kFixedFrameSizeAboveFp - kArgCOffset;
158 static constexpr
int kFixedSlotCount = kFixedFrameSize / kPointerSize;
194 static constexpr
int kFrameTypeSize = kContextOrFrameTypeSize;
195 static constexpr
int kFrameTypeOffset = kContextOrFrameTypeOffset;
196 static constexpr
int kFixedFrameSizeFromFp = kCPSlotSize + kFrameTypeSize;
197 static constexpr
int kFixedSlotCountFromFp =
198 kFixedFrameSizeFromFp / kPointerSize;
199 static constexpr
int kFixedFrameSize =
200 StandardFrameConstants::kFixedFrameSizeAboveFp + kFixedFrameSizeFromFp;
201 static constexpr
int kFixedSlotCount = kFixedFrameSize / kPointerSize;
202 static constexpr
int kFirstPushedFrameValueOffset =
203 -StandardFrameConstants::kCPSlotSize - kFrameTypeSize - kPointerSize;
206 #define TYPED_FRAME_PUSHED_VALUE_OFFSET(x) \ 207 (TypedFrameConstants::kFirstPushedFrameValueOffset - (x)*kPointerSize) 208 #define TYPED_FRAME_SIZE(count) \ 209 (TypedFrameConstants::kFixedFrameSize + (count)*kPointerSize) 210 #define TYPED_FRAME_SIZE_FROM_SP(count) \ 211 (TypedFrameConstants::kFixedFrameSizeFromFp + (count)*kPointerSize) 212 #define DEFINE_TYPED_FRAME_SIZES(count) \ 213 static constexpr int kFixedFrameSize = TYPED_FRAME_SIZE(count); \ 214 static constexpr int kFixedSlotCount = kFixedFrameSize / kPointerSize; \ 215 static constexpr int kFixedFrameSizeFromFp = \ 216 TYPED_FRAME_SIZE_FROM_SP(count); \ 217 static constexpr int kFixedSlotCountFromFp = \ 218 kFixedFrameSizeFromFp / kPointerSize 223 static constexpr
int kFunctionOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(0);
224 static constexpr
int kLengthOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(1);
225 static constexpr
int kPaddingOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(2);
226 DEFINE_TYPED_FRAME_SIZES(3);
232 static constexpr
int kFunctionOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(0);
233 static constexpr
int kLengthOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(1);
234 DEFINE_TYPED_FRAME_SIZES(2);
240 static constexpr
int kContextOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(0);
241 static constexpr
int kLengthOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(1);
242 static constexpr
int kConstructorOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(2);
243 static constexpr
int kPaddingOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(3);
244 static constexpr
int kNewTargetOrImplicitReceiverOffset =
245 TYPED_FRAME_PUSHED_VALUE_OFFSET(4);
246 DEFINE_TYPED_FRAME_SIZES(5);
252 static constexpr
int kWasmInstanceOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(0);
253 DEFINE_TYPED_FRAME_SIZES(1);
259 static constexpr
int kFunctionOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(0);
260 static constexpr
int kFrameSPtoFPDeltaAtDeoptimize =
261 TYPED_FRAME_PUSHED_VALUE_OFFSET(1);
262 static constexpr
int kBuiltinContextOffset =
263 TYPED_FRAME_PUSHED_VALUE_OFFSET(2);
264 static constexpr
int kBuiltinOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(3);
268 static constexpr
int kArgCOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(4);
269 DEFINE_TYPED_FRAME_SIZES(4);
275 static int PaddingSlotCount(
int register_count);
281 static constexpr
int kNewTargetOffset = kCallerPCOffset + 1 * kPointerSize;
282 static constexpr
int kTargetOffset = kNewTargetOffset + 1 * kPointerSize;
283 static constexpr
int kArgcOffset = kTargetOffset + 1 * kPointerSize;
284 static constexpr
int kPaddingOffset = kArgcOffset + 1 * kPointerSize;
285 static constexpr
int kFirstArgumentOffset = kPaddingOffset + 1 * kPointerSize;
286 static constexpr
int kNumExtraArgsWithReceiver = 5;
292 static constexpr
int kFixedFrameSize =
293 StandardFrameConstants::kFixedFrameSize + 2 * kPointerSize;
294 static constexpr
int kFixedFrameSizeFromFp =
295 StandardFrameConstants::kFixedFrameSizeFromFp + 2 * kPointerSize;
298 static constexpr
int kLastParamFromFp =
299 StandardFrameConstants::kCallerSPOffset;
300 static constexpr
int kCallerPCOffsetFromFp =
301 StandardFrameConstants::kCallerPCOffset;
302 static constexpr
int kBytecodeArrayFromFp =
303 -StandardFrameConstants::kFixedFrameSizeFromFp - 1 * kPointerSize;
304 static constexpr
int kBytecodeOffsetFromFp =
305 -StandardFrameConstants::kFixedFrameSizeFromFp - 2 * kPointerSize;
306 static constexpr
int kRegisterFileFromFp =
307 -StandardFrameConstants::kFixedFrameSizeFromFp - 3 * kPointerSize;
309 static constexpr
int kExpressionsOffset = kRegisterFileFromFp;
312 static constexpr
int kExtraSlotCount =
313 InterpreterFrameConstants::kFixedFrameSize / kPointerSize -
314 StandardFrameConstants::kFixedFrameSize / kPointerSize;
317 static constexpr
int kBytecodeArrayExpressionIndex = -2;
318 static constexpr
int kBytecodeOffsetExpressionIndex = -1;
319 static constexpr
int kRegisterFileExpressionIndex = 0;
324 static int RegisterStackSlotCount(
int register_count);
327 inline static int FPOffsetToFrameSlot(
int frame_offset) {
328 return StandardFrameConstants::kFixedSlotCountAboveFp - 1 -
329 frame_offset / kPointerSize;
332 inline static int FrameSlotToFPOffset(
int slot) {
333 return (StandardFrameConstants::kFixedSlotCountAboveFp - 1 - slot) *
340 #if V8_TARGET_ARCH_IA32 341 #include "src/ia32/frame-constants-ia32.h" 342 #elif V8_TARGET_ARCH_X64 343 #include "src/x64/frame-constants-x64.h" 344 #elif V8_TARGET_ARCH_ARM64 345 #include "src/arm64/frame-constants-arm64.h" 346 #elif V8_TARGET_ARCH_ARM 347 #include "src/arm/frame-constants-arm.h" 348 #elif V8_TARGET_ARCH_PPC 349 #include "src/ppc/frame-constants-ppc.h" 350 #elif V8_TARGET_ARCH_MIPS 351 #include "src/mips/frame-constants-mips.h" 352 #elif V8_TARGET_ARCH_MIPS64 353 #include "src/mips64/frame-constants-mips64.h" 354 #elif V8_TARGET_ARCH_S390 355 #include "src/s390/frame-constants-s390.h" 357 #error Unsupported target architecture. 360 #endif // V8_FRAME_CONSTANTS_H_