Author: [EMAIL PROTECTED]
Date: Thu Nov 27 01:27:30 2008
New Revision: 855
Modified:
branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
branches/bleeding_edge/test/cctest/cctest.status
Log:
Fix native code Irregexp on MacOSX.
Review URL: http://codereview.chromium.org/10984
Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.cc Thu Nov 27
01:27:30 2008
@@ -356,14 +356,23 @@
// Entry code:
__ bind(&entry_label_);
+ // Save callee-save registers. Order here should correspond to order of
+ // kBackup_ebx etc.
__ push(esi);
__ push(edi);
+ __ push(ebx); // Callee-save on MacOS.
__ enter(Immediate(num_registers_ * kPointerSize));
+ // Load string length.
__ mov(esi, Operand(ebp, kInputEndOffset));
+ // Load input position.
__ mov(edi, Operand(ebp, kInputStartOffset));
+ // Set up edi to be negative offset from string end.
__ sub(edi, Operand(esi));
+ // Set up esi to be end of string. First get location.
__ mov(edx, Operand(ebp, kInputBuffer));
+ // Dereference location to get string start.
__ mov(edx, Operand(edx, 0));
+ // Add start to length to complete esi setup.
__ add(esi, Operand(edx));
if (num_saved_registers_ > 0) {
// Fill saved registers with initial value = start offset - 1
@@ -398,6 +407,7 @@
__ bind(&exit_label_);
__ leave();
+ __ pop(ebx);
__ pop(edi);
__ pop(esi);
__ ret(0);
Modified: branches/bleeding_edge/src/regexp-macro-assembler-ia32.h
==============================================================================
--- branches/bleeding_edge/src/regexp-macro-assembler-ia32.h (original)
+++ branches/bleeding_edge/src/regexp-macro-assembler-ia32.h Thu Nov 27
01:27:30 2008
@@ -88,12 +88,14 @@
private:
// Offsets from ebp of arguments to function.
- static const int kBackup_edi = 1 * sizeof(uint32_t);
- static const int kBackup_esi= 2 * sizeof(uint32_t);
- static const int kInputBuffer = 4 * sizeof(uint32_t);
- static const int kInputStartOffset = 5 * sizeof(uint32_t);
- static const int kInputEndOffset = 6 * sizeof(uint32_t);
- static const int kRegisterOutput = 7 * sizeof(uint32_t);
+ static const int kBackup_ebx = sizeof(uint32_t);
+ static const int kBackup_edi = kBackup_ebx + sizeof(uint32_t);
+ static const int kBackup_esi = kBackup_edi + sizeof(uint32_t);
+ static const int kReturn_eip = kBackup_esi + sizeof(uint32_t);
+ static const int kInputBuffer = kReturn_eip + sizeof(uint32_t);
+ static const int kInputStartOffset = kInputBuffer + sizeof(uint32_t);
+ static const int kInputEndOffset = kInputStartOffset + sizeof(uint32_t);
+ static const int kRegisterOutput = kInputEndOffset + sizeof(uint32_t);
// Initial size of code buffer.
static const size_t kRegExpCodeSize = 1024;
Modified: branches/bleeding_edge/test/cctest/cctest.status
==============================================================================
--- branches/bleeding_edge/test/cctest/cctest.status (original)
+++ branches/bleeding_edge/test/cctest/cctest.status Thu Nov 27 01:27:30
2008
@@ -38,9 +38,3 @@
# BUG(113): Test seems flaky on ARM.
test-spaces/LargeObjectSpace: PASS || FAIL
-[ $system == macos ]
-
-# TODO(lrn): Please fix this asap.
-test-regexp/MacroAssemblerIA32Simple: PASS || CRASH
-test-regexp/MacroAssemblerIA32Registers: PASS || CRASH
-
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---