]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/context/src/asm/jump_riscv64_sysv_elf_gas.S
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / context / src / asm / jump_riscv64_sysv_elf_gas.S
1 /*
2 Distributed under the Boost Software License, Version 1.0.
3 (See accompanying file LICENSE_1_0.txt or copy at
4 http://www.boost.org/LICENSE_1_0.txt)
5 */
6 /*******************************************************
7 * *
8 * ------------------------------------------------- *
9 * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
10 * ------------------------------------------------- *
11 * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
12 * ------------------------------------------------- *
13 * | fs0 | fs1 | fs2 | fs3 | *
14 * ------------------------------------------------- *
15 * ------------------------------------------------- *
16 * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
17 * ------------------------------------------------- *
18 * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
19 * ------------------------------------------------- *
20 * | fs4 | fs5 | fs6 | fs7 | *
21 * ------------------------------------------------- *
22 * ------------------------------------------------- *
23 * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
24 * ------------------------------------------------- *
25 * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
26 * ------------------------------------------------- *
27 * | fs8 | fs9 | fs10 | fs11 | *
28 * ------------------------------------------------- *
29 * ------------------------------------------------- *
30 * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
31 * ------------------------------------------------- *
32 * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
33 * ------------------------------------------------- *
34 * | s0 | s1 | s2 | s3 | *
35 * ------------------------------------------------- *
36 * ------------------------------------------------- *
37 * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
38 * ------------------------------------------------- *
39 * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
40 * ------------------------------------------------- *
41 * | s4 | s5 | s6 | s7 | *
42 * ------------------------------------------------- *
43 * ------------------------------------------------- *
44 * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
45 * ------------------------------------------------- *
46 * | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| *
47 * ------------------------------------------------- *
48 * | s8 | s9 | s10 | s11 | *
49 * ------------------------------------------------- *
50 * ------------------------------------------------- *
51 * | 48 | 49 | 50 | 51 | | | | | *
52 * ------------------------------------------------- *
53 * | 0xc0| 0xc4| 0xc8| 0xcc| | | | | *
54 * ------------------------------------------------- *
55 * | ra | pc | | | *
56 * ------------------------------------------------- *
57 * *
58 *******************************************************/
59
60 .file "jump_riscv64_sysv_elf_gas.S"
61 .text
62 .align 1
63 .global jump_fcontext
64 .type jump_fcontext, %function
65 jump_fcontext:
66 # prepare stack for GP + FPU
67 addi sp, sp, -0xd0
68
69 # save fs0 - fs11
70 fsd fs0, 0x00(sp)
71 fsd fs1, 0x08(sp)
72 fsd fs2, 0x10(sp)
73 fsd fs3, 0x18(sp)
74 fsd fs4, 0x20(sp)
75 fsd fs5, 0x28(sp)
76 fsd fs6, 0x30(sp)
77 fsd fs7, 0x38(sp)
78 fsd fs8, 0x40(sp)
79 fsd fs9, 0x48(sp)
80 fsd fs10, 0x50(sp)
81 fsd fs11, 0x58(sp)
82
83 # save s0-s11, ra
84 sd s0, 0x60(sp)
85 sd s1, 0x68(sp)
86 sd s2, 0x70(sp)
87 sd s3, 0x78(sp)
88 sd s4, 0x80(sp)
89 sd s5, 0x88(sp)
90 sd s6, 0x90(sp)
91 sd s7, 0x98(sp)
92 sd s8, 0xa0(sp)
93 sd s9, 0xa8(sp)
94 sd s10, 0xb0(sp)
95 sd s11, 0xb8(sp)
96 sd ra, 0xc0(sp)
97
98 # save RA as PC
99 sd ra, 0xc8(sp)
100
101 # store SP (pointing to context-data) in A2
102 mv a2, sp
103
104 # restore SP (pointing to context-data) from A0
105 mv sp, a0
106
107 # load fs0 - fs11
108 fld fs0, 0x00(sp)
109 fld fs1, 0x08(sp)
110 fld fs2, 0x10(sp)
111 fld fs3, 0x18(sp)
112 fld fs4, 0x20(sp)
113 fld fs5, 0x28(sp)
114 fld fs6, 0x30(sp)
115 fld fs7, 0x38(sp)
116 fld fs8, 0x40(sp)
117 fld fs9, 0x48(sp)
118 fld fs10, 0x50(sp)
119 fld fs11, 0x58(sp)
120
121 # load s0-s11,ra
122 ld s0, 0x60(sp)
123 ld s1, 0x68(sp)
124 ld s2, 0x70(sp)
125 ld s3, 0x78(sp)
126 ld s4, 0x80(sp)
127 ld s5, 0x88(sp)
128 ld s6, 0x90(sp)
129 ld s7, 0x98(sp)
130 ld s8, 0xa0(sp)
131 ld s9, 0xa8(sp)
132 ld s10, 0xb0(sp)
133 ld s11, 0xb8(sp)
134 ld ra, 0xc0(sp)
135
136 # return transfer_t from jump
137 # pass transfer_t as first arg in context function
138 # a0 == FCTX, a1 == DATA
139 mv a0, a2
140
141 # load pc
142 ld a2, 0xc8(sp)
143
144 # restore stack from GP + FPU
145 addi sp, sp, 0xd0
146
147 jr a2
148 .size jump_fcontext,.-jump_fcontext
149 # Mark that we don't need executable stack.
150 .section .note.GNU-stack,"",%progbits