| Index: src/ia32/deoptimizer-ia32.cc
|
| ===================================================================
|
| --- src/ia32/deoptimizer-ia32.cc (revision 6765)
|
| +++ src/ia32/deoptimizer-ia32.cc (working copy)
|
| @@ -137,39 +137,39 @@
|
| void Deoptimizer::PatchStackCheckCodeAt(Address pc_after,
|
| Code* check_code,
|
| Code* replacement_code) {
|
| - Address call_target_address = pc_after - kPointerSize;
|
| - ASSERT(check_code->entry() ==
|
| - Assembler::target_address_at(call_target_address));
|
| - // The stack check code matches the pattern:
|
| - //
|
| - // cmp esp, <limit>
|
| - // jae ok
|
| - // call <stack guard>
|
| - // test eax, <loop nesting depth>
|
| - // ok: ...
|
| - //
|
| - // We will patch away the branch so the code is:
|
| - //
|
| - // cmp esp, <limit> ;; Not changed
|
| - // nop
|
| - // nop
|
| - // call <on-stack replacment>
|
| - // test eax, <loop nesting depth>
|
| - // ok:
|
| - ASSERT(*(call_target_address - 3) == 0x73 && // jae
|
| - *(call_target_address - 2) == 0x07 && // offset
|
| - *(call_target_address - 1) == 0xe8); // call
|
| - *(call_target_address - 3) = 0x90; // nop
|
| - *(call_target_address - 2) = 0x90; // nop
|
| - Assembler::set_target_address_at(call_target_address,
|
| - replacement_code->entry());
|
| + Address call_target_address = pc_after - kIntSize;
|
| + ASSERT(check_code->entry() ==
|
| + Assembler::target_address_at(call_target_address));
|
| + // The stack check code matches the pattern:
|
| + //
|
| + // cmp esp, <limit>
|
| + // jae ok
|
| + // call <stack guard>
|
| + // test eax, <loop nesting depth>
|
| + // ok: ...
|
| + //
|
| + // We will patch away the branch so the code is:
|
| + //
|
| + // cmp esp, <limit> ;; Not changed
|
| + // nop
|
| + // nop
|
| + // call <on-stack replacment>
|
| + // test eax, <loop nesting depth>
|
| + // ok:
|
| + ASSERT(*(call_target_address - 3) == 0x73 && // jae
|
| + *(call_target_address - 2) == 0x07 && // offset
|
| + *(call_target_address - 1) == 0xe8); // call
|
| + *(call_target_address - 3) = 0x90; // nop
|
| + *(call_target_address - 2) = 0x90; // nop
|
| + Assembler::set_target_address_at(call_target_address,
|
| + replacement_code->entry());
|
| }
|
|
|
|
|
| void Deoptimizer::RevertStackCheckCodeAt(Address pc_after,
|
| Code* check_code,
|
| Code* replacement_code) {
|
| - Address call_target_address = pc_after - kPointerSize;
|
| + Address call_target_address = pc_after - kIntSize;
|
| ASSERT(replacement_code->entry() ==
|
| Assembler::target_address_at(call_target_address));
|
| // Replace the nops from patching (Deoptimizer::PatchStackCheckCode) to
|
|
|