Reviewers: William Hesse,

Description:
Unbreak IA32 generated code coverage.

Please review this at http://codereview.chromium.org/100156

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
   M     src/ia32/codegen-ia32.cc
   M     src/ia32/jump-target-ia32.cc


Index: src/ia32/codegen-ia32.cc
===================================================================
--- src/ia32/codegen-ia32.cc    (revision 1807)
+++ src/ia32/codegen-ia32.cc    (working copy)
@@ -5265,9 +5265,10 @@
    // The call must be followed by a test eax instruction to indicate
    // that the inobject property case was inlined.
    ASSERT(answer.is_register() && answer.reg().is(eax));
-  // Store the delta to the map check instruction here in the test
-  // instruction.
-  int delta_to_patch_site = __ SizeOfCodeGeneratedSince(patch_site());
+  // Store the delta to the map check instruction here in the test  
instruction.
+  // Use masm_-> instead of the double underscore macro since the latter  
can't
+  // return a value.
+  int delta_to_patch_site = masm_->SizeOfCodeGeneratedSince(patch_site());
    // Here we use masm_-> instead of the double underscore macro because
    // this is the instruction that gets patched and coverage code gets in
    // the way.
@@ -5417,8 +5418,10 @@
          __ bind(deferred->patch_site());
          // This is the map check instruction that will be patched.
          // Initially use an invalid map to force a failure.
-        __ cmp(FieldOperand(receiver.reg(), HeapObject::kMapOffset),
-               Immediate(Factory::null_value()));
+        masm->cmp(FieldOperand(receiver.reg(), HeapObject::kMapOffset),
+                  Immediate(Factory::null_value()));
+        // This branch is always a forwards branch so it's always a fixed
+        // size which allows the assert below to succeed and patching to  
work.
          deferred->enter()->Branch(not_equal, &receiver, not_taken);

          // The delta from the patch label to the load offset must be
@@ -5429,7 +5432,7 @@
          // a 32-bit instruction encoding to allow patching with an
          // arbitrary offset.  Use kMaxInt (minus kHeapObjectTag).
          int offset = kMaxInt;
-        __ mov(value.reg(), FieldOperand(receiver.reg(), offset));
+        masm->mov(value.reg(), FieldOperand(receiver.reg(), offset));

          __ IncrementCounter(&Counters::named_load_inline, 1);
          deferred->BindExit(&receiver, &value);
Index: src/ia32/jump-target-ia32.cc
===================================================================
--- src/ia32/jump-target-ia32.cc        (revision 1807)
+++ src/ia32/jump-target-ia32.cc        (working copy)
@@ -115,11 +115,13 @@
      __ bind(&original_fall_through);

    } else {
-    // Forward branch.  A copy of the current frame is added to the end
-    // of the list of frames reaching the target block and a branch to
-    // the merge code is emitted.
+    // Forward branch.  A copy of the current frame is added to the end of  
the
+    // list of frames reaching the target block and a branch to the merge  
code
+    // is emitted.  Use masm_-> instead of __ as forward branches are  
expected
+    // to be a fixed size (no inserted coverage-checking instructions  
please).
+    // This is used in Reference::GetValue.
      AddReachingFrame(new VirtualFrame(cgen_->frame()));
-    __ j(cc, &merge_labels_.last(), hint);
+    masm_->j(cc, &merge_labels_.last(), hint);
      is_linked_ = true;
    }
  }



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to