1 .globl make_fcontext[DS]
2 .globl .make_fcontext[PR]
4 .csect .make_fcontext[PR], 3
7 # save return address into R6
10 # first arg of make_fcontext() == top address of context-function
11 # shift address in R3 to lower 16 byte boundary
14 # reserve space for context-data on context-stack
15 # including 64 byte of linkage + parameter area (R1 % 16 == 0)
18 # third arg of make_fcontext() == address of context-function
28 # compute abs address of label .L_finish
29 addi 4, 4, .L_finish - .Label
32 # save address of finish as return-address for context-function
33 # will be entered after context-function returns
36 # restore return address from R6
39 blr # return pointer to context-data
42 # save return address into R0
44 # save return address on stack, set up stack frame
46 # allocate stack space, R1 % 16 == 0