V8 Project
frames-ia32.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_IA32_FRAMES_IA32_H_
6 #define V8_IA32_FRAMES_IA32_H_
7 
8 namespace v8 {
9 namespace internal {
10 
11 
12 // Register lists
13 // Note that the bit values must match those used in actual instruction encoding
14 const int kNumRegs = 8;
15 
16 
17 // Caller-saved registers
18 const RegList kJSCallerSaved =
19  1 << 0 | // eax
20  1 << 1 | // ecx
21  1 << 2 | // edx
22  1 << 3 | // ebx - used as a caller-saved register in JavaScript code
23  1 << 7; // edi - callee function
24 
25 const int kNumJSCallerSaved = 5;
26 
27 
28 // Number of registers for which space is reserved in safepoints.
29 const int kNumSafepointRegisters = 8;
30 
31 const int kNoAlignmentPadding = 0;
33 const int kAlignmentZapValue = 0x12345678; // Not heap object tagged.
34 
35 // ----------------------------------------------------
36 
37 
38 class EntryFrameConstants : public AllStatic {
39  public:
40  static const int kCallerFPOffset = -6 * kPointerSize;
41 
42  static const int kFunctionArgOffset = +3 * kPointerSize;
43  static const int kReceiverArgOffset = +4 * kPointerSize;
44  static const int kArgcOffset = +5 * kPointerSize;
45  static const int kArgvOffset = +6 * kPointerSize;
46 };
47 
48 
49 class ExitFrameConstants : public AllStatic {
50  public:
51  static const int kFrameSize = 2 * kPointerSize;
52 
53  static const int kCodeOffset = -2 * kPointerSize;
54  static const int kSPOffset = -1 * kPointerSize;
55 
56  static const int kCallerFPOffset = 0 * kPointerSize;
57  static const int kCallerPCOffset = +1 * kPointerSize;
58 
59  // FP-relative displacement of the caller's SP. It points just
60  // below the saved PC.
61  static const int kCallerSPDisplacement = +2 * kPointerSize;
62 
63  static const int kConstantPoolOffset = 0; // Not used
64 };
65 
66 
67 class JavaScriptFrameConstants : public AllStatic {
68  public:
69  // FP-relative.
71  static const int kLastParameterOffset = +2 * kPointerSize;
73 
74  // Caller SP-relative.
75  static const int kParam0Offset = -2 * kPointerSize;
76  static const int kReceiverOffset = -1 * kPointerSize;
77 
79 };
80 
81 
83  public:
84  // FP-relative.
86 
87  static const int kFrameSize =
89 };
90 
91 
92 class ConstructFrameConstants : public AllStatic {
93  public:
94  // FP-relative.
95  static const int kImplicitReceiverOffset = -5 * kPointerSize;
96  static const int kConstructorOffset = kMinInt;
97  static const int kLengthOffset = -4 * kPointerSize;
99 
100  static const int kFrameSize =
102 };
103 
104 
105 class InternalFrameConstants : public AllStatic {
106  public:
107  // FP-relative.
109 };
110 
111 
114  return Memory::Object_at(fp() + offset);
115 }
116 
117 
118 inline void StackHandler::SetFp(Address slot, Address fp) {
119  Memory::Address_at(slot) = fp;
120 }
121 
122 
123 } } // namespace v8::internal
124 
125 #endif // V8_IA32_FRAMES_IA32_H_
static const int kImplicitReceiverOffset
Definition: frames-arm.h:132
static const int kCallerFPOffset
Definition: frames-arm.h:80
static const int kFunctionArgOffset
Definition: frames-ia32.h:42
static const int kReceiverArgOffset
Definition: frames-ia32.h:43
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
static const int kDynamicAlignmentStateOffset
Definition: frames-ia32.h:78
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 int kAlignmentPaddingPushed
Definition: frames-ia32.h:32
const RegList kJSCallerSaved
Definition: frames-arm.h:24
const int kNumSafepointRegisters
Definition: frames-arm.h:67
const Register fp
kSerializedDataOffset Object
Definition: objects-inl.h:5322
const int kMinInt
Definition: globals.h:110
uint32_t RegList
Definition: frames.h:18
byte * Address
Definition: globals.h:101
const int kAlignmentZapValue
Definition: frames-ia32.h:33
const int kNumJSCallerSaved
Definition: frames-arm.h:30
const int kNoAlignmentPadding
Definition: frames-ia32.h:31
const int kNumRegs
Definition: frames-arm.h:20
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20