| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index b6a8524be0fa6b4d60a87b292d25eadc814df8d1..cf5006f9b2b9a258b937faf869d3849103fd1eba 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -3928,7 +3928,7 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
|
| Label load_smi, heap_number, done;
|
|
|
| // Smi check.
|
| - __ JumpIfSmi(input_reg, &load_smi);
|
| + __ UntagAndJumpIfSmi(scratch, input_reg, &load_smi);
|
|
|
| // Heap number map check.
|
| __ ldr(scratch, FieldMemOperand(input_reg, HeapObject::kMapOffset));
|
| @@ -3967,10 +3967,9 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
|
|
|
| // Smi to double register conversion
|
| __ bind(&load_smi);
|
| - __ SmiUntag(input_reg); // Untag smi before converting to float.
|
| - __ vmov(flt_scratch, input_reg);
|
| + // scratch: untagged value of input_reg
|
| + __ vmov(flt_scratch, scratch);
|
| __ vcvt_f64_s32(result_reg, flt_scratch);
|
| - __ SmiTag(input_reg); // Retag smi.
|
| __ bind(&done);
|
| }
|
|
|
| @@ -4256,7 +4255,7 @@ void LCodeGen::DoClampTToUint8(LClampTToUint8* instr) {
|
| Label is_smi, done, heap_number;
|
|
|
| // Both smi and heap number cases are handled.
|
| - __ JumpIfSmi(input_reg, &is_smi);
|
| + __ UntagAndJumpIfSmi(result_reg, input_reg, &is_smi);
|
|
|
| // Check for heap number
|
| __ ldr(scratch, FieldMemOperand(input_reg, HeapObject::kMapOffset));
|
| @@ -4279,7 +4278,6 @@ void LCodeGen::DoClampTToUint8(LClampTToUint8* instr) {
|
|
|
| // smi
|
| __ bind(&is_smi);
|
| - __ SmiUntag(result_reg, input_reg);
|
| __ ClampUint8(result_reg, result_reg);
|
|
|
| __ bind(&done);
|
|
|