| Index: src/ia32/regexp-macro-assembler-ia32.cc
|
| diff --git a/src/ia32/regexp-macro-assembler-ia32.cc b/src/ia32/regexp-macro-assembler-ia32.cc
|
| index 2129fd16b6ef11bc8cd4c910d705922958255fb4..66b03ff5246db028845fede0071b2a56713ec1c1 100644
|
| --- a/src/ia32/regexp-macro-assembler-ia32.cc
|
| +++ b/src/ia32/regexp-macro-assembler-ia32.cc
|
| @@ -752,7 +752,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
|
|
|
| // Preempt-code
|
| if (check_preempt_label_.is_linked()) {
|
| - __ bind(&check_preempt_label_);
|
| + SafeCallTarget(&check_preempt_label_);
|
|
|
| __ push(backtrack_stackpointer());
|
| __ push(edi);
|
| @@ -772,7 +772,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
|
|
|
| // Backtrack stack overflow code.
|
| if (stack_overflow_label_.is_linked()) {
|
| - __ bind(&stack_overflow_label_);
|
| + SafeCallTarget(&stack_overflow_label_);
|
| // Reached if the backtrack-stack limit has been hit.
|
|
|
| Label grow_failed;
|
| @@ -1249,17 +1249,19 @@ void RegExpMacroAssemblerIA32::BranchOrBacktrack(Condition condition,
|
|
|
|
|
| void RegExpMacroAssemblerIA32::SafeCall(Label* to) {
|
| - Label return_to;
|
| - __ push(Immediate::CodeRelativeOffset(&return_to));
|
| - __ jmp(to);
|
| - __ bind(&return_to);
|
| + __ call(to);
|
| }
|
|
|
|
|
| void RegExpMacroAssemblerIA32::SafeReturn() {
|
| - __ pop(ebx);
|
| - __ add(Operand(ebx), Immediate(masm_->CodeObject()));
|
| - __ jmp(Operand(ebx));
|
| + __ add(Operand(esp,0), Immediate(masm_->CodeObject()));
|
| + __ ret(0);
|
| +}
|
| +
|
| +
|
| +void RegExpMacroAssemblerIA32::SafeCallTarget(Label* name) {
|
| + __ bind(name);
|
| + __ sub(Operand(esp, 0), Immediate(masm_->CodeObject()));
|
| }
|
|
|
|
|
|
|