OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 3392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3403 ExternalReference(RuntimeFunction(), masm->isolate()); | 3403 ExternalReference(RuntimeFunction(), masm->isolate()); |
3404 __ TailCallExternalReference(runtime_function, 1, 1); | 3404 __ TailCallExternalReference(runtime_function, 1, 1); |
3405 } else { | 3405 } else { |
3406 if (!CpuFeatures::IsSupported(VFP3)) UNREACHABLE(); | 3406 if (!CpuFeatures::IsSupported(VFP3)) UNREACHABLE(); |
3407 CpuFeatures::Scope scope(VFP3); | 3407 CpuFeatures::Scope scope(VFP3); |
3408 | 3408 |
3409 Label no_update; | 3409 Label no_update; |
3410 Label skip_cache; | 3410 Label skip_cache; |
3411 | 3411 |
3412 // Call C function to calculate the result and update the cache. | 3412 // Call C function to calculate the result and update the cache. |
3413 // Register r0 holds precalculated cache entry address; preserve | 3413 // r0: precalculated cache entry address. |
3414 // it on the stack and pop it into register cache_entry after the | 3414 // r2 and r3: parts of the double value. |
3415 // call. | 3415 // Store r0, r2 and r3 on stack for later before calling C function. |
3416 __ push(cache_entry); | 3416 __ stm(db_w, sp, cache_entry.bit() | r2.bit() | r3.bit()); |
Jakob Kummerow
2012/07/16 09:24:09
Let's use "__ Push(cache_entry, r2, r3)" instead.
| |
3417 GenerateCallCFunction(masm, scratch0); | 3417 GenerateCallCFunction(masm, scratch0); |
3418 __ GetCFunctionDoubleResult(d2); | 3418 __ GetCFunctionDoubleResult(d2); |
3419 | 3419 |
3420 // Try to update the cache. If we cannot allocate a | 3420 // Try to update the cache. If we cannot allocate a |
3421 // heap number, we return the result without updating. | 3421 // heap number, we return the result without updating. |
3422 __ pop(cache_entry); | 3422 __ ldm(ia_w, sp, cache_entry.bit() | r2.bit() | r3.bit()); |
Jakob Kummerow
2012/07/16 09:24:09
...and __ Pop(...) here.
| |
3423 __ LoadRoot(r5, Heap::kHeapNumberMapRootIndex); | 3423 __ LoadRoot(r5, Heap::kHeapNumberMapRootIndex); |
3424 __ AllocateHeapNumber(r6, scratch0, scratch1, r5, &no_update); | 3424 __ AllocateHeapNumber(r6, scratch0, scratch1, r5, &no_update); |
3425 __ vstr(d2, FieldMemOperand(r6, HeapNumber::kValueOffset)); | 3425 __ vstr(d2, FieldMemOperand(r6, HeapNumber::kValueOffset)); |
3426 __ stm(ia, cache_entry, r2.bit() | r3.bit() | r6.bit()); | 3426 __ stm(ia, cache_entry, r2.bit() | r3.bit() | r6.bit()); |
3427 __ Ret(); | 3427 __ Ret(); |
3428 | 3428 |
3429 __ bind(&invalid_cache); | 3429 __ bind(&invalid_cache); |
3430 // The cache is invalid. Call runtime which will recreate the | 3430 // The cache is invalid. Call runtime which will recreate the |
3431 // cache. | 3431 // cache. |
3432 __ LoadRoot(r5, Heap::kHeapNumberMapRootIndex); | 3432 __ LoadRoot(r5, Heap::kHeapNumberMapRootIndex); |
(...skipping 4078 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7511 __ StoreNumberToDoubleElements(r0, r3, r1, r5, r6, r7, r9, r2, | 7511 __ StoreNumberToDoubleElements(r0, r3, r1, r5, r6, r7, r9, r2, |
7512 &slow_elements); | 7512 &slow_elements); |
7513 __ Ret(); | 7513 __ Ret(); |
7514 } | 7514 } |
7515 | 7515 |
7516 #undef __ | 7516 #undef __ |
7517 | 7517 |
7518 } } // namespace v8::internal | 7518 } } // namespace v8::internal |
7519 | 7519 |
7520 #endif // V8_TARGET_ARCH_ARM | 7520 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |