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); |