V8 Project
frames-x64.h
Go to the documentation of this file.
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_X64_FRAMES_X64_H_
6 #define V8_X64_FRAMES_X64_H_
7 
8 namespace v8 {
9 namespace internal {
10 
11 const int kNumRegs = 16;
12 const RegList kJSCallerSaved =
13  1 << 0 | // rax
14  1 << 1 | // rcx
15  1 << 2 | // rdx
16  1 << 3 | // rbx - used as a caller-saved register in JavaScript code
17  1 << 7; // rdi - callee function
18 
19 const int kNumJSCallerSaved = 5;
20 
21 // Number of registers for which space is reserved in safepoints.
22 const int kNumSafepointRegisters = 16;
23 
24 // ----------------------------------------------------
25 
26 class EntryFrameConstants : public AllStatic {
27  public:
28 #ifdef _WIN64
29  static const int kCalleeSaveXMMRegisters = 10;
30  static const int kXMMRegisterSize = 16;
31  static const int kXMMRegistersBlockSize =
32  kXMMRegisterSize * kCalleeSaveXMMRegisters;
33  static const int kCallerFPOffset =
34  -3 * kPointerSize + -7 * kRegisterSize - kXMMRegistersBlockSize;
35 #else
36  // We have 3 Push and 5 pushq in the JSEntryStub::GenerateBody.
37  static const int kCallerFPOffset = -3 * kPointerSize + -5 * kRegisterSize;
38 #endif
39  static const int kArgvOffset = 6 * kPointerSize;
40 };
41 
42 
43 class ExitFrameConstants : public AllStatic {
44  public:
45  static const int kFrameSize = 2 * kPointerSize;
46 
47  static const int kCodeOffset = -2 * kPointerSize;
48  static const int kSPOffset = -1 * kPointerSize;
49 
50  static const int kCallerFPOffset = +0 * kPointerSize;
51  static const int kCallerPCOffset = kFPOnStackSize;
52 
53  // FP-relative displacement of the caller's SP. It points just
54  // below the saved PC.
56 
57  static const int kConstantPoolOffset = 0; // Not used
58 };
59 
60 
61 class JavaScriptFrameConstants : public AllStatic {
62  public:
63  // FP-relative.
67 
68  // Caller SP-relative.
69  static const int kParam0Offset = -2 * kPointerSize;
70  static const int kReceiverOffset = -1 * kPointerSize;
71 };
72 
73 
74 class ArgumentsAdaptorFrameConstants : public AllStatic {
75  public:
76  // FP-relative.
78 
79  static const int kFrameSize =
81 };
82 
83 
84 class ConstructFrameConstants : public AllStatic {
85  public:
86  // FP-relative.
87  static const int kImplicitReceiverOffset = -5 * kPointerSize;
88  static const int kConstructorOffset = kMinInt;
89  static const int kLengthOffset = -4 * kPointerSize;
91 
92  static const int kFrameSize =
94 };
95 
96 
97 class InternalFrameConstants : public AllStatic {
98  public:
99  // FP-relative.
101 };
102 
103 
106  return Memory::Object_at(fp() + offset);
107 }
108 
109 
110 inline void StackHandler::SetFp(Address slot, Address fp) {
111  if (kFPOnStackSize == 2 * kPointerSize) {
112  // Zero out the high-32 bit of FP for x32 port.
113  Memory::Address_at(slot + kPointerSize) = 0;
114  }
115  Memory::Address_at(slot) = fp;
116 }
117 
118 
119 } } // namespace v8::internal
120 
121 #endif // V8_X64_FRAMES_X64_H_
static const int kImplicitReceiverOffset
Definition: frames-arm.h:132
static const int kCallerFPOffset
Definition: frames-arm.h:80
static const int kCallerSPDisplacement
Definition: frames-arm.h:102
static const int kCallerPCOffset
Definition: frames-arm.h:98
static const int kCodeOffset
Definition: frames-arm.h:92
static const int kConstantPoolOffset
Definition: frames-arm.h:90
static const int kCallerFPOffset
Definition: frames-arm.h:96
Object * function_slot_object() const
Definition: frames-arm.h:149
static Object *& Object_at(Address addr)
Definition: v8memory.h:60
static Address & Address_at(Address addr)
Definition: v8memory.h:56
static const int kFixedFrameSize
Definition: frames.h:158
static const int kExpressionsOffset
Definition: frames.h:160
static const int kMarkerOffset
Definition: frames.h:161
const int kPointerSize
Definition: globals.h:129
const RegList kJSCallerSaved
Definition: frames-arm.h:24
const int kPCOnStackSize
Definition: globals.h:135
const int kNumSafepointRegisters
Definition: frames-arm.h:67
const Register fp
kSerializedDataOffset Object
Definition: objects-inl.h:5322
const int kRegisterSize
Definition: globals.h:133
const int kMinInt
Definition: globals.h:110
uint32_t RegList
Definition: frames.h:18
byte * Address
Definition: globals.h:101
const int kFPOnStackSize
Definition: globals.h:136
const int kNumJSCallerSaved
Definition: frames-arm.h:30
const int kNumRegs
Definition: frames-arm.h:20
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20