Index: src/x64/code-stubs-x64.cc |
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc |
index f8c9506f4e76b0a859c034b76dc5973930b08037..00c5367a10d8bdbb9cbe44c4847330a1d4b3a418 100644 |
--- a/src/x64/code-stubs-x64.cc |
+++ b/src/x64/code-stubs-x64.cc |
@@ -1154,7 +1154,14 @@ void TranscendentalCacheStub::Generate(MacroAssembler* masm) { |
__ jmp(&loaded, Label::kNear); |
__ bind(&input_not_smi); |
- __ TaggedToI(rbx, rax, xmm1, TREAT_MINUS_ZERO_AS_ZERO, &runtime_call); |
+ // Check if input is a HeapNumber. |
+ __ LoadRoot(rbx, Heap::kHeapNumberMapRootIndex); |
+ __ cmpq(rbx, FieldOperand(rax, HeapObject::kMapOffset)); |
+ __ j(not_equal, &runtime_call); |
+ // Input is a HeapNumber. Push it on the FPU stack and load its |
+ // bits into rbx. |
+ __ fld_d(FieldOperand(rax, HeapNumber::kValueOffset)); |
+ __ movq(rbx, FieldOperand(rax, HeapNumber::kValueOffset)); |
__ movq(rdx, rbx); |
__ bind(&loaded); |