Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 8fd1a5431d3186d2198685e1ad4f8fee1893ff41..34f59394de86f9e44c41dfc594ed5b2442d68b95 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -196,7 +196,7 @@ bool LCodeGen::GeneratePrologue() { |
} |
if (info()->saves_caller_doubles() && CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
Comment(";;; Save clobbered callee double registers"); |
int count = 0; |
BitVector* doubles = chunk()->allocated_double_registers(); |
@@ -1162,7 +1162,7 @@ void LCodeGen::DoModI(LModI* instr) { |
Label done; |
if (CpuFeatures::IsSupported(SUDIV)) { |
- CpuFeatures::Scope scope(SUDIV); |
+ CpuFeatureScope scope(masm(), SUDIV); |
// Check for x % 0. |
if (instr->hydrogen()->CheckFlag(HValue::kCanBeDivByZero)) { |
__ cmp(right, Operand::Zero()); |
@@ -1208,7 +1208,7 @@ void LCodeGen::DoModI(LModI* instr) { |
Label vfp_modulo, both_positive, right_negative; |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
// Check for x % 0. |
if (instr->hydrogen()->CheckFlag(HValue::kCanBeDivByZero)) { |
@@ -1567,7 +1567,7 @@ void LCodeGen::DoMathFloorOfDiv(LMathFloorOfDiv* instr) { |
__ teq(remainder, Operand(divisor), ne); |
__ sub(result, result, Operand(1), LeaveCC, mi); |
} else { |
- CpuFeatures::Scope scope(SUDIV); |
+ CpuFeatureScope scope(masm(), SUDIV); |
const Register right = ToRegister(instr->right()); |
// Check for x / 0. |
@@ -1614,7 +1614,7 @@ void LCodeGen::DoDeferredBinaryOpStub(LPointerMap* pointer_map, |
LOperand* left_argument, |
LOperand* right_argument, |
Token::Value op) { |
- CpuFeatures::Scope vfp_scope(VFP2); |
+ CpuFeatureScope vfp_scope(masm(), VFP2); |
Register left = ToRegister(left_argument); |
Register right = ToRegister(right_argument); |
@@ -1900,7 +1900,7 @@ void LCodeGen::DoConstantI(LConstantI* instr) { |
void LCodeGen::DoConstantD(LConstantD* instr) { |
ASSERT(instr->result()->IsDoubleRegister()); |
DwVfpRegister result = ToDoubleRegister(instr->result()); |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
double v = instr->value(); |
__ Vmov(result, v, scratch0()); |
} |
@@ -2078,7 +2078,7 @@ void LCodeGen::DoMathMinMax(LMathMinMax* instr) { |
__ mov(result_reg, right_op, LeaveCC, NegateCondition(condition)); |
} else { |
ASSERT(instr->hydrogen()->representation().IsDouble()); |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister left_reg = ToDoubleRegister(left); |
DwVfpRegister right_reg = ToDoubleRegister(right); |
DwVfpRegister result_reg = ToDoubleRegister(instr->result()); |
@@ -2124,7 +2124,7 @@ void LCodeGen::DoMathMinMax(LMathMinMax* instr) { |
void LCodeGen::DoArithmeticD(LArithmeticD* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister left = ToDoubleRegister(instr->left()); |
DwVfpRegister right = ToDoubleRegister(instr->right()); |
DwVfpRegister result = ToDoubleRegister(instr->result()); |
@@ -2215,7 +2215,7 @@ void LCodeGen::DoBranch(LBranch* instr) { |
__ cmp(reg, Operand::Zero()); |
EmitBranch(true_block, false_block, ne); |
} else if (r.IsDouble()) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister reg = ToDoubleRegister(instr->value()); |
Register scratch = scratch0(); |
@@ -2301,7 +2301,7 @@ void LCodeGen::DoBranch(LBranch* instr) { |
} |
if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
// heap number -> false iff +0, -0, or NaN. |
DwVfpRegister dbl_scratch = double_scratch0(); |
Label not_heap_number; |
@@ -2381,7 +2381,7 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) { |
EmitGoto(next_block); |
} else { |
if (instr->is_double()) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
// Compare left and right operands as doubles and load the |
// resulting flags into the normal status register. |
__ VFPCompareAndSetFlags(ToDoubleRegister(left), ToDoubleRegister(right)); |
@@ -2937,7 +2937,7 @@ void LCodeGen::DoReturn(LReturn* instr) { |
__ CallRuntime(Runtime::kTraceExit, 1); |
} |
if (info()->saves_caller_doubles() && CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
ASSERT(NeedsEagerFrame()); |
BitVector* doubles = chunk()->allocated_double_registers(); |
BitVector::Iterator save_iterator(doubles); |
@@ -3312,7 +3312,7 @@ void LCodeGen::DoLoadKeyedExternalArray(LLoadKeyed* instr) { |
: Operand(key, LSL, shift_size); |
__ add(scratch0(), external_pointer, operand); |
if (CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) { |
__ vldr(kScratchDoubleReg.low(), scratch0(), additional_offset); |
__ vcvt_f64_f32(result, kScratchDoubleReg.low()); |
@@ -3437,7 +3437,7 @@ void LCodeGen::DoLoadKeyedFixedDoubleArray(LLoadKeyed* instr) { |
__ add(elements, elements, Operand(key, LSL, shift_size)); |
} |
if (CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
__ add(elements, elements, Operand(base_offset)); |
__ vldr(result, elements, 0); |
if (instr->hydrogen()->RequiresHoleCheck()) { |
@@ -3894,7 +3894,7 @@ void LCodeGen::EmitIntegerMathAbs(LUnaryMathOperation* instr) { |
void LCodeGen::DoMathAbs(LUnaryMathOperation* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
// Class for deferred case. |
class DeferredMathAbsTaggedHeapNumber: public LDeferredCode { |
public: |
@@ -3931,7 +3931,7 @@ void LCodeGen::DoMathAbs(LUnaryMathOperation* instr) { |
void LCodeGen::DoMathFloor(LUnaryMathOperation* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister input = ToDoubleRegister(instr->value()); |
Register result = ToRegister(instr->result()); |
Register scratch = scratch0(); |
@@ -3957,7 +3957,7 @@ void LCodeGen::DoMathFloor(LUnaryMathOperation* instr) { |
void LCodeGen::DoMathRound(LUnaryMathOperation* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister input = ToDoubleRegister(instr->value()); |
Register result = ToRegister(instr->result()); |
DwVfpRegister double_scratch1 = ToDoubleRegister(instr->temp()); |
@@ -4023,7 +4023,7 @@ void LCodeGen::DoMathRound(LUnaryMathOperation* instr) { |
void LCodeGen::DoMathSqrt(LUnaryMathOperation* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister input = ToDoubleRegister(instr->value()); |
DwVfpRegister result = ToDoubleRegister(instr->result()); |
__ vsqrt(result, input); |
@@ -4031,7 +4031,7 @@ void LCodeGen::DoMathSqrt(LUnaryMathOperation* instr) { |
void LCodeGen::DoMathPowHalf(LUnaryMathOperation* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister input = ToDoubleRegister(instr->value()); |
DwVfpRegister result = ToDoubleRegister(instr->result()); |
DwVfpRegister temp = ToDoubleRegister(instr->temp()); |
@@ -4053,7 +4053,7 @@ void LCodeGen::DoMathPowHalf(LUnaryMathOperation* instr) { |
void LCodeGen::DoPower(LPower* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
Representation exponent_type = instr->hydrogen()->right()->representation(); |
// Having marked this as a call, we can use any registers. |
// Just make sure that the input/output registers are the expected ones. |
@@ -4086,7 +4086,7 @@ void LCodeGen::DoPower(LPower* instr) { |
void LCodeGen::DoRandom(LRandom* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
class DeferredDoRandom: public LDeferredCode { |
public: |
DeferredDoRandom(LCodeGen* codegen, LRandom* instr) |
@@ -4165,7 +4165,7 @@ void LCodeGen::DoDeferredRandom(LRandom* instr) { |
void LCodeGen::DoMathExp(LMathExp* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister input = ToDoubleRegister(instr->value()); |
DwVfpRegister result = ToDoubleRegister(instr->result()); |
DwVfpRegister double_scratch1 = ToDoubleRegister(instr->double_temp()); |
@@ -4456,7 +4456,7 @@ void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { |
void LCodeGen::DoStoreKeyedExternalArray(LStoreKeyed* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
Register external_pointer = ToRegister(instr->elements()); |
Register key = no_reg; |
ElementsKind elements_kind = instr->elements_kind(); |
@@ -4477,7 +4477,7 @@ void LCodeGen::DoStoreKeyedExternalArray(LStoreKeyed* instr) { |
if (elements_kind == EXTERNAL_FLOAT_ELEMENTS || |
elements_kind == EXTERNAL_DOUBLE_ELEMENTS) { |
- CpuFeatures::Scope scope(VFP3); |
+ CpuFeatureScope scope(masm(), VFP3); |
DwVfpRegister value(ToDoubleRegister(instr->value())); |
Operand operand(key_is_constant |
? Operand(constant_key << element_size_shift) |
@@ -4527,7 +4527,7 @@ void LCodeGen::DoStoreKeyedExternalArray(LStoreKeyed* instr) { |
void LCodeGen::DoStoreKeyedFixedDoubleArray(LStoreKeyed* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister value = ToDoubleRegister(instr->value()); |
Register elements = ToRegister(instr->elements()); |
Register key = no_reg; |
@@ -4828,7 +4828,7 @@ void LCodeGen::DoStringLength(LStringLength* instr) { |
void LCodeGen::DoInteger32ToDouble(LInteger32ToDouble* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
LOperand* input = instr->value(); |
ASSERT(input->IsRegister() || input->IsStackSlot()); |
LOperand* output = instr->result(); |
@@ -4846,7 +4846,7 @@ void LCodeGen::DoInteger32ToDouble(LInteger32ToDouble* instr) { |
void LCodeGen::DoUint32ToDouble(LUint32ToDouble* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
LOperand* input = instr->value(); |
LOperand* output = instr->result(); |
@@ -4966,7 +4966,7 @@ void LCodeGen::DoDeferredNumberTagI(LInstruction* instr, |
__ eor(src, src, Operand(0x80000000)); |
} |
if (CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
__ vmov(flt_scratch, src); |
__ vcvt_f64_s32(dbl_scratch, flt_scratch); |
} else { |
@@ -4978,7 +4978,7 @@ void LCodeGen::DoDeferredNumberTagI(LInstruction* instr, |
} |
} else { |
if (CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
__ vmov(flt_scratch, src); |
__ vcvt_f64_u32(dbl_scratch, flt_scratch); |
} else { |
@@ -5019,7 +5019,7 @@ void LCodeGen::DoDeferredNumberTagI(LInstruction* instr, |
// number. |
__ bind(&done); |
if (CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
__ vstr(dbl_scratch, dst, HeapNumber::kValueOffset); |
} else { |
__ str(sfpd_lo, MemOperand(dst, HeapNumber::kMantissaOffset)); |
@@ -5058,7 +5058,7 @@ void LCodeGen::DoNumberTagD(LNumberTagD* instr) { |
Label done; |
if (convert_hole) { |
if (CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
DwVfpRegister input_reg = ToDoubleRegister(instr->value()); |
__ VFPCompareAndSetFlags(input_reg, input_reg); |
__ b(vc, &no_special_nan_handling); |
@@ -5110,7 +5110,7 @@ void LCodeGen::DoNumberTagD(LNumberTagD* instr) { |
} |
__ bind(deferred->exit()); |
if (CpuFeatures::IsSupported(VFP2)) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
__ vstr(input_reg, reg, HeapNumber::kValueOffset); |
} else { |
__ str(sfpd_lo, MemOperand(reg, HeapNumber::kValueOffset)); |
@@ -5165,7 +5165,7 @@ void LCodeGen::EmitNumberUntagD(Register input_reg, |
Register scratch = scratch0(); |
SwVfpRegister flt_scratch = double_scratch0().low(); |
ASSERT(!result_reg.is(double_scratch0())); |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
Label load_smi, heap_number, done; |
@@ -5254,7 +5254,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) { |
__ cmp(scratch1, Operand(ip)); |
if (instr->truncating()) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
Register scratch3 = ToRegister(instr->temp2()); |
ASSERT(!scratch3.is(input_reg) && |
!scratch3.is(scratch1) && |
@@ -5283,7 +5283,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) { |
scratch3); |
} else { |
- CpuFeatures::Scope scope(VFP3); |
+ CpuFeatureScope scope(masm(), VFP3); |
// Deoptimize if we don't have a heap number. |
DeoptimizeIf(ne, instr->environment()); |
@@ -5511,7 +5511,7 @@ void LCodeGen::DoCheckMaps(LCheckMaps* instr) { |
void LCodeGen::DoClampDToUint8(LClampDToUint8* instr) { |
- CpuFeatures::Scope vfp_scope(VFP2); |
+ CpuFeatureScope vfp_scope(masm(), VFP2); |
DwVfpRegister value_reg = ToDoubleRegister(instr->unclamped()); |
Register result_reg = ToRegister(instr->result()); |
DwVfpRegister temp_reg = ToDoubleRegister(instr->temp()); |
@@ -5520,7 +5520,7 @@ void LCodeGen::DoClampDToUint8(LClampDToUint8* instr) { |
void LCodeGen::DoClampIToUint8(LClampIToUint8* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
Register unclamped_reg = ToRegister(instr->unclamped()); |
Register result_reg = ToRegister(instr->result()); |
__ ClampUint8(result_reg, unclamped_reg); |
@@ -5528,7 +5528,7 @@ void LCodeGen::DoClampIToUint8(LClampIToUint8* instr) { |
void LCodeGen::DoClampTToUint8(LClampTToUint8* instr) { |
- CpuFeatures::Scope scope(VFP2); |
+ CpuFeatureScope scope(masm(), VFP2); |
Register scratch = scratch0(); |
Register input_reg = ToRegister(instr->unclamped()); |
Register result_reg = ToRegister(instr->result()); |