Lazy compilation callback save / restore VFP registers.
authorEvan Cheng <evan.cheng@apple.com>
Thu, 13 Nov 2008 23:28:54 +0000 (23:28 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 13 Nov 2008 23:28:54 +0000 (23:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59274 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMJITInfo.cpp

index 6dfd5fa81d2a2bb006d6e4855ee65eda549b1a93..7ddcef975eb6e92d87074ac7905ed1d92405f037 100644 (file)
@@ -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.