| Index: src/ia32/codegen-ia32.cc
 | 
| ===================================================================
 | 
| --- src/ia32/codegen-ia32.cc	(revision 5269)
 | 
| +++ src/ia32/codegen-ia32.cc	(working copy)
 | 
| @@ -1250,7 +1250,7 @@
 | 
|      if (left_info_.IsSmi()) {
 | 
|        // Right is a heap object.
 | 
|        __ JumpIfNotNumber(right_, right_info_, entry_label());
 | 
| -      __ ConvertToInt32(right_, right_, dst_, left_info_, entry_label());
 | 
| +      __ ConvertToInt32(right_, right_, dst_, right_info_, entry_label());
 | 
|        __ mov(dst_, Operand(left_));
 | 
|        __ SmiUntag(dst_);
 | 
|      } else if (right_info_.IsSmi()) {
 | 
| @@ -1270,11 +1270,11 @@
 | 
|        // Both were heap objects.
 | 
|        __ rcl(right_, 1);  // Put tag back.
 | 
|        __ JumpIfNotNumber(right_, right_info_, entry_label());
 | 
| -      __ ConvertToInt32(right_, right_, no_reg, left_info_, entry_label());
 | 
| +      __ ConvertToInt32(right_, right_, no_reg, right_info_, entry_label());
 | 
|        __ jmp(&got_both);
 | 
|        __ bind(&only_right_is_heap_object);
 | 
|        __ JumpIfNotNumber(right_, right_info_, entry_label());
 | 
| -      __ ConvertToInt32(right_, right_, no_reg, left_info_, entry_label());
 | 
| +      __ ConvertToInt32(right_, right_, no_reg, right_info_, entry_label());
 | 
|        __ bind(&got_both);
 | 
|      }
 | 
|    }
 | 
| @@ -1940,6 +1940,7 @@
 | 
|      // Use a fresh answer register to avoid spilling the left operand.
 | 
|      answer = allocator_->Allocate();
 | 
|      ASSERT(answer.is_valid());
 | 
| +
 | 
|      DeferredInlineBinaryOperation* deferred =
 | 
|          new DeferredInlineBinaryOperation(op,
 | 
|                                            answer.reg(),
 | 
| @@ -4605,10 +4606,11 @@
 | 
|    // loop.  edx: i'th entry of the enum cache (or string there of)
 | 
|    frame_->EmitPush(ebx);
 | 
|    { Reference each(this, node->each());
 | 
| -    // Loading a reference may leave the frame in an unspilled state.
 | 
| -    frame_->SpillAll();
 | 
|      if (!each.is_illegal()) {
 | 
|        if (each.size() > 0) {
 | 
| +        // Loading a reference may leave the frame in an unspilled state.
 | 
| +        frame_->SpillAll();
 | 
| +        // Get the value (under the reference on the stack) from memory.
 | 
|          frame_->EmitPush(frame_->ElementAt(each.size()));
 | 
|          each.SetValue(NOT_CONST_INIT);
 | 
|          frame_->Drop(2);
 | 
| 
 |