diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-11-13 23:28:54 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-11-13 23:28:54 +0000 |
commit | 28f312949e27e6e218ba25d8ca07ed58a96a4bd1 (patch) | |
tree | dbdc8b205af969519480aae983949a27b8652925 | |
parent | d23e0f81bc76902052e9198cad3a0d87a412a632 (diff) |
Lazy compilation callback save / restore VFP registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59274 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/ARM/ARMJITInfo.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMJITInfo.cpp b/lib/Target/ARM/ARMJITInfo.cpp index 6dfd5fa81d..7ddcef975e 100644 --- a/lib/Target/ARM/ARMJITInfo.cpp +++ b/lib/Target/ARM/ARMJITInfo.cpp @@ -60,6 +60,9 @@ extern "C" { // whole compilation callback doesn't exist as far as the caller is // concerned, so we can't just preserve the callee saved regs. "stmdb sp!, {r0, r1, r2, r3, lr}\n" +#ifdef __APPLE__ + "fstmfdd sp!, {d0, d1, d2, d3, d4, d5, d6, d7}\n" +#endif // The LR contains the address of the stub function on entry. // pass it as the argument to the C part of the callback "mov r0, lr\n" @@ -77,8 +80,14 @@ extern "C" { // +--------+ // 1 | LR | Stub address (start of stub) // 2-5 | R3..R0 | Saved registers (we need to preserve all regs) + // 6-20 | D0..D7 | Saved VFP registers // +--------+ // +#ifdef __APPLE__ + // Restore VFP caller-saved registers. + "fldmfdd sp!, {d0, d1, d2, d3, d4, d5, d6, d7}\n" +#endif + // // We need to exchange the values in slots 0 and 1 so we can // return to the address in slot 1 with the address in slot 0 // restored to the LR. |