Index: src/a64/frames-a64.h |
diff --git a/src/x64/frames-x64.h b/src/a64/frames-a64.h |
similarity index 63% |
copy from src/x64/frames-x64.h |
copy to src/a64/frames-a64.h |
index 6eb02a9179c64f3fca37202878b2765c3041071e..5ef768164579091ec1f36e974d4169a58c514932 100644 |
--- a/src/x64/frames-x64.h |
+++ b/src/a64/frames-a64.h |
@@ -1,4 +1,4 @@ |
-// Copyright 2012 the V8 project authors. All rights reserved. |
+// Copyright 2013 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -25,58 +25,50 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-#ifndef V8_X64_FRAMES_X64_H_ |
-#define V8_X64_FRAMES_X64_H_ |
+#include "a64/constants-a64.h" |
+#include "a64/assembler-a64.h" |
+ |
+#ifndef V8_A64_FRAMES_A64_H_ |
+#define V8_A64_FRAMES_A64_H_ |
namespace v8 { |
namespace internal { |
-const int kNumRegs = 16; |
-const RegList kJSCallerSaved = |
- 1 << 0 | // rax |
- 1 << 1 | // rcx |
- 1 << 2 | // rdx |
- 1 << 3 | // rbx - used as a caller-saved register in JavaScript code |
- 1 << 7; // rdi - callee function |
- |
-const int kNumJSCallerSaved = 5; |
- |
+const int kNumRegs = kNumberOfRegisters; |
+// Registers x0-x17 are caller-saved. |
+const int kNumJSCallerSaved = 18; |
+const RegList kJSCallerSaved = 0x3ffff; |
typedef Object* JSCallerSavedBuffer[kNumJSCallerSaved]; |
-// Number of registers for which space is reserved in safepoints. |
-const int kNumSafepointRegisters = 16; |
+// Number of registers for which space is reserved in safepoints. Must be a |
+// multiple of eight. |
+// TODO(all): Refine this number. |
+const int kNumSafepointRegisters = 32; |
-// ---------------------------------------------------- |
+// Define the list of registers actually saved at safepoints. |
+// Note that the number of saved registers may be smaller than the reserved |
+// space, i.e. kNumSafepointSavedRegisters <= kNumSafepointRegisters. |
+#define kSafepointSavedRegisters CPURegList::GetSafepointSavedRegisters().list() |
+#define kNumSafepointSavedRegisters \ |
+ CPURegList::GetSafepointSavedRegisters().Count(); |
class EntryFrameConstants : public AllStatic { |
public: |
-#ifdef _WIN64 |
- static const int kCalleeSaveXMMRegisters = 10; |
- static const int kXMMRegisterSize = 16; |
- static const int kXMMRegistersBlockSize = |
- kXMMRegisterSize * kCalleeSaveXMMRegisters; |
static const int kCallerFPOffset = |
- -10 * kPointerSize - kXMMRegistersBlockSize; |
-#else |
- static const int kCallerFPOffset = -8 * kPointerSize; |
-#endif |
- static const int kArgvOffset = 6 * kPointerSize; |
+ -(StandardFrameConstants::kFixedFrameSizeFromFp + kPointerSize); |
}; |
class ExitFrameConstants : public AllStatic { |
public: |
- static const int kFrameSize = 2 * kPointerSize; |
- |
- static const int kCodeOffset = -2 * kPointerSize; |
- static const int kSPOffset = -1 * kPointerSize; |
- |
- static const int kCallerFPOffset = +0 * kPointerSize; |
- static const int kCallerPCOffset = kFPOnStackSize; |
- |
- // FP-relative displacement of the caller's SP. It points just |
- // below the saved PC. |
- static const int kCallerSPDisplacement = kCallerPCOffset + kPCOnStackSize; |
+ static const int kFrameSize = 2 * kPointerSize; |
+ |
+ static const int kCallerSPDisplacement = 2 * kPointerSize; |
+ static const int kCallerPCOffset = 1 * kPointerSize; |
+ static const int kCallerFPOffset = 0 * kPointerSize; // <- fp |
+ static const int kSPOffset = -1 * kPointerSize; |
+ static const int kCodeOffset = -2 * kPointerSize; |
+ static const int kLastExitFrameField = kCodeOffset; |
}; |
@@ -84,12 +76,12 @@ class JavaScriptFrameConstants : public AllStatic { |
public: |
// FP-relative. |
static const int kLocal0Offset = StandardFrameConstants::kExpressionsOffset; |
- static const int kLastParameterOffset = kFPOnStackSize + kPCOnStackSize; |
- static const int kFunctionOffset = StandardFrameConstants::kMarkerOffset; |
- // Caller SP-relative. |
- static const int kParam0Offset = -2 * kPointerSize; |
- static const int kReceiverOffset = -1 * kPointerSize; |
+ // There are two words on the stack (saved fp and saved lr) between fp and |
+ // the arguments. |
+ static const int kLastParameterOffset = 2 * kPointerSize; |
+ |
+ static const int kFunctionOffset = StandardFrameConstants::kMarkerOffset; |
}; |
@@ -106,13 +98,13 @@ class ArgumentsAdaptorFrameConstants : public AllStatic { |
class ConstructFrameConstants : public AllStatic { |
public: |
// FP-relative. |
- static const int kImplicitReceiverOffset = -5 * kPointerSize; |
- static const int kConstructorOffset = kMinInt; |
- static const int kLengthOffset = -4 * kPointerSize; |
static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; |
+ static const int kLengthOffset = -4 * kPointerSize; |
+ static const int kConstructorOffset = -5 * kPointerSize; |
+ static const int kImplicitReceiverOffset = -6 * kPointerSize; |
static const int kFrameSize = |
- StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; |
+ StandardFrameConstants::kFixedFrameSize + 4 * kPointerSize; |
}; |
@@ -136,4 +128,4 @@ inline void StackHandler::SetFp(Address slot, Address fp) { |
} } // namespace v8::internal |
-#endif // V8_X64_FRAMES_X64_H_ |
+#endif // V8_A64_FRAMES_A64_H_ |