@@ -175,6 +175,110 @@ _D4core6thread18callWithStackShellFNbMDFNbPvZvZv:
175
175
176
176
#elif defined( __ppc__ ) || defined( __PPC__ ) || defined( __powerpc__ )
177
177
178
+ . section ".text"
179
+
180
+ / **
181
+ * callWithStackShell
182
+ *
183
+ * Called with:
184
+ * r3: pointer context
185
+ * r4: pointer to function
186
+ * /
187
+ . align 2
188
+ .globl _D4core6thread18callWithStackShellFNbMDFNbPvZvZv
189
+ .type _D4core6thread18callWithStackShellFNbMDFNbPvZvZv , @function
190
+ _D4core6thread18callWithStackShellFNbMDFNbPvZvZv:
191
+ mflr 0
192
+ stw 0 , 8 ( 1 ) // save LR
193
+ stwu 1 , - 256 ( 1 ) // stack size: 18 * 8 + 112 = 256
194
+
195
+ / * Save r14 - r31 in general register save area * /
196
+ stw 14 , ( 112 + 0 * 4 )( 1 )
197
+ stw 15 , ( 112 + 1 * 4 )( 1 )
198
+ stw 16 , ( 112 + 2 * 4 )( 1 )
199
+ stw 17 , ( 112 + 3 * 4 )( 1 )
200
+ stw 18 , ( 112 + 4 * 4 )( 1 )
201
+ stw 19 , ( 112 + 5 * 4 )( 1 )
202
+ stw 20 , ( 112 + 6 * 4 )( 1 )
203
+ stw 21 , ( 112 + 7 * 4 )( 1 )
204
+ stw 22 , ( 112 + 8 * 4 )( 1 )
205
+ stw 23 , ( 112 + 9 * 4 )( 1 )
206
+ stw 24 , ( 112 + 10 * 4 )( 1 )
207
+ stw 25 , ( 112 + 11 * 4 )( 1 )
208
+ stw 26 , ( 112 + 12 * 4 )( 1 )
209
+ stw 27 , ( 112 + 13 * 4 )( 1 )
210
+ stw 28 , ( 112 + 14 * 4 )( 1 )
211
+ stw 29 , ( 112 + 15 * 4 )( 1 )
212
+ stw 30 , ( 112 + 16 * 4 )( 1 )
213
+ stw 31 , ( 112 + 17 * 4 )( 1 )
214
+
215
+ / * Save r3 - r10 in parameter save area of caller * /
216
+ stw 3 , ( 256 + 48 + 0 * 4 )( 1 )
217
+ stw 4 , ( 256 + 48 + 1 * 4 )( 1 )
218
+ stw 5 , ( 256 + 48 + 2 * 4 )( 1 )
219
+ stw 6 , ( 256 + 48 + 3 * 4 )( 1 )
220
+ stw 7 , ( 256 + 48 + 4 * 4 )( 1 )
221
+ stw 8 , ( 256 + 48 + 5 * 4 )( 1 )
222
+ stw 9 , ( 256 + 48 + 6 * 4 )( 1 )
223
+ stw 10 , ( 256 + 48 + 7 * 4 )( 1 )
224
+
225
+ / * Save r2 in TOC save area * /
226
+ stw 2 , 40 ( 1 )
227
+
228
+ / * Do not save r11 , r12 and r13 . * /
229
+
230
+ / * Call delegate:
231
+ * r3: pointer to context
232
+ * r4: pointer to stack
233
+ * /
234
+ mr 5 , 4
235
+ mr 4 , 1
236
+ lwz 6 , 0 ( 5 )
237
+ lwz 11 , 16 ( 5 )
238
+ lwz 2 , 8 ( 5 )
239
+ mtctr 6
240
+ bctrl
241
+ nop
242
+
243
+ / * Restore r2 from TOC save area * /
244
+ lwz 2 , 40 ( 1 )
245
+
246
+ / * Restore r3 - r10 from local variable space * /
247
+ lwz 3 , ( 256 + 48 + 0 * 4 )( 1 )
248
+ lwz 4 , ( 256 + 48 + 1 * 4 )( 1 )
249
+ lwz 5 , ( 256 + 48 + 2 * 4 )( 1 )
250
+ lwz 6 , ( 256 + 48 + 3 * 4 )( 1 )
251
+ lwz 7 , ( 256 + 48 + 4 * 4 )( 1 )
252
+ lwz 8 , ( 256 + 48 + 5 * 4 )( 1 )
253
+ lwz 9 , ( 256 + 48 + 6 * 4 )( 1 )
254
+ lwz 10 , ( 256 + 48 + 7 * 4 )( 1 )
255
+
256
+ / * Restore r14 - r31 from general register save area * /
257
+ lwz 14 , ( 112 + 0 * 4 )( 1 )
258
+ lwz 15 , ( 112 + 1 * 4 )( 1 )
259
+ lwz 16 , ( 112 + 2 * 4 )( 1 )
260
+ lwz 17 , ( 112 + 3 * 4 )( 1 )
261
+ lwz 18 , ( 112 + 4 * 4 )( 1 )
262
+ lwz 19 , ( 112 + 5 * 4 )( 1 )
263
+ lwz 20 , ( 112 + 6 * 4 )( 1 )
264
+ lwz 21 , ( 112 + 7 * 4 )( 1 )
265
+ lwz 22 , ( 112 + 8 * 4 )( 1 )
266
+ lwz 23 , ( 112 + 9 * 4 )( 1 )
267
+ lwz 24 , ( 112 + 10 * 4 )( 1 )
268
+ lwz 25 , ( 112 + 11 * 4 )( 1 )
269
+ lwz 26 , ( 112 + 12 * 4 )( 1 )
270
+ lwz 27 , ( 112 + 13 * 4 )( 1 )
271
+ lwz 28 , ( 112 + 14 * 4 )( 1 )
272
+ lwz 29 , ( 112 + 15 * 4 )( 1 )
273
+ lwz 30 , ( 112 + 16 * 4 )( 1 )
274
+ lwz 31 , ( 112 + 17 * 4 )( 1 )
275
+
276
+ addi 1 , 1 , 256
277
+ lwz 0 , 16 ( 1 )
278
+ mtlr 0
279
+ blr
280
+ .size _D4core6thread18callWithStackShellFNbMDFNbPvZvZv , . - _D4core6thread18callWithStackShellFNbMDFNbPvZvZv
281
+
178
282
179
283
/ **
180
284
* Performs a context switch.
@@ -183,11 +287,10 @@ _D4core6thread18callWithStackShellFNbMDFNbPvZvZv:
183
287
* r4 - new context pointer
184
288
*
185
289
* /
186
- .text
187
- . align 2
188
- .globl _fiber_switchContext
189
- _fiber_switchContext:
190
-
290
+ . align 2
291
+ .globl fiber_switchContext
292
+ .type fiber_switchContext , @function
293
+ fiber_switchContext:
191
294
/ * Save linkage area * /
192
295
mflr 0
193
296
mfcr 5
@@ -298,6 +401,7 @@ _fiber_switchContext:
298
401
299
402
/ * Return and switch context * /
300
403
blr
404
+ .size fiber_switchContext , . - fiber_switchContext
301
405
302
406
#elif defined(__mips__) && _MIPS_SIM == _ABIO32
303
407
/ ************************************************************************************
0 commit comments