// 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
__ bind(&exit_label_);
__ leave();
+ __ pop(ebx);
__ pop(edi);
__ pop(esi);
__ ret(0);
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;
# 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
-