| Index: src/ia32/lithium-codegen-ia32.cc
 | 
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
 | 
| index c9d6f8e203c5b5670d622e277c439d3dc1bc2332..3a3d50ffea3cd60ced8d80504fe88db2e707cb32 100644
 | 
| --- a/src/ia32/lithium-codegen-ia32.cc
 | 
| +++ b/src/ia32/lithium-codegen-ia32.cc
 | 
| @@ -18,9 +18,10 @@ namespace v8 {
 | 
|  namespace internal {
 | 
|  
 | 
|  
 | 
| -static SaveFPRegsMode GetSaveFPRegsMode() {
 | 
| +static SaveFPRegsMode GetSaveFPRegsMode(Isolate* isolate) {
 | 
|    // We don't need to save floating point regs when generating the snapshot
 | 
| -  return CpuFeatures::IsSafeForSnapshot(SSE2) ? kSaveFPRegs : kDontSaveFPRegs;
 | 
| +  return CpuFeatures::IsSafeForSnapshot(isolate, SSE2) ? kSaveFPRegs
 | 
| +                                                       : kDontSaveFPRegs;
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -383,7 +384,7 @@ void LCodeGen::GenerateBodyInstructionPost(LInstruction* instr) {
 | 
|        x87_stack_.LeavingBlock(current_block_, LGoto::cast(instr));
 | 
|      } else if (FLAG_debug_code && FLAG_enable_slow_asserts &&
 | 
|                 !instr->IsGap() && !instr->IsReturn()) {
 | 
| -      if (instr->ClobbersDoubleRegisters()) {
 | 
| +      if (instr->ClobbersDoubleRegisters(isolate())) {
 | 
|          if (instr->HasDoubleRegisterResult()) {
 | 
|            ASSERT_EQ(1, x87_stack_.depth());
 | 
|          } else {
 | 
| @@ -682,7 +683,7 @@ void LCodeGen::X87PrepareBinaryOp(
 | 
|  
 | 
|  
 | 
|  void LCodeGen::X87Stack::FlushIfNecessary(LInstruction* instr, LCodeGen* cgen) {
 | 
| -  if (stack_depth_ > 0 && instr->ClobbersDoubleRegisters()) {
 | 
| +  if (stack_depth_ > 0 && instr->ClobbersDoubleRegisters(isolate())) {
 | 
|      bool double_inputs = instr->HasDoubleRegisterInput();
 | 
|  
 | 
|      // Flush stack from tos down, since FreeX87() will mess with tos
 | 
| @@ -1969,7 +1970,7 @@ void LCodeGen::DoConstantD(LConstantD* instr) {
 | 
|    int32_t upper = static_cast<int32_t>(int_val >> (kBitsPerInt));
 | 
|    ASSERT(instr->result()->IsDoubleRegister());
 | 
|  
 | 
| -  if (!CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +  if (!CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|      __ push(Immediate(upper));
 | 
|      __ push(Immediate(lower));
 | 
|      X87Register reg = ToX87Register(instr->result());
 | 
| @@ -2242,7 +2243,7 @@ void LCodeGen::DoMathMinMax(LMathMinMax* instr) {
 | 
|  
 | 
|  
 | 
|  void LCodeGen::DoArithmeticD(LArithmeticD* instr) {
 | 
| -  if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +  if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|      CpuFeatureScope scope(masm(), SSE2);
 | 
|      XMMRegister left = ToDoubleRegister(instr->left());
 | 
|      XMMRegister right = ToDoubleRegister(instr->right());
 | 
| @@ -2487,7 +2488,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
 | 
|          __ cmp(FieldOperand(reg, HeapObject::kMapOffset),
 | 
|                 factory()->heap_number_map());
 | 
|          __ j(not_equal, ¬_heap_number, Label::kNear);
 | 
| -        if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +        if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|            CpuFeatureScope scope(masm(), SSE2);
 | 
|            XMMRegister xmm_scratch = double_scratch0();
 | 
|            __ xorps(xmm_scratch, xmm_scratch);
 | 
| @@ -2574,7 +2575,7 @@ void LCodeGen::DoCompareNumericAndBranch(LCompareNumericAndBranch* instr) {
 | 
|      EmitGoto(next_block);
 | 
|    } else {
 | 
|      if (instr->is_double()) {
 | 
| -      if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +      if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|          CpuFeatureScope scope(masm(), SSE2);
 | 
|          __ ucomisd(ToDoubleRegister(left), ToDoubleRegister(right));
 | 
|        } else {
 | 
| @@ -3250,7 +3251,7 @@ void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
 | 
|                                offset,
 | 
|                                value,
 | 
|                                temp,
 | 
| -                              GetSaveFPRegsMode(),
 | 
| +                              GetSaveFPRegsMode(isolate()),
 | 
|                                EMIT_REMEMBERED_SET,
 | 
|                                check_needed);
 | 
|    }
 | 
| @@ -4417,7 +4418,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
 | 
|                            HeapObject::kMapOffset,
 | 
|                            temp_map,
 | 
|                            temp,
 | 
| -                          GetSaveFPRegsMode(),
 | 
| +                          GetSaveFPRegsMode(isolate()),
 | 
|                            OMIT_REMEMBERED_SET,
 | 
|                            OMIT_SMI_CHECK);
 | 
|      }
 | 
| @@ -4458,7 +4459,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
 | 
|                          offset,
 | 
|                          value,
 | 
|                          temp,
 | 
| -                        GetSaveFPRegsMode(),
 | 
| +                        GetSaveFPRegsMode(isolate()),
 | 
|                          EMIT_REMEMBERED_SET,
 | 
|                          check_needed);
 | 
|    }
 | 
| @@ -4518,7 +4519,7 @@ void LCodeGen::DoStoreKeyedExternalArray(LStoreKeyed* instr) {
 | 
|        instr->additional_index()));
 | 
|    if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS ||
 | 
|        elements_kind == FLOAT32_ELEMENTS) {
 | 
| -    if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +    if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|        CpuFeatureScope scope(masm(), SSE2);
 | 
|        XMMRegister xmm_scratch = double_scratch0();
 | 
|        __ cvtsd2ss(xmm_scratch, ToDoubleRegister(instr->value()));
 | 
| @@ -4529,7 +4530,7 @@ void LCodeGen::DoStoreKeyedExternalArray(LStoreKeyed* instr) {
 | 
|      }
 | 
|    } else if (elements_kind == EXTERNAL_FLOAT64_ELEMENTS ||
 | 
|               elements_kind == FLOAT64_ELEMENTS) {
 | 
| -    if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +    if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|        CpuFeatureScope scope(masm(), SSE2);
 | 
|        __ movsd(operand, ToDoubleRegister(instr->value()));
 | 
|      } else {
 | 
| @@ -4588,7 +4589,7 @@ void LCodeGen::DoStoreKeyedFixedDoubleArray(LStoreKeyed* instr) {
 | 
|        FixedDoubleArray::kHeaderSize - kHeapObjectTag,
 | 
|        instr->additional_index());
 | 
|  
 | 
| -  if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +  if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|      CpuFeatureScope scope(masm(), SSE2);
 | 
|      XMMRegister value = ToDoubleRegister(instr->value());
 | 
|  
 | 
| @@ -4690,7 +4691,7 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) {
 | 
|      __ RecordWrite(elements,
 | 
|                     key,
 | 
|                     value,
 | 
| -                   GetSaveFPRegsMode(),
 | 
| +                   GetSaveFPRegsMode(isolate()),
 | 
|                     EMIT_REMEMBERED_SET,
 | 
|                     check_needed);
 | 
|    }
 | 
| @@ -5427,7 +5428,7 @@ void LCodeGen::DoDoubleToI(LDoubleToI* instr) {
 | 
|    Register result_reg = ToRegister(result);
 | 
|  
 | 
|    if (instr->truncating()) {
 | 
| -    if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +    if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|        CpuFeatureScope scope(masm(), SSE2);
 | 
|        XMMRegister input_reg = ToDoubleRegister(input);
 | 
|        __ TruncateDoubleToI(result_reg, input_reg);
 | 
| @@ -5438,7 +5439,7 @@ void LCodeGen::DoDoubleToI(LDoubleToI* instr) {
 | 
|      }
 | 
|    } else {
 | 
|      Label bailout, done;
 | 
| -    if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +    if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|        CpuFeatureScope scope(masm(), SSE2);
 | 
|        XMMRegister input_reg = ToDoubleRegister(input);
 | 
|        XMMRegister xmm_scratch = double_scratch0();
 | 
| @@ -5466,7 +5467,7 @@ void LCodeGen::DoDoubleToSmi(LDoubleToSmi* instr) {
 | 
|    Register result_reg = ToRegister(result);
 | 
|  
 | 
|    Label bailout, done;
 | 
| -  if (CpuFeatures::IsSafeForSnapshot(SSE2)) {
 | 
| +  if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) {
 | 
|      CpuFeatureScope scope(masm(), SSE2);
 | 
|      XMMRegister input_reg = ToDoubleRegister(input);
 | 
|      XMMRegister xmm_scratch = double_scratch0();
 | 
| 
 |