Chromium Code Reviews| Index: src/ia32/deoptimizer-ia32.cc |
| diff --git a/src/ia32/deoptimizer-ia32.cc b/src/ia32/deoptimizer-ia32.cc |
| index 14f26757e9232fc066d279af189e76d2394739af..921ee5fa03ed43e2232b76f2102ebbfa18a6e19d 100644 |
| --- a/src/ia32/deoptimizer-ia32.cc |
| +++ b/src/ia32/deoptimizer-ia32.cc |
| @@ -228,9 +228,15 @@ void Deoptimizer::PatchStackCheckCodeAt(Code* unoptimized_code, |
| // 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 |
| + |
| + if (FLAG_count_based_interrupts) { |
| + ASSERT(*(call_target_address - 3) == 0x79); // jns |
| + ASSERT(*(call_target_address - 2) == 0x11); // offset |
|
Vyacheslav Egorov (Chromium)
2012/02/14 12:52:47
Please name magical constants. they are duplicated
Jakob Kummerow
2012/02/14 13:54:45
Done.
|
| + } else { |
| + ASSERT(*(call_target_address - 3) == 0x73); // jae |
| + ASSERT(*(call_target_address - 2) == 0x07); // offset |
| + } |
| + ASSERT(*(call_target_address - 1) == 0xe8); // call |
| *(call_target_address - 3) = 0x66; // 2 byte nop part 1 |
| *(call_target_address - 2) = 0x90; // 2 byte nop part 2 |
| Assembler::set_target_address_at(call_target_address, |
| @@ -248,13 +254,19 @@ void Deoptimizer::RevertStackCheckCodeAt(Code* unoptimized_code, |
| 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 |
| // restore the conditional branch. |
| ASSERT(*(call_target_address - 3) == 0x66 && // 2 byte nop part 1 |
| *(call_target_address - 2) == 0x90 && // 2 byte nop part 2 |
| *(call_target_address - 1) == 0xe8); // call |
| - *(call_target_address - 3) = 0x73; // jae |
| - *(call_target_address - 2) = 0x07; // offset |
| + if (FLAG_count_based_interrupts) { |
| + *(call_target_address - 3) = 0x79; // jns |
| + *(call_target_address - 2) = 0x11; // offset |
| + } else { |
| + *(call_target_address - 3) = 0x73; // jae |
| + *(call_target_address - 2) = 0x07; // offset |
| + } |
| Assembler::set_target_address_at(call_target_address, |
| check_code->entry()); |