1.2.3
by Fabio M. Di Nitto
Import upstream version 6.7 |
1 |
#if defined(__ppc64__)
|
2 |
#define MODE_CHOICE(x, y) y
|
|
3 |
#else
|
|
4 |
#define MODE_CHOICE(x, y) x
|
|
5 |
#endif
|
|
6 |
||
7 |
#define lgu MODE_CHOICE(lwzu, ldu)
|
|
8 |
||
9 |
#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
|
|
10 |
||
11 |
#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
|
|
1.1.1
by Ryan Murray
Import upstream version 6.2+6.3alpha4 |
12 |
|
13 |
; GC_push_regs function. Under some optimization levels GCC will clobber
|
|
14 |
; some of the non-volatile registers before we get a chance to save them
|
|
1.2.1
by Ryan Murray
Import upstream version 6.4 |
15 |
; therefore, this cannot be inline asm.
|
1.1.1
by Ryan Murray
Import upstream version 6.2+6.3alpha4 |
16 |
|
17 |
.text
|
|
1.2.3
by Fabio M. Di Nitto
Import upstream version 6.7 |
18 |
.align LOG2_GPR_BYTES |
1.1.1
by Ryan Murray
Import upstream version 6.2+6.3alpha4 |
19 |
.globl _GC_push_regs |
20 |
_GC_push_regs:
|
|
21 |
||
22 |
; Prolog
|
|
23 |
mflr r0 |
|
24 |
stw r0,8(r1) |
|
25 |
stwu r1,-80(r1) |
|
26 |
||
27 |
; Push r13-r31
|
|
28 |
mr r3,r13 |
|
29 |
bl L_GC_push_one$stub |
|
30 |
mr r3,r14 |
|
31 |
bl L_GC_push_one$stub |
|
32 |
mr r3,r15 |
|
33 |
bl L_GC_push_one$stub |
|
34 |
mr r3,r16 |
|
35 |
bl L_GC_push_one$stub |
|
36 |
mr r3,r17 |
|
37 |
bl L_GC_push_one$stub |
|
38 |
mr r3,r18 |
|
39 |
bl L_GC_push_one$stub |
|
40 |
mr r3,r19 |
|
41 |
bl L_GC_push_one$stub |
|
42 |
mr r3,r20 |
|
43 |
bl L_GC_push_one$stub |
|
44 |
mr r3,r21 |
|
45 |
bl L_GC_push_one$stub |
|
46 |
mr r3,r22 |
|
47 |
bl L_GC_push_one$stub |
|
48 |
mr r3,r23 |
|
49 |
bl L_GC_push_one$stub |
|
50 |
mr r3,r24 |
|
51 |
bl L_GC_push_one$stub |
|
52 |
mr r3,r25 |
|
53 |
bl L_GC_push_one$stub |
|
54 |
mr r3,r26 |
|
55 |
bl L_GC_push_one$stub |
|
56 |
mr r3,r27 |
|
57 |
bl L_GC_push_one$stub |
|
58 |
mr r3,r28 |
|
59 |
bl L_GC_push_one$stub |
|
60 |
mr r3,r29 |
|
61 |
bl L_GC_push_one$stub |
|
62 |
mr r3,r30 |
|
63 |
bl L_GC_push_one$stub |
|
64 |
mr r3,r31 |
|
65 |
bl L_GC_push_one$stub |
|
66 |
||
67 |
;
|
|
68 |
lwz r0,88(r1) |
|
69 |
addi r1,r1,80 |
|
70 |
mtlr r0 |
|
71 |
||
72 |
; Return
|
|
73 |
blr
|
|
74 |
||
75 |
; PIC stuff, generated by GCC
|
|
76 |
||
77 |
.data
|
|
1.2.2
by Ryan Murray
Import upstream version 6.6 |
78 |
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 |
1.2.3
by Fabio M. Di Nitto
Import upstream version 6.7 |
79 |
.align LOG2_GPR_BYTES |
1.1.1
by Ryan Murray
Import upstream version 6.2+6.3alpha4 |
80 |
L_GC_push_one$stub:
|
81 |
.indirect_symbol _GC_push_one |
|
82 |
mflr r0 |
|
83 |
bcl 20,31,L0$_GC_push_one |
|
84 |
L0$_GC_push_one:
|
|
85 |
mflr r11 |
|
86 |
addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one) |
|
87 |
mtlr r0 |
|
1.2.3
by Fabio M. Di Nitto
Import upstream version 6.7 |
88 |
lgu r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11) |
1.1.1
by Ryan Murray
Import upstream version 6.2+6.3alpha4 |
89 |
mtctr r12 |
90 |
bctr
|
|
91 |
.data
|
|
92 |
.lazy_symbol_pointer
|
|
93 |
L_GC_push_one$lazy_ptr:
|
|
94 |
.indirect_symbol _GC_push_one |
|
1.2.3
by Fabio M. Di Nitto
Import upstream version 6.7 |
95 |
.g_long dyld_stub_binding_helper |