| Index: src/ia32/lithium-codegen-ia32.cc
 | 
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
 | 
| index 46dcec0d8804b66d808c024b75825cb18b23c637..23ca36ae0fa4dc89ff44ca0c2cf232c6476fbe0c 100644
 | 
| --- a/src/ia32/lithium-codegen-ia32.cc
 | 
| +++ b/src/ia32/lithium-codegen-ia32.cc
 | 
| @@ -2124,14 +2124,16 @@ void LCodeGen::EmitBranch(int left_block, int right_block, Condition cc) {
 | 
|  void LCodeGen::DoBranch(LBranch* instr) {
 | 
|    int true_block = chunk_->LookupDestination(instr->true_block_id());
 | 
|    int false_block = chunk_->LookupDestination(instr->false_block_id());
 | 
| -  CpuFeatureScope scope(masm(), SSE2);
 | 
|  
 | 
|    Representation r = instr->hydrogen()->value()->representation();
 | 
|    if (r.IsSmiOrInteger32()) {
 | 
| +    ASSERT(!info()->IsStub());
 | 
|      Register reg = ToRegister(instr->value());
 | 
|      __ test(reg, Operand(reg));
 | 
|      EmitBranch(true_block, false_block, not_zero);
 | 
|    } else if (r.IsDouble()) {
 | 
| +    ASSERT(!info()->IsStub());
 | 
| +    CpuFeatureScope scope(masm(), SSE2);
 | 
|      XMMRegister reg = ToDoubleRegister(instr->value());
 | 
|      __ xorps(xmm0, xmm0);
 | 
|      __ ucomisd(reg, xmm0);
 | 
| @@ -2141,9 +2143,11 @@ void LCodeGen::DoBranch(LBranch* instr) {
 | 
|      Register reg = ToRegister(instr->value());
 | 
|      HType type = instr->hydrogen()->value()->type();
 | 
|      if (type.IsBoolean()) {
 | 
| +      ASSERT(!info()->IsStub());
 | 
|        __ cmp(reg, factory()->true_value());
 | 
|        EmitBranch(true_block, false_block, equal);
 | 
|      } else if (type.IsSmi()) {
 | 
| +      ASSERT(!info()->IsStub());
 | 
|        __ test(reg, Operand(reg));
 | 
|        EmitBranch(true_block, false_block, not_equal);
 | 
|      } else {
 | 
| @@ -2227,8 +2231,15 @@ void LCodeGen::DoBranch(LBranch* instr) {
 | 
|          __ cmp(FieldOperand(reg, HeapObject::kMapOffset),
 | 
|                 factory()->heap_number_map());
 | 
|          __ j(not_equal, ¬_heap_number, Label::kNear);
 | 
| -        __ xorps(xmm0, xmm0);
 | 
| -        __ ucomisd(xmm0, FieldOperand(reg, HeapNumber::kValueOffset));
 | 
| +        if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +          CpuFeatureScope scope(masm(), SSE2);
 | 
| +          __ xorps(xmm0, xmm0);
 | 
| +          __ ucomisd(xmm0, FieldOperand(reg, HeapNumber::kValueOffset));
 | 
| +        } else {
 | 
| +          __ fldz();
 | 
| +          __ fld_d(FieldOperand(reg, HeapNumber::kValueOffset));
 | 
| +          __ FCmp();
 | 
| +        }
 | 
|          __ j(zero, false_label);
 | 
|          __ jmp(true_label);
 | 
|          __ bind(¬_heap_number);
 | 
| 
 |