Author: [email protected]
Date: Fri May 15 15:36:26 2009
New Revision: 1978

Modified:
    branches/bleeding_edge/src/ia32/codegen-ia32.cc

Log:
- Fix numeric overflow handling when compiling count operations.
   In certain situations the overflow checking corrupted the value
   being calculated.

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

Modified: branches/bleeding_edge/src/ia32/codegen-ia32.cc
==============================================================================
--- branches/bleeding_edge/src/ia32/codegen-ia32.cc     (original)
+++ branches/bleeding_edge/src/ia32/codegen-ia32.cc     Fri May 15 15:36:26 2009
@@ -115,6 +115,14 @@

    JumpTarget::set_compiling_deferred_code(false);

+#ifdef DEBUG
+  if (strlen(FLAG_stop_at) > 0 &&
+      fun->name()->IsEqualTo(CStrVector(FLAG_stop_at))) {
+    frame_->SpillAll();
+    __ int3();
+  }
+#endif
+
    {
      HistogramTimerScope codegen_timer(&Counters::code_generation);
      CodeGenState state(this);
@@ -128,14 +136,6 @@
      allocator_->Initialize();
      frame_->Enter();

-#ifdef DEBUG
-    if (strlen(FLAG_stop_at) > 0 &&
-        fun->name()->IsEqualTo(CStrVector(FLAG_stop_at))) {
-      frame_->SpillAll();
-      __ int3();
-    }
-#endif
-
      // Allocate space for locals and initialize them.
      frame_->AllocateStackSlots(scope_->num_stack_slots());
      // Initialize the function return target after the locals are set
@@ -4878,9 +4878,9 @@
      // successfully allocate a temporary byte register.
      if (tmp.is_valid()) {
        __ setcc(overflow, tmp.reg());
-      __ or_(Operand(value.reg()), tmp.reg());
+      __ or_(Operand(tmp.reg()), value.reg());
+      __ test(tmp.reg(), Immediate(kSmiTagMask));
        tmp.Unuse();
-      __ test(value.reg(), Immediate(kSmiTagMask));
        deferred->enter()->Branch(not_zero, &value, not_taken);
      } else {  // Otherwise we test separately for overflow and smi check.
        deferred->enter()->Branch(overflow, &value, not_taken);

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

Reply via email to