]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/context/src/asm/make_ppc64_sysv_xcoff_gas.S
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / context / src / asm / make_ppc64_sysv_xcoff_gas.S
CommitLineData
92f5a8d4
TL
1/*
2 Copyright Oliver Kowalke 2009.
3 Distributed under the Boost Software License, Version 1.0.
4 (See accompanying file LICENSE_1_0.txt or copy at
5 http://www.boost.org/LICENSE_1_0.txt)
6*/
7c673cae
FG
7 .globl make_fcontext[DS]
8 .globl .make_fcontext[PR]
9 .align 2
10 .csect .make_fcontext[PR], 3
11 .globl _make_fcontext
12#._make_fcontext:
13 # save return address into R6
14 mflr 6
15
16 # first arg of make_fcontext() == top address of context-function
17 # shift address in R3 to lower 16 byte boundary
18 clrrwi 3, 3, 4
19
20 # reserve space for context-data on context-stack
21 # including 64 byte of linkage + parameter area (R1 % 16 == 0)
22 subi 3, 3, 248
23
24 # third arg of make_fcontext() == address of context-function
25 stw 5, 176(3)
26
27 # set back-chain to zero
28 li 0, 0
29 std 0, 184(3)
30
31 # compute address of returned transfer_t
32 addi 0, 3, 232
33 mr 4, 0
34 std 4, 152(3)
35
36 # load LR
37 mflr 0
38 # jump to label 1
39 bl .Label
40.Label:
41 # load LR into R4
42 mflr 4
43 # compute abs address of label .L_finish
44 addi 4, 4, .L_finish - .Label
45 # restore LR
46 mtlr 0
47 # save address of finish as return-address for context-function
48 # will be entered after context-function returns
49 stw 4, 168(3)
50
51 # restore return address from R6
52 mtlr 6
53
54 blr # return pointer to context-data
55
56.L_finish:
57 # save return address into R0
58 mflr 0
59 # save return address on stack, set up stack frame
60 stw 0, 8(1)
61 # allocate stack space, R1 % 16 == 0
62 stwu 1, -32(1)
63
64 # exit code is zero
65 li 3, 0
66 # exit application
67 bl ._exit
68 nop