Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: src/x64/regexp-macro-assembler-x64.h

Issue 18014003: Add X32 port into V8 (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/x64/regexp-macro-assembler-x64.h
===================================================================
--- src/x64/regexp-macro-assembler-x64.h (revision 15486)
+++ src/x64/regexp-macro-assembler-x64.h (working copy)
@@ -135,8 +135,13 @@
// Offsets from rbp of function parameters and stored registers.
static const int kFramePointer = 0;
// Above the frame pointer - function parameters and return address.
+#ifndef V8_TARGET_ARCH_X32
static const int kReturn_eip = kFramePointer + kPointerSize;
static const int kFrameAlign = kReturn_eip + kPointerSize;
+#else
+ static const int kReturn_eip = kFramePointer + kHWRegSize;
+ static const int kFrameAlign = kReturn_eip + kHWRegSize;
+#endif
#ifdef _WIN64
// Parameters (first four passed as registers, but with room on stack).
@@ -162,19 +167,34 @@
// In AMD64 ABI Calling Convention, the first six integer parameters
// are passed as registers, and caller must allocate space on the stack
// if it wants them stored. We push the parameters after the frame pointer.
+#ifndef V8_TARGET_ARCH_X32
static const int kInputString = kFramePointer - kPointerSize;
static const int kStartIndex = kInputString - kPointerSize;
static const int kInputStart = kStartIndex - kPointerSize;
static const int kInputEnd = kInputStart - kPointerSize;
static const int kRegisterOutput = kInputEnd - kPointerSize;
+#else
+ static const int kInputString = kFramePointer - kHWRegSize;
+ static const int kStartIndex = kInputString - kHWRegSize;
+ static const int kInputStart = kStartIndex - kHWRegSize;
+ static const int kInputEnd = kInputStart - kHWRegSize;
+ static const int kRegisterOutput = kInputEnd - kHWRegSize;
+#endif
// For the case of global regular expression, we have room to store at least
// one set of capture results. For the case of non-global regexp, we ignore
// this value.
+#ifndef V8_TARGET_ARCH_X32
static const int kNumOutputRegisters = kRegisterOutput - kPointerSize;
static const int kStackHighEnd = kFrameAlign;
static const int kDirectCall = kStackHighEnd + kPointerSize;
static const int kIsolate = kDirectCall + kPointerSize;
+#else
+ static const int kNumOutputRegisters = kRegisterOutput - kHWRegSize;
+ static const int kStackHighEnd = kFrameAlign;
+ static const int kDirectCall = kStackHighEnd + kHWRegSize;
+ static const int kIsolate = kDirectCall + kHWRegSize;
#endif
+#endif
#ifdef _WIN64
// Microsoft calling convention has three callee-saved registers
@@ -187,7 +207,11 @@
// AMD64 Calling Convention has only one callee-save register that
// we use. We push this after the frame pointer (and after the
// parameters).
+#ifndef V8_TARGET_ARCH_X32
static const int kBackup_rbx = kNumOutputRegisters - kPointerSize;
+#else
+ static const int kBackup_rbx = kNumOutputRegisters - kHWRegSize;
+#endif
static const int kLastCalleeSaveRegister = kBackup_rbx;
#endif

Powered by Google App Engine
This is Rietveld 408576698