| Index: src/arm/code-stubs-arm.cc
|
| diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
|
| index 2326db9c7ba1b12f686186d11d64e8eecbe7b828..7c8e9e351e027d2da31061b6ef759479abd7a3d9 100644
|
| --- a/src/arm/code-stubs-arm.cc
|
| +++ b/src/arm/code-stubs-arm.cc
|
| @@ -3323,23 +3323,23 @@ void TranscendentalCacheStub::Generate(MacroAssembler* masm) {
|
| ExternalReference(RuntimeFunction(), masm->isolate());
|
| __ TailCallExternalReference(runtime_function, 1, 1);
|
| } else {
|
| - if (!CpuFeatures::IsSupported(VFP3)) UNREACHABLE();
|
| + ASSERT(CpuFeatures::IsSupported(VFP3));
|
| CpuFeatures::Scope scope(VFP3);
|
|
|
| Label no_update;
|
| Label skip_cache;
|
|
|
| // Call C function to calculate the result and update the cache.
|
| - // Register r0 holds precalculated cache entry address; preserve
|
| - // it on the stack and pop it into register cache_entry after the
|
| - // call.
|
| - __ push(cache_entry);
|
| + // r0: precalculated cache entry address.
|
| + // r2 and r3: parts of the double value.
|
| + // Store r0, r2 and r3 on stack for later before calling C function.
|
| + __ Push(r3, r2, cache_entry);
|
| GenerateCallCFunction(masm, scratch0);
|
| __ GetCFunctionDoubleResult(d2);
|
|
|
| // Try to update the cache. If we cannot allocate a
|
| // heap number, we return the result without updating.
|
| - __ pop(cache_entry);
|
| + __ Pop(r3, r2, cache_entry);
|
| __ LoadRoot(r5, Heap::kHeapNumberMapRootIndex);
|
| __ AllocateHeapNumber(r6, scratch0, scratch1, r5, &no_update);
|
| __ vstr(d2, FieldMemOperand(r6, HeapNumber::kValueOffset));
|
|
|