| Index: src/arm/code-stubs-arm.cc
|
| diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
|
| index 169a032fb030c242448f4d491174348cc892a5ad..418f283f474f396ec01d4988b00f67dad641a8c7 100644
|
| --- a/src/arm/code-stubs-arm.cc
|
| +++ b/src/arm/code-stubs-arm.cc
|
| @@ -3403,23 +3403,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));
|
|
|