Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3305)

Unified Diff: src/ia32/deoptimizer-ia32.cc

Issue 9373028: Initial support for count-based profiling (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: removed unnecessary instruction Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698