Merge pull request #115 from knocte/master
[mono-project.git] / libgc / powerpc_macosx_mach_dep.s
blob92f06286e73edab1a276862110d5b90766754033
2 .text
4 .set linkageArea,24
5 .set params,4
6 .set alignment,4
8 .set spaceToSave,linkageArea+params+alignment
9 .set spaceToSave8,spaceToSave+8
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
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
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