blob: 95032897c0daf0b2109e50d3f5950eb97614315b [file] [log] [blame]
Daniel Dunbar805c4942009-10-27 17:49:19 +00001//===-- restFP.S - Implement restFP ---------------------------------------===//
Daniel Dunbarfd089992009-06-26 16:47:03 +00002//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnant5b791f62010-11-16 22:13:33 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Daniel Dunbarfd089992009-06-26 16:47:03 +00007//
8//===----------------------------------------------------------------------===//
9
Daniel Dunbar7d504782009-10-27 17:49:50 +000010#include "../assembly.h"
Daniel Dunbarfd089992009-06-26 16:47:03 +000011
12//
13// Helper function used by compiler to restore ppc floating point registers at
14// the end of the function epilog. This function returns to the address
15// in the LR slot. So a function epilog must branch (b) not branch and link
16// (bl) to this function.
17// If the compiler wants to restore f27..f31, it does a "b restFP+52"
18//
19// This function should never be exported by a shared library. Each linkage
20// unit carries its own copy of this function.
21//
Daniel Dunbaref898582010-01-18 22:19:20 +000022DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(restFP)
Nick Kledzik64eecd22010-01-13 05:30:28 +000023 lfd f14,-144(r1)
24 lfd f15,-136(r1)
25 lfd f16,-128(r1)
26 lfd f17,-120(r1)
27 lfd f18,-112(r1)
28 lfd f19,-104(r1)
29 lfd f20,-96(r1)
30 lfd f21,-88(r1)
31 lfd f22,-80(r1)
32 lfd f23,-72(r1)
33 lfd f24,-64(r1)
34 lfd f25,-56(r1)
35 lfd f26,-48(r1)
36 lfd f27,-40(r1)
37 lfd f28,-32(r1)
38 lfd f29,-24(r1)
39 lfd f30,-16(r1)
40 lfd f31,-8(r1)
Daniel Dunbarfd089992009-06-26 16:47:03 +000041 lwz r0,8(r1)
Daniel Dunbaref898582010-01-18 22:19:20 +000042 mtlr r0
Daniel Dunbarfd089992009-06-26 16:47:03 +000043 blr