~ubuntu-branches/ubuntu/quantal/libgc/quantal

« back to all changes in this revision

Viewing changes to powerpc_darwin_mach_dep.s

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Egger
  • Date: 2011-02-19 12:19:56 UTC
  • mfrom: (1.3.2 upstream) (0.1.5 experimental)
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: james.westby@ubuntu.com-20110219121956-67rb69xlt5nud3v2
Tags: 1:7.1-5
Upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
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) */
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
15
 
; therefore, this cannot be inline asm.
16
 
 
17
 
.text
18
 
        .align LOG2_GPR_BYTES
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
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