Fix native code Irregexp on MacOSX.

Review URL: http://codereview.chromium.org/10984

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@855 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
erik.corry@gmail.com 2008-11-27 09:27:30 +00:00
parent 80c0290714
commit ef59fde8de
3 changed files with 18 additions and 12 deletions

View File

@ -356,14 +356,23 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode() {
// 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 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode() {
__ bind(&exit_label_);
__ leave();
__ pop(ebx);
__ pop(edi);
__ pop(esi);
__ ret(0);

View File

@ -88,12 +88,14 @@ class RegExpMacroAssemblerIA32: public RegExpMacroAssembler {
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;

View File

@ -38,9 +38,3 @@ test-serialize: SKIP
# 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