Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / context / src / asm / jump_ppc64_sysv_xcoff_gas.S
1 .align 2
2 .globl .jump_fcontext
3 .jump_fcontext:
4     # reserve space on stack
5     subi  1, 1, 328
6
7     std  13, 152(1)  # save R13
8     std  14, 160(1)  # save R14
9     std  15, 168(1)  # save R15
10     std  16, 176(1)  # save R16
11     std  17, 184(1)  # save R17
12     std  18, 192(1)  # save R18
13     std  19, 200(1)  # save R19
14     std  20, 208(1)  # save R20
15     std  21, 216(1)  # save R21
16     std  22, 224(1)  # save R22
17     std  23, 232(1)  # save R23
18     std  24, 240(1)  # save R24
19     std  25, 248(1)  # save R25
20     std  26, 256(1)  # save R26
21     std  27, 264(1)  # save R27
22     std  28, 272(1)  # save R28
23     std  29, 280(1)  # save R29
24     std  30, 288(1)  # save R30
25     std  31, 296(1)  # save R31
26
27     # save CR
28     mfcr  0
29     std  0, 304(1)
30     # save LR
31     mflr  0
32     std  0, 312(1)
33     # save LR as PC
34     std  0, 320(1)
35
36     # test if fpu env should be preserved
37     cmpwi  7, 6, 0
38     beq  7, label1
39
40     stfd  14, 0(1)  # save F14
41     stfd  15, 8(1)  # save F15
42     stfd  16, 16(1)  # save F16
43     stfd  17, 24(1)  # save F17
44     stfd  18, 32(1)  # save F18
45     stfd  19, 40(1)  # save F19
46     stfd  20, 48(1)  # save F20
47     stfd  21, 56(1)  # save F21
48     stfd  22, 64(1)  # save F22
49     stfd  23, 72(1)  # save F23
50     stfd  24, 80(1)  # save F24
51     stfd  25, 88(1)  # save F25
52     stfd  26, 96(1)  # save F26
53     stfd  27, 104(1)  # save F27
54     stfd  28, 112(1)  # save F28
55     stfd  29, 120(1)  # save F29
56     stfd  30, 128(1)  # save F30
57     stfd  31, 136(1)  # save F31
58     mffs  0  # load FPSCR
59     stfd  0, 144(1)  # save FPSCR
60
61 label1:
62     # store RSP (pointing to context-data) in R3
63     stw  1, 0(3)
64
65     # restore RSP (pointing to context-data) from R4
66     mr  1, 4
67
68     # test if fpu env should be preserved
69     cmpwi  7, 6, 0
70     beq  7, label2
71
72     lfd  14, 0(1)  # restore F14
73     lfd  15, 8(1)  # restore F15
74     lfd  16, 16(1)  # restore F16
75     lfd  17, 24(1)  # restore F17
76     lfd  18, 32(1)  # restore F18
77     lfd  19, 40(1)  # restore F19
78     lfd  20, 48(1)  # restore F20
79     lfd  21, 56(1)  # restore F21
80     lfd  22, 64(1)  # restore F22
81     lfd  23, 72(1)  # restore F23
82     lfd  24, 80(1)  # restore F24
83     lfd  25, 88(1)  # restore F25
84     lfd  26, 96(1)  # restore F26
85     lfd  27, 104(1)  # restore F27
86     lfd  28, 112(1)  # restore F28
87     lfd  29, 120(1)  # restore F29
88     lfd  30, 128(1)  # restore F30
89     lfd  31, 136(1)  # restore F31
90     lfd  0,  144(1)  # load FPSCR
91     mtfsf  0xff, 0  # restore FPSCR
92
93 label2:
94     ld  13, 152(1)  # restore R13
95     ld  14, 160(1)  # restore R14
96     ld  15, 168(1)  # restore R15
97     ld  16, 176(1)  # restore R16
98     ld  17, 184(1)  # restore R17
99     ld  18, 192(1)  # restore R18
100     ld  19, 200(1)  # restore R19
101     ld  20, 208(1)  # restore R20
102     ld  21, 216(1)  # restore R21
103     ld  22, 224(1)  # restore R22
104     ld  23, 232(1)  # restore R23
105     ld  24, 240(1)  # restore R24
106     ld  25, 248(1)  # restore R25
107     ld  26, 256(1)  # restore R26
108     ld  27, 264(1)  # restore R27
109     ld  28, 272(1)  # restore R28
110     ld  29, 280(1)  # restore R29
111     ld  30, 288(1)  # restore R30
112     ld  31, 296(1)  # restore R31
113
114     # restore CR
115     ld  0, 304(1)
116     mtcr  0
117     # restore LR
118     ld  0, 312(1)
119     mtlr  0
120
121     # load PC
122     ld  0, 320(1)
123     # restore CTR
124     mtctr  0
125
126     # adjust stack
127     addi  1, 1, 328
128
129     # use third arg as return value after jump
130     # use third arg as first arg in context function
131     mr  3, 5
132
133     # jump to context
134     bctr