1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
.csect
.set r0,0
.set r1,1
.set r2,2
.set r3,3
.set r4,4
.set r5,5
.set r6,6
.set r7,7
.set r8,8
.set r9,9
.set r10,10
.set r11,11
.set r12,12
.set r13,13
.set r14,14
.set r15,15
.set r16,16
.set r17,17
.set r18,18
.set r19,19
.set r20,20
.set r21,21
.set r22,22
.set r23,23
.set r24,24
.set r25,25
.set r26,26
.set r27,27
.set r28,28
.set r29,29
.set r30,30
.set r31,31
# Mark from machine registers that are saved by C compiler
.globl .GC_push_regs
.GC_push_regs:
.extern .GC_push_one
stu r1,-64(r1) # reserve stack frame
mflr r0 # save link register
st r0,0x48(r1)
oril r3,r2,0x0 # mark from r2
bl .GC_push_one
cror 15,15,15
oril r3,r13,0x0 # mark from r13-r31
bl .GC_push_one
cror 15,15,15
oril r3,r14,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r15,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r16,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r17,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r18,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r19,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r20,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r21,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r22,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r23,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r24,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r25,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r26,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r27,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r28,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r29,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r30,0x0
bl .GC_push_one
cror 15,15,15
oril r3,r31,0x0
bl .GC_push_one
cror 15,15,15
l r0,0x48(r1)
mtlr r0
ai r1,r1,64
br
|