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
-~----------~----~----~----~------~----~------~--~---

Reply via email to