Index: src/regexp-macro-assembler-ia32.cc |
=================================================================== |
--- src/regexp-macro-assembler-ia32.cc (revision 853) |
+++ src/regexp-macro-assembler-ia32.cc (working copy) |
@@ -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); |