OSDN Git Service

* include/private/gcconfig.h: Change all likely references
[pf3gnuchains/gcc-fork.git] / boehm-gc / powerpc_macosx_mach_dep.s
1         
2 .text
3     
4     .set   linkageArea,24
5     .set   params,4
6     .set   alignment,4
7
8     .set   spaceToSave,linkageArea+params+alignment
9     .set   spaceToSave8,spaceToSave+8
10
11 ; Mark from machine registers that are saved by C compiler
12     .globl  _GC_push_regs
13 _GC_push_regs:
14     ; PROLOG
15     mflr    r0          ; get return address
16     stw     r0,8(r1)    ; save return address
17     stwu    r1,-spaceToSave(r1)   ; skip over caller save area
18     ;
19     mr      r3,r2         ; mark from r2. Well Im not really sure
20                           ; that this is necessary or even the right
21                           ; thing to do - at least it doesnt harm...
22                           ; According to Apples docs it points to
23                           ; the direct data area, whatever that is...
24     bl      L_GC_push_one$stub
25     mr      r3,r13        ; mark from r13-r31
26     bl      L_GC_push_one$stub
27     mr      r3,r14
28     bl      L_GC_push_one$stub
29     mr      r3,r15
30     bl      L_GC_push_one$stub
31     mr      r3,r16
32     bl      L_GC_push_one$stub
33     mr      r3,r17
34     bl      L_GC_push_one$stub
35     mr      r3,r18
36     bl      L_GC_push_one$stub
37     mr      r3,r19
38     bl      L_GC_push_one$stub
39     mr      r3,r20
40     bl      L_GC_push_one$stub
41     mr      r3,r21
42     bl      L_GC_push_one$stub
43     mr      r3,r22
44     bl      L_GC_push_one$stub
45     mr      r3,r23
46     bl      L_GC_push_one$stub
47     mr      r3,r24
48     bl      L_GC_push_one$stub
49     mr      r3,r25
50     bl      L_GC_push_one$stub
51     mr      r3,r26
52     bl      L_GC_push_one$stub
53     mr      r3,r27
54     bl      L_GC_push_one$stub
55     mr      r3,r28
56     bl      L_GC_push_one$stub
57     mr      r3,r29
58     bl      L_GC_push_one$stub
59     mr      r3,r30
60     bl      L_GC_push_one$stub
61     mr      r3,r31
62     bl      L_GC_push_one$stub
63     ; EPILOG
64     lwz     r0,spaceToSave8(r1)   ; get return address back
65     mtlr    r0    ; reset link register
66     addic   r1,r1,spaceToSave   ; restore stack pointer
67     blr
68
69 .data
70 .picsymbol_stub
71 L_GC_push_one$stub:
72         .indirect_symbol _GC_push_one
73         mflr r0
74         bcl 20,31,L0$_GC_push_one
75 L0$_GC_push_one:
76         mflr r11
77         addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
78         mtlr r0
79         lwz r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
80         mtctr r12
81         addi r11,r11,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
82         bctr
83 .data
84 .lazy_symbol_pointer
85 L_GC_push_one$lazy_ptr:
86         .indirect_symbol _GC_push_one
87         .long dyld_stub_binding_helper
88 .non_lazy_symbol_pointer
89 L_GC_push_one$non_lazy_ptr:
90         .indirect_symbol _GC_push_one
91         .long 0
92         
93
94
95