~ubuntu-branches/ubuntu/hardy/libgc/hardy-updates

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