blob: 609dfec7b63cde7ec223121e37d64ffbfb827930 [file] [log] [blame]
Ben Murdoch3ef787d2012-04-12 10:51:47 +01001// Copyright 2012 the V8 project authors. All rights reserved.
Ben Murdochb8a8cc12014-11-26 15:28:44 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Steve Blocka7e24c12009-10-30 11:49:00 +00004
5#ifndef V8_IA32_FRAMES_IA32_H_
6#define V8_IA32_FRAMES_IA32_H_
7
8namespace v8 {
9namespace internal {
10
11
12// Register lists
13// Note that the bit values must match those used in actual instruction encoding
Ben Murdoch3ef787d2012-04-12 10:51:47 +010014const int kNumRegs = 8;
Steve Blocka7e24c12009-10-30 11:49:00 +000015
16
17// Caller-saved registers
Ben Murdoch3ef787d2012-04-12 10:51:47 +010018const RegList kJSCallerSaved =
Steve Blocka7e24c12009-10-30 11:49:00 +000019 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
Ben Murdoch3ef787d2012-04-12 10:51:47 +010025const int kNumJSCallerSaved = 5;
Steve Blocka7e24c12009-10-30 11:49:00 +000026
Ben Murdochb0fe1622011-05-05 13:52:32 +010027
28// Number of registers for which space is reserved in safepoints.
Ben Murdoch3ef787d2012-04-12 10:51:47 +010029const int kNumSafepointRegisters = 8;
Ben Murdochb0fe1622011-05-05 13:52:32 +010030
Ben Murdochb8a8cc12014-11-26 15:28:44 +000031const int kNoAlignmentPadding = 0;
32const int kAlignmentPaddingPushed = 2;
33const int kAlignmentZapValue = 0x12345678; // Not heap object tagged.
34
Steve Blocka7e24c12009-10-30 11:49:00 +000035// ----------------------------------------------------
36
37
Steve Blocka7e24c12009-10-30 11:49:00 +000038class EntryFrameConstants : public AllStatic {
39 public:
40 static const int kCallerFPOffset = -6 * kPointerSize;
41
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000042 static const int kNewTargetArgOffset = +2 * kPointerSize;
Steve Blocka7e24c12009-10-30 11:49:00 +000043 static const int kFunctionArgOffset = +3 * kPointerSize;
44 static const int kReceiverArgOffset = +4 * kPointerSize;
45 static const int kArgcOffset = +5 * kPointerSize;
46 static const int kArgvOffset = +6 * kPointerSize;
47};
48
49
50class ExitFrameConstants : public AllStatic {
51 public:
Ben Murdochb8a8cc12014-11-26 15:28:44 +000052 static const int kFrameSize = 2 * kPointerSize;
53
Ben Murdoch257744e2011-11-30 15:57:28 +000054 static const int kCodeOffset = -2 * kPointerSize;
55 static const int kSPOffset = -1 * kPointerSize;
Steve Blocka7e24c12009-10-30 11:49:00 +000056
57 static const int kCallerFPOffset = 0 * kPointerSize;
58 static const int kCallerPCOffset = +1 * kPointerSize;
59
60 // FP-relative displacement of the caller's SP. It points just
61 // below the saved PC.
62 static const int kCallerSPDisplacement = +2 * kPointerSize;
Steve Blocka7e24c12009-10-30 11:49:00 +000063
Ben Murdochb8a8cc12014-11-26 15:28:44 +000064 static const int kConstantPoolOffset = 0; // Not used
Steve Blocka7e24c12009-10-30 11:49:00 +000065};
66
67
68class JavaScriptFrameConstants : public AllStatic {
69 public:
70 // FP-relative.
71 static const int kLocal0Offset = StandardFrameConstants::kExpressionsOffset;
Ben Murdoch8b112d22011-06-08 16:22:53 +010072 static const int kLastParameterOffset = +2 * kPointerSize;
Steve Blocka7e24c12009-10-30 11:49:00 +000073 static const int kFunctionOffset = StandardFrameConstants::kMarkerOffset;
74
75 // Caller SP-relative.
76 static const int kParam0Offset = -2 * kPointerSize;
77 static const int kReceiverOffset = -1 * kPointerSize;
Ben Murdochb8a8cc12014-11-26 15:28:44 +000078
79 static const int kDynamicAlignmentStateOffset = kLocal0Offset;
Steve Blocka7e24c12009-10-30 11:49:00 +000080};
81
82
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000083} // namespace internal
84} // namespace v8
Steve Blocka7e24c12009-10-30 11:49:00 +000085
86#endif // V8_IA32_FRAMES_IA32_H_