| Index: src/crankshaft/x64/lithium-codegen-x64.cc
|
| diff --git a/src/crankshaft/x64/lithium-codegen-x64.cc b/src/crankshaft/x64/lithium-codegen-x64.cc
|
| index 923eda163982e0a1708da018bc11ed82535a18e0..52cf25175fe3ff44ceb77524371468999655bdea 100644
|
| --- a/src/crankshaft/x64/lithium-codegen-x64.cc
|
| +++ b/src/crankshaft/x64/lithium-codegen-x64.cc
|
| @@ -4594,34 +4594,17 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr, Label* done) {
|
| Register input_reg = ToRegister(instr->value());
|
|
|
| if (instr->truncating()) {
|
| - Label no_heap_number, check_bools, check_false;
|
| -
|
| - // Heap number map check.
|
| - __ CompareRoot(FieldOperand(input_reg, HeapObject::kMapOffset),
|
| - Heap::kHeapNumberMapRootIndex);
|
| - __ j(not_equal, &no_heap_number, Label::kNear);
|
| + Register input_map_reg = kScratchRegister;
|
| + Label truncate;
|
| + Label::Distance truncate_distance =
|
| + DeoptEveryNTimes() ? Label::kFar : Label::kNear;
|
| + __ movp(input_map_reg, FieldOperand(input_reg, HeapObject::kMapOffset));
|
| + __ JumpIfRoot(input_map_reg, Heap::kHeapNumberMapRootIndex, &truncate,
|
| + truncate_distance);
|
| + __ CmpInstanceType(input_map_reg, ODDBALL_TYPE);
|
| + DeoptimizeIf(not_equal, instr, DeoptimizeReason::kNotANumberOrOddball);
|
| + __ bind(&truncate);
|
| __ TruncateHeapNumberToI(input_reg, input_reg);
|
| - __ jmp(done);
|
| -
|
| - __ bind(&no_heap_number);
|
| - // Check for Oddballs. Undefined/False is converted to zero and True to one
|
| - // for truncating conversions.
|
| - __ CompareRoot(input_reg, Heap::kUndefinedValueRootIndex);
|
| - __ j(not_equal, &check_bools, Label::kNear);
|
| - __ Set(input_reg, 0);
|
| - __ jmp(done);
|
| -
|
| - __ bind(&check_bools);
|
| - __ CompareRoot(input_reg, Heap::kTrueValueRootIndex);
|
| - __ j(not_equal, &check_false, Label::kNear);
|
| - __ Set(input_reg, 1);
|
| - __ jmp(done);
|
| -
|
| - __ bind(&check_false);
|
| - __ CompareRoot(input_reg, Heap::kFalseValueRootIndex);
|
| - DeoptimizeIf(not_equal, instr,
|
| - DeoptimizeReason::kNotAHeapNumberUndefinedBoolean);
|
| - __ Set(input_reg, 0);
|
| } else {
|
| XMMRegister scratch = ToDoubleRegister(instr->temp());
|
| DCHECK(!scratch.is(double_scratch0()));
|
|
|