PR middle-end/21282
[official-gcc.git] / boehm-gc / powerpc_darwin_mach_dep.s
blob694005f416dbe62da7108bb7f61191a0a44a326a
1 #if defined(__ppc64__)
2 #define MODE_CHOICE(x, y) y
3 #else
4 #define MODE_CHOICE(x, y) x
5 #endif
7 #define lgu MODE_CHOICE(lwzu, ldu)
9 #define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
11 #define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
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
15 ; therefore, this can't be inline asm.
17 .text
18 .align LOG2_GPR_BYTES
19 .globl _GC_push_regs
20 _GC_push_regs:
22 ; Prolog
23 mflr r0
24 stw r0,8(r1)
25 stwu r1,-80(r1)
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
68 lwz r0,88(r1)
69 addi r1,r1,80
70 mtlr r0
72 ; Return
73 blr
75 ; PIC stuff, generated by GCC
77 .data
78 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
79 .align LOG2_GPR_BYTES
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
88 lgu r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
89 mtctr r12
90 bctr
91 .data
92 .lazy_symbol_pointer
93 L_GC_push_one$lazy_ptr:
94 .indirect_symbol _GC_push_one
95 .g_long dyld_stub_binding_helper