Reviewers: Kasper Lund, Mads Ager, Kevin Millikin, Message: TRB= kasperl | ager | kmillikin
http://codereview.chromium.org/115423/diff/1/2 File src/ia32/codegen-ia32.cc (right): http://codereview.chromium.org/115423/diff/1/2#newcode118 Line 118: #ifdef DEBUG This moved up here to be able to stop before any code for the function is generated. This is not relevant to the actual fix. Description: - Fix numeric overflow handling when compiling count operations. In certain situations the overflow checking corrupted the value being calculated. Please review this at http://codereview.chromium.org/115423 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/ia32/codegen-ia32.cc Index: src/ia32/codegen-ia32.cc =================================================================== --- src/ia32/codegen-ia32.cc (revision 1977) +++ src/ia32/codegen-ia32.cc (working copy) @@ -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 -~----------~----~----~----~------~----~------~--~---
