xref: /aosp_15_r20/external/swiftshader/third_party/marl/src/osfiber_asm_ppc64.h (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1 // Copyright 2019 The Marl Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #define MARL_REG_R1 0x00
16 #define MARL_REG_R2 0x08
17 #define MARL_REG_R13 0x10
18 #define MARL_REG_R14 0x18
19 #define MARL_REG_R15 0x20
20 #define MARL_REG_R16 0x28
21 #define MARL_REG_R17 0x30
22 #define MARL_REG_R18 0x38
23 #define MARL_REG_R19 0x40
24 #define MARL_REG_R20 0x48
25 #define MARL_REG_R21 0x50
26 #define MARL_REG_R22 0x58
27 #define MARL_REG_R23 0x60
28 #define MARL_REG_R24 0x68
29 #define MARL_REG_R25 0x70
30 #define MARL_REG_R26 0x78
31 #define MARL_REG_R27 0x80
32 #define MARL_REG_R28 0x88
33 #define MARL_REG_R29 0x90
34 #define MARL_REG_R30 0x98
35 #define MARL_REG_R31 0xa0
36 
37 #define MARL_REG_R3 0xa8
38 #define MARL_REG_R4 0xb0
39 
40 #define MARL_REG_LR 0xb8
41 #define MARL_REG_CCR 0xc0
42 
43 #define MARL_REG_FPR14 0xc8
44 #define MARL_REG_FPR15 0xd0
45 #define MARL_REG_FPR16 0xd8
46 #define MARL_REG_FPR17 0xe0
47 #define MARL_REG_FPR18 0xe8
48 #define MARL_REG_FPR19 0xf0
49 #define MARL_REG_FPR20 0xf8
50 #define MARL_REG_FPR21 0x100
51 #define MARL_REG_FPR22 0x108
52 #define MARL_REG_FPR23 0x110
53 #define MARL_REG_FPR24 0x118
54 #define MARL_REG_FPR25 0x120
55 #define MARL_REG_FPR26 0x128
56 #define MARL_REG_FPR27 0x130
57 #define MARL_REG_FPR28 0x138
58 #define MARL_REG_FPR29 0x140
59 #define MARL_REG_FPR30 0x148
60 #define MARL_REG_FPR31 0x150
61 
62 #define MARL_REG_VRSAVE 0x158
63 #define MARL_REG_VMX 0x160
64 
65 #ifndef MARL_BUILD_ASM
66 
67 #include <stdint.h>
68 
69 struct marl_fiber_context {
70   // non-volatile registers
71   uintptr_t r1;
72   uintptr_t r2;
73   uintptr_t r13;
74   uintptr_t r14;
75   uintptr_t r15;
76   uintptr_t r16;
77   uintptr_t r17;
78   uintptr_t r18;
79   uintptr_t r19;
80   uintptr_t r20;
81   uintptr_t r21;
82   uintptr_t r22;
83   uintptr_t r23;
84   uintptr_t r24;
85   uintptr_t r25;
86   uintptr_t r26;
87   uintptr_t r27;
88   uintptr_t r28;
89   uintptr_t r29;
90   uintptr_t r30;
91   uintptr_t r31;
92 
93   // first two parameter registers (r3, r4)
94   uintptr_t r3;
95   uintptr_t r4;
96 
97   // special registers
98   uintptr_t lr;
99   uintptr_t ccr;
100 
101   // non-volatile floating-point registers (f14-f31)
102   uintptr_t fpr14;
103   uintptr_t fpr15;
104   uintptr_t fpr16;
105   uintptr_t fpr17;
106   uintptr_t fpr18;
107   uintptr_t fpr19;
108   uintptr_t fpr20;
109   uintptr_t fpr21;
110   uintptr_t fpr22;
111   uintptr_t fpr23;
112   uintptr_t fpr24;
113   uintptr_t fpr25;
114   uintptr_t fpr26;
115   uintptr_t fpr27;
116   uintptr_t fpr28;
117   uintptr_t fpr29;
118   uintptr_t fpr30;
119   uintptr_t fpr31;
120 
121   // non-volatile altivec registers
122   uint32_t vrsave;
123   uintptr_t vmx[12 * 2];
124 };
125 
126 #ifdef __cplusplus
127 #include <cstddef>
128 static_assert(offsetof(marl_fiber_context, r1) == MARL_REG_R1,
129               "Bad register offset");
130 static_assert(offsetof(marl_fiber_context, r2) == MARL_REG_R2,
131               "Bad register offset");
132 static_assert(offsetof(marl_fiber_context, r13) == MARL_REG_R13,
133               "Bad register offset");
134 static_assert(offsetof(marl_fiber_context, r15) == MARL_REG_R15,
135               "Bad register offset");
136 static_assert(offsetof(marl_fiber_context, r16) == MARL_REG_R16,
137               "Bad register offset");
138 static_assert(offsetof(marl_fiber_context, r17) == MARL_REG_R17,
139               "Bad register offset");
140 static_assert(offsetof(marl_fiber_context, r18) == MARL_REG_R18,
141               "Bad register offset");
142 static_assert(offsetof(marl_fiber_context, r19) == MARL_REG_R19,
143               "Bad register offset");
144 static_assert(offsetof(marl_fiber_context, r20) == MARL_REG_R20,
145               "Bad register offset");
146 static_assert(offsetof(marl_fiber_context, r21) == MARL_REG_R21,
147               "Bad register offset");
148 static_assert(offsetof(marl_fiber_context, r22) == MARL_REG_R22,
149               "Bad register offset");
150 static_assert(offsetof(marl_fiber_context, r23) == MARL_REG_R23,
151               "Bad register offset");
152 static_assert(offsetof(marl_fiber_context, r24) == MARL_REG_R24,
153               "Bad register offset");
154 static_assert(offsetof(marl_fiber_context, r25) == MARL_REG_R25,
155               "Bad register offset");
156 static_assert(offsetof(marl_fiber_context, r26) == MARL_REG_R26,
157               "Bad register offset");
158 static_assert(offsetof(marl_fiber_context, r27) == MARL_REG_R27,
159               "Bad register offset");
160 static_assert(offsetof(marl_fiber_context, r28) == MARL_REG_R28,
161               "Bad register offset");
162 static_assert(offsetof(marl_fiber_context, r29) == MARL_REG_R29,
163               "Bad register offset");
164 static_assert(offsetof(marl_fiber_context, r30) == MARL_REG_R30,
165               "Bad register offset");
166 static_assert(offsetof(marl_fiber_context, r31) == MARL_REG_R31,
167               "Bad register offset");
168 static_assert(offsetof(marl_fiber_context, r14) == MARL_REG_R14,
169               "Bad register offset");
170 static_assert(offsetof(marl_fiber_context, lr) == MARL_REG_LR,
171               "Bad register offset");
172 static_assert(offsetof(marl_fiber_context, ccr) == MARL_REG_CCR,
173               "Bad register offset");
174 static_assert(offsetof(marl_fiber_context, fpr14) == MARL_REG_FPR14,
175               "Bad register offset");
176 static_assert(offsetof(marl_fiber_context, fpr15) == MARL_REG_FPR15,
177               "Bad register offset");
178 static_assert(offsetof(marl_fiber_context, fpr16) == MARL_REG_FPR16,
179               "Bad register offset");
180 static_assert(offsetof(marl_fiber_context, fpr17) == MARL_REG_FPR17,
181               "Bad register offset");
182 static_assert(offsetof(marl_fiber_context, fpr18) == MARL_REG_FPR18,
183               "Bad register offset");
184 static_assert(offsetof(marl_fiber_context, fpr19) == MARL_REG_FPR19,
185               "Bad register offset");
186 static_assert(offsetof(marl_fiber_context, fpr20) == MARL_REG_FPR20,
187               "Bad register offset");
188 static_assert(offsetof(marl_fiber_context, fpr21) == MARL_REG_FPR21,
189               "Bad register offset");
190 static_assert(offsetof(marl_fiber_context, fpr22) == MARL_REG_FPR22,
191               "Bad register offset");
192 static_assert(offsetof(marl_fiber_context, fpr23) == MARL_REG_FPR23,
193               "Bad register offset");
194 static_assert(offsetof(marl_fiber_context, fpr24) == MARL_REG_FPR24,
195               "Bad register offset");
196 static_assert(offsetof(marl_fiber_context, fpr25) == MARL_REG_FPR25,
197               "Bad register offset");
198 static_assert(offsetof(marl_fiber_context, fpr26) == MARL_REG_FPR26,
199               "Bad register offset");
200 static_assert(offsetof(marl_fiber_context, fpr27) == MARL_REG_FPR27,
201               "Bad register offset");
202 static_assert(offsetof(marl_fiber_context, fpr28) == MARL_REG_FPR28,
203               "Bad register offset");
204 static_assert(offsetof(marl_fiber_context, fpr29) == MARL_REG_FPR29,
205               "Bad register offset");
206 static_assert(offsetof(marl_fiber_context, fpr30) == MARL_REG_FPR30,
207               "Bad register offset");
208 static_assert(offsetof(marl_fiber_context, fpr31) == MARL_REG_FPR31,
209               "Bad register offset");
210 static_assert((offsetof(marl_fiber_context, vmx) % 16) == 0,
211               "VMX must be quadword aligned");
212 static_assert(offsetof(marl_fiber_context, vmx) == MARL_REG_VMX,
213               "Bad register offset");
214 static_assert(offsetof(marl_fiber_context, vrsave) == MARL_REG_VRSAVE,
215               "Bad register offset");
216 #endif  // __cplusplus
217 
218 #endif  // MARL_BUILD_ASM
219