| Index: src/ia32/codegen-ia32.cc
 | 
| diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc
 | 
| index 4593b64fba5018dcf8f2c7e5aac4d687a99d3ba0..27e94fe32889ee7d13a2e35467cb795ad8cce863 100644
 | 
| --- a/src/ia32/codegen-ia32.cc
 | 
| +++ b/src/ia32/codegen-ia32.cc
 | 
| @@ -556,7 +556,7 @@ void CodeGenerator::ConvertInt32ResultToNumber(Result* value) {
 | 
|      __ sar(val, 1);
 | 
|      // If there was an overflow, bits 30 and 31 of the original number disagree.
 | 
|      __ xor_(val, 0x80000000u);
 | 
| -    if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +    if (CpuFeatures::IsSupported(SSE2)) {
 | 
|        CpuFeatures::Scope fscope(SSE2);
 | 
|        __ cvtsi2sd(xmm0, Operand(val));
 | 
|      } else {
 | 
| @@ -574,7 +574,7 @@ void CodeGenerator::ConvertInt32ResultToNumber(Result* value) {
 | 
|                            no_reg, &allocation_failed);
 | 
|      VirtualFrame* clone = new VirtualFrame(frame_);
 | 
|      scratch.Unuse();
 | 
| -    if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +    if (CpuFeatures::IsSupported(SSE2)) {
 | 
|        CpuFeatures::Scope fscope(SSE2);
 | 
|        __ movdbl(FieldOperand(val, HeapNumber::kValueOffset), xmm0);
 | 
|      } else {
 | 
| @@ -587,7 +587,7 @@ void CodeGenerator::ConvertInt32ResultToNumber(Result* value) {
 | 
|      RegisterFile empty_regs;
 | 
|      SetFrame(clone, &empty_regs);
 | 
|      __ bind(&allocation_failed);
 | 
| -    if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +    if (!CpuFeatures::IsSupported(SSE2)) {
 | 
|        // Pop the value from the floating point stack.
 | 
|        __ fstp(0);
 | 
|      }
 | 
| @@ -614,7 +614,7 @@ void CodeGenerator::Load(Expression* expr) {
 | 
|        safe_int32_mode_enabled() &&
 | 
|        expr->side_effect_free() &&
 | 
|        expr->num_bit_ops() > 2 &&
 | 
| -      masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +      CpuFeatures::IsSupported(SSE2)) {
 | 
|      BreakTarget unsafe_bailout;
 | 
|      JumpTarget done;
 | 
|      unsafe_bailout.set_expected_height(frame_->height());
 | 
| @@ -995,7 +995,7 @@ class DeferredInlineBinaryOperation: public DeferredCode {
 | 
|  
 | 
|  Label* DeferredInlineBinaryOperation::NonSmiInputLabel() {
 | 
|    if (Token::IsBitOp(op_) &&
 | 
| -      masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +      CpuFeatures::IsSupported(SSE2)) {
 | 
|      return &non_smi_input_;
 | 
|    } else {
 | 
|      return entry_label();
 | 
| @@ -1018,7 +1018,7 @@ void DeferredInlineBinaryOperation::JumpToConstantRhs(Condition cond,
 | 
|  void DeferredInlineBinaryOperation::Generate() {
 | 
|    // Registers are not saved implicitly for this stub, so we should not
 | 
|    // tread on the registers that were not passed to us.
 | 
| -  if (masm()->isolate()->cpu_features()->IsSupported(SSE2) &&
 | 
| +  if (CpuFeatures::IsSupported(SSE2) &&
 | 
|        ((op_ == Token::ADD) ||
 | 
|         (op_ == Token::SUB) ||
 | 
|         (op_ == Token::MUL) ||
 | 
| @@ -1154,7 +1154,7 @@ void DeferredInlineBinaryOperation::GenerateNonSmiInput() {
 | 
|      // The left_ and right_ registers have not been initialized yet.
 | 
|      __ mov(right_, Immediate(smi_value_));
 | 
|      __ mov(left_, Operand(dst_));
 | 
| -    if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +    if (!CpuFeatures::IsSupported(SSE2)) {
 | 
|        __ jmp(entry_label());
 | 
|        return;
 | 
|      } else {
 | 
| @@ -1267,7 +1267,7 @@ void DeferredInlineBinaryOperation::GenerateAnswerOutOfRange() {
 | 
|    // This trashes right_.
 | 
|    __ AllocateHeapNumber(left_, right_, no_reg, &after_alloc_failure2);
 | 
|    __ bind(&allocation_ok);
 | 
| -  if (masm()->isolate()->cpu_features()->IsSupported(SSE2) &&
 | 
| +  if (CpuFeatures::IsSupported(SSE2) &&
 | 
|        op_ != Token::SHR) {
 | 
|      CpuFeatures::Scope use_sse2(SSE2);
 | 
|      ASSERT(Token::IsBitOp(op_));
 | 
| @@ -3032,7 +3032,7 @@ void CodeGenerator::ConstantSmiComparison(Condition cc,
 | 
|        // constant smi.  If the non-smi is a heap number and this is not
 | 
|        // a loop condition, inline the floating point code.
 | 
|        if (!is_loop_condition &&
 | 
| -          masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +          CpuFeatures::IsSupported(SSE2)) {
 | 
|          // Right side is a constant smi and left side has been checked
 | 
|          // not to be a smi.
 | 
|          CpuFeatures::Scope use_sse2(SSE2);
 | 
| @@ -3196,7 +3196,7 @@ void CodeGenerator::GenerateInlineNumberComparison(Result* left_side,
 | 
|    ASSERT(right_side->is_register());
 | 
|  
 | 
|    JumpTarget not_numbers;
 | 
| -  if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +  if (CpuFeatures::IsSupported(SSE2)) {
 | 
|      CpuFeatures::Scope use_sse2(SSE2);
 | 
|  
 | 
|      // Load left and right operand into registers xmm0 and xmm1 and compare.
 | 
| @@ -7457,7 +7457,7 @@ void CodeGenerator::GenerateRandomHeapNumber(
 | 
|    // by computing:
 | 
|    // ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)).
 | 
|    // This is implemented on both SSE2 and FPU.
 | 
| -  if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +  if (CpuFeatures::IsSupported(SSE2)) {
 | 
|      CpuFeatures::Scope fscope(SSE2);
 | 
|      __ mov(ebx, Immediate(0x49800000));  // 1.0 x 2^20 as single.
 | 
|      __ movd(xmm1, Operand(ebx));
 | 
| @@ -7863,7 +7863,7 @@ void CodeGenerator::GenerateMathPow(ZoneList<Expression*>* args) {
 | 
|    ASSERT(args->length() == 2);
 | 
|    Load(args->at(0));
 | 
|    Load(args->at(1));
 | 
| -  if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +  if (!CpuFeatures::IsSupported(SSE2)) {
 | 
|      Result res = frame_->CallRuntime(Runtime::kMath_pow, 2);
 | 
|      frame_->Push(&res);
 | 
|    } else {
 | 
| @@ -8080,7 +8080,7 @@ void CodeGenerator::GenerateMathSqrt(ZoneList<Expression*>* args) {
 | 
|    ASSERT_EQ(args->length(), 1);
 | 
|    Load(args->at(0));
 | 
|  
 | 
| -  if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +  if (!CpuFeatures::IsSupported(SSE2)) {
 | 
|      Result result = frame()->CallRuntime(Runtime::kMath_sqrt, 1);
 | 
|      frame()->Push(&result);
 | 
|    } else {
 | 
| @@ -10205,7 +10205,7 @@ OS::MemCopyFunction CreateMemCopyFunction() {
 | 
|      __ int3();
 | 
|      __ bind(&ok);
 | 
|    }
 | 
| -  if (masm.isolate()->cpu_features()->IsSupported(SSE2)) {
 | 
| +  if (CpuFeatures::IsSupported(SSE2)) {
 | 
|      CpuFeatures::Scope enable(SSE2);
 | 
|      __ push(edi);
 | 
|      __ push(esi);
 | 
| 
 |