Commit 5ae761cc authored by lrn@chromium.org's avatar lrn@chromium.org

Irregexp-ia32 internal call strategy changed.

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


git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2635 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 7bd88e82
...@@ -752,7 +752,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) { ...@@ -752,7 +752,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
// Preempt-code // Preempt-code
if (check_preempt_label_.is_linked()) { if (check_preempt_label_.is_linked()) {
__ bind(&check_preempt_label_); SafeCallTarget(&check_preempt_label_);
__ push(backtrack_stackpointer()); __ push(backtrack_stackpointer());
__ push(edi); __ push(edi);
...@@ -772,7 +772,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) { ...@@ -772,7 +772,7 @@ Handle<Object> RegExpMacroAssemblerIA32::GetCode(Handle<String> source) {
// Backtrack stack overflow code. // Backtrack stack overflow code.
if (stack_overflow_label_.is_linked()) { if (stack_overflow_label_.is_linked()) {
__ bind(&stack_overflow_label_); SafeCallTarget(&stack_overflow_label_);
// Reached if the backtrack-stack limit has been hit. // Reached if the backtrack-stack limit has been hit.
Label grow_failed; Label grow_failed;
...@@ -1249,17 +1249,19 @@ void RegExpMacroAssemblerIA32::BranchOrBacktrack(Condition condition, ...@@ -1249,17 +1249,19 @@ void RegExpMacroAssemblerIA32::BranchOrBacktrack(Condition condition,
void RegExpMacroAssemblerIA32::SafeCall(Label* to) { void RegExpMacroAssemblerIA32::SafeCall(Label* to) {
Label return_to; __ call(to);
__ push(Immediate::CodeRelativeOffset(&return_to));
__ jmp(to);
__ bind(&return_to);
} }
void RegExpMacroAssemblerIA32::SafeReturn() { void RegExpMacroAssemblerIA32::SafeReturn() {
__ pop(ebx); __ add(Operand(esp,0), Immediate(masm_->CodeObject()));
__ add(Operand(ebx), Immediate(masm_->CodeObject())); __ ret(0);
__ jmp(Operand(ebx)); }
void RegExpMacroAssemblerIA32::SafeCallTarget(Label* name) {
__ bind(name);
__ sub(Operand(esp, 0), Immediate(masm_->CodeObject()));
} }
......
...@@ -227,6 +227,7 @@ class RegExpMacroAssemblerIA32: public RegExpMacroAssembler { ...@@ -227,6 +227,7 @@ class RegExpMacroAssemblerIA32: public RegExpMacroAssembler {
// is GC-safe (i.e., doesn't leave absolute code addresses on the stack) // is GC-safe (i.e., doesn't leave absolute code addresses on the stack)
inline void SafeCall(Label* to); inline void SafeCall(Label* to);
inline void SafeReturn(); inline void SafeReturn();
inline void SafeCallTarget(Label* name);
// Pushes the value of a register on the backtrack stack. Decrements the // Pushes the value of a register on the backtrack stack. Decrements the
// stack pointer (ecx) by a word size and stores the register's value there. // stack pointer (ecx) by a word size and stores the register's value there.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment