summaryrefslogtreecommitdiff
path: root/asm/SDK/VF/pf_clib.s
blob: 91f5f74f487e31ee0993d63a8b6dbbbd61af7202 (plain)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global VFipf_toupper
VFipf_toupper:
/* 80304E94 00300AF4  2C 03 00 61 */	cmpwi r3, 0x61
/* 80304E98 00300AF8  4D 80 00 20 */	bltlr
/* 80304E9C 00300AFC  2C 03 00 7A */	cmpwi r3, 0x7a
/* 80304EA0 00300B00  4D 81 00 20 */	bgtlr
/* 80304EA4 00300B04  38 63 FF E0 */	addi r3, r3, -32
/* 80304EA8 00300B08  4E 80 00 20 */	blr

.global VFipf_memcpy
VFipf_memcpy:
/* 80304EAC 00300B0C  54 60 07 BF */	clrlwi. r0, r3, 0x1e
/* 80304EB0 00300B10  7C 68 1B 78 */	mr r8, r3
/* 80304EB4 00300B14  40 82 00 9C */	bne lbl_80304F50
/* 80304EB8 00300B18  54 80 07 BF */	clrlwi. r0, r4, 0x1e
/* 80304EBC 00300B1C  40 82 00 94 */	bne lbl_80304F50
/* 80304EC0 00300B20  28 05 00 03 */	cmplwi r5, 3
/* 80304EC4 00300B24  54 A7 F0 BE */	srwi r7, r5, 2
/* 80304EC8 00300B28  40 81 00 88 */	ble lbl_80304F50
/* 80304ECC 00300B2C  54 E6 E8 FF */	rlwinm. r6, r7, 0x1d, 3, 0x1f
/* 80304ED0 00300B30  54 E0 10 3A */	slwi r0, r7, 2
/* 80304ED4 00300B34  7C 00 00 D0 */	neg r0, r0
/* 80304ED8 00300B38  7C C9 03 A6 */	mtctr r6
/* 80304EDC 00300B3C  41 82 00 58 */	beq lbl_80304F34
lbl_80304EE0:
/* 80304EE0 00300B40  80 C4 00 00 */	lwz r6, 0(r4)
/* 80304EE4 00300B44  90 C8 00 00 */	stw r6, 0(r8)
/* 80304EE8 00300B48  80 C4 00 04 */	lwz r6, 4(r4)
/* 80304EEC 00300B4C  90 C8 00 04 */	stw r6, 4(r8)
/* 80304EF0 00300B50  80 C4 00 08 */	lwz r6, 8(r4)
/* 80304EF4 00300B54  90 C8 00 08 */	stw r6, 8(r8)
/* 80304EF8 00300B58  80 C4 00 0C */	lwz r6, 0xc(r4)
/* 80304EFC 00300B5C  90 C8 00 0C */	stw r6, 0xc(r8)
/* 80304F00 00300B60  80 C4 00 10 */	lwz r6, 0x10(r4)
/* 80304F04 00300B64  90 C8 00 10 */	stw r6, 0x10(r8)
/* 80304F08 00300B68  80 C4 00 14 */	lwz r6, 0x14(r4)
/* 80304F0C 00300B6C  90 C8 00 14 */	stw r6, 0x14(r8)
/* 80304F10 00300B70  80 C4 00 18 */	lwz r6, 0x18(r4)
/* 80304F14 00300B74  90 C8 00 18 */	stw r6, 0x18(r8)
/* 80304F18 00300B78  80 C4 00 1C */	lwz r6, 0x1c(r4)
/* 80304F1C 00300B7C  38 84 00 20 */	addi r4, r4, 0x20
/* 80304F20 00300B80  90 C8 00 1C */	stw r6, 0x1c(r8)
/* 80304F24 00300B84  39 08 00 20 */	addi r8, r8, 0x20
/* 80304F28 00300B88  42 00 FF B8 */	bdnz lbl_80304EE0
/* 80304F2C 00300B8C  70 E7 00 07 */	andi. r7, r7, 7
/* 80304F30 00300B90  41 82 00 1C */	beq lbl_80304F4C
lbl_80304F34:
/* 80304F34 00300B94  7C E9 03 A6 */	mtctr r7
lbl_80304F38:
/* 80304F38 00300B98  80 C4 00 00 */	lwz r6, 0(r4)
/* 80304F3C 00300B9C  38 84 00 04 */	addi r4, r4, 4
/* 80304F40 00300BA0  90 C8 00 00 */	stw r6, 0(r8)
/* 80304F44 00300BA4  39 08 00 04 */	addi r8, r8, 4
/* 80304F48 00300BA8  42 00 FF F0 */	bdnz lbl_80304F38
lbl_80304F4C:
/* 80304F4C 00300BAC  7C A5 02 14 */	add r5, r5, r0
lbl_80304F50:
/* 80304F50 00300BB0  2C 05 00 00 */	cmpwi r5, 0
/* 80304F54 00300BB4  4D 82 00 20 */	beqlr
/* 80304F58 00300BB8  54 A0 E8 FF */	rlwinm. r0, r5, 0x1d, 3, 0x1f
/* 80304F5C 00300BBC  7C 09 03 A6 */	mtctr r0
/* 80304F60 00300BC0  41 82 00 58 */	beq lbl_80304FB8
lbl_80304F64:
/* 80304F64 00300BC4  88 04 00 00 */	lbz r0, 0(r4)
/* 80304F68 00300BC8  98 08 00 00 */	stb r0, 0(r8)
/* 80304F6C 00300BCC  88 04 00 01 */	lbz r0, 1(r4)
/* 80304F70 00300BD0  98 08 00 01 */	stb r0, 1(r8)
/* 80304F74 00300BD4  88 04 00 02 */	lbz r0, 2(r4)
/* 80304F78 00300BD8  98 08 00 02 */	stb r0, 2(r8)
/* 80304F7C 00300BDC  88 04 00 03 */	lbz r0, 3(r4)
/* 80304F80 00300BE0  98 08 00 03 */	stb r0, 3(r8)
/* 80304F84 00300BE4  88 04 00 04 */	lbz r0, 4(r4)
/* 80304F88 00300BE8  98 08 00 04 */	stb r0, 4(r8)
/* 80304F8C 00300BEC  88 04 00 05 */	lbz r0, 5(r4)
/* 80304F90 00300BF0  98 08 00 05 */	stb r0, 5(r8)
/* 80304F94 00300BF4  88 04 00 06 */	lbz r0, 6(r4)
/* 80304F98 00300BF8  98 08 00 06 */	stb r0, 6(r8)
/* 80304F9C 00300BFC  88 04 00 07 */	lbz r0, 7(r4)
/* 80304FA0 00300C00  38 84 00 08 */	addi r4, r4, 8
/* 80304FA4 00300C04  98 08 00 07 */	stb r0, 7(r8)
/* 80304FA8 00300C08  39 08 00 08 */	addi r8, r8, 8
/* 80304FAC 00300C0C  42 00 FF B8 */	bdnz lbl_80304F64
/* 80304FB0 00300C10  70 A5 00 07 */	andi. r5, r5, 7
/* 80304FB4 00300C14  4D 82 00 20 */	beqlr
lbl_80304FB8:
/* 80304FB8 00300C18  7C A9 03 A6 */	mtctr r5
lbl_80304FBC:
/* 80304FBC 00300C1C  88 04 00 00 */	lbz r0, 0(r4)
/* 80304FC0 00300C20  38 84 00 01 */	addi r4, r4, 1
/* 80304FC4 00300C24  98 08 00 00 */	stb r0, 0(r8)
/* 80304FC8 00300C28  39 08 00 01 */	addi r8, r8, 1
/* 80304FCC 00300C2C  42 00 FF F0 */	bdnz lbl_80304FBC
/* 80304FD0 00300C30  4E 80 00 20 */	blr

.global VFipf_memset
VFipf_memset:
/* 80304FD4 00300C34  7C 69 1B 78 */	mr r9, r3
/* 80304FD8 00300C38  48 00 00 10 */	b lbl_80304FE8
lbl_80304FDC:
/* 80304FDC 00300C3C  98 89 00 00 */	stb r4, 0(r9)
/* 80304FE0 00300C40  39 29 00 01 */	addi r9, r9, 1
/* 80304FE4 00300C44  38 A5 FF FF */	addi r5, r5, -1
lbl_80304FE8:
/* 80304FE8 00300C48  55 20 07 BF */	clrlwi. r0, r9, 0x1e
/* 80304FEC 00300C4C  41 82 00 0C */	beq lbl_80304FF8
/* 80304FF0 00300C50  2C 05 00 00 */	cmpwi r5, 0
/* 80304FF4 00300C54  40 82 FF E8 */	bne lbl_80304FDC
lbl_80304FF8:
/* 80304FF8 00300C58  54 87 40 2E */	slwi r7, r4, 8
/* 80304FFC 00300C5C  28 05 00 03 */	cmplwi r5, 3
/* 80305000 00300C60  7C 88 3B 78 */	or r8, r4, r7
/* 80305004 00300C64  54 86 C0 0E */	slwi r6, r4, 0x18
/* 80305008 00300C68  54 80 80 1E */	slwi r0, r4, 0x10
/* 8030500C 00300C6C  54 A7 F0 BE */	srwi r7, r5, 2
/* 80305010 00300C70  7C C0 03 78 */	or r0, r6, r0
/* 80305014 00300C74  7D 08 03 78 */	or r8, r8, r0
/* 80305018 00300C78  40 81 00 5C */	ble lbl_80305074
/* 8030501C 00300C7C  54 E6 E8 FF */	rlwinm. r6, r7, 0x1d, 3, 0x1f
/* 80305020 00300C80  54 E0 10 3A */	slwi r0, r7, 2
/* 80305024 00300C84  7C 00 00 D0 */	neg r0, r0
/* 80305028 00300C88  7C C9 03 A6 */	mtctr r6
/* 8030502C 00300C8C  41 82 00 34 */	beq lbl_80305060
lbl_80305030:
/* 80305030 00300C90  91 09 00 00 */	stw r8, 0(r9)
/* 80305034 00300C94  91 09 00 04 */	stw r8, 4(r9)
/* 80305038 00300C98  91 09 00 08 */	stw r8, 8(r9)
/* 8030503C 00300C9C  91 09 00 0C */	stw r8, 0xc(r9)
/* 80305040 00300CA0  91 09 00 10 */	stw r8, 0x10(r9)
/* 80305044 00300CA4  91 09 00 14 */	stw r8, 0x14(r9)
/* 80305048 00300CA8  91 09 00 18 */	stw r8, 0x18(r9)
/* 8030504C 00300CAC  91 09 00 1C */	stw r8, 0x1c(r9)
/* 80305050 00300CB0  39 29 00 20 */	addi r9, r9, 0x20
/* 80305054 00300CB4  42 00 FF DC */	bdnz lbl_80305030
/* 80305058 00300CB8  70 E7 00 07 */	andi. r7, r7, 7
/* 8030505C 00300CBC  41 82 00 14 */	beq lbl_80305070
lbl_80305060:
/* 80305060 00300CC0  7C E9 03 A6 */	mtctr r7
lbl_80305064:
/* 80305064 00300CC4  91 09 00 00 */	stw r8, 0(r9)
/* 80305068 00300CC8  39 29 00 04 */	addi r9, r9, 4
/* 8030506C 00300CCC  42 00 FF F8 */	bdnz lbl_80305064
lbl_80305070:
/* 80305070 00300CD0  7C A5 02 14 */	add r5, r5, r0
lbl_80305074:
/* 80305074 00300CD4  2C 05 00 00 */	cmpwi r5, 0
/* 80305078 00300CD8  4D 82 00 20 */	beqlr
/* 8030507C 00300CDC  54 A0 E8 FF */	rlwinm. r0, r5, 0x1d, 3, 0x1f
/* 80305080 00300CE0  7C 09 03 A6 */	mtctr r0
/* 80305084 00300CE4  41 82 00 34 */	beq lbl_803050B8
lbl_80305088:
/* 80305088 00300CE8  98 89 00 00 */	stb r4, 0(r9)
/* 8030508C 00300CEC  98 89 00 01 */	stb r4, 1(r9)
/* 80305090 00300CF0  98 89 00 02 */	stb r4, 2(r9)
/* 80305094 00300CF4  98 89 00 03 */	stb r4, 3(r9)
/* 80305098 00300CF8  98 89 00 04 */	stb r4, 4(r9)
/* 8030509C 00300CFC  98 89 00 05 */	stb r4, 5(r9)
/* 803050A0 00300D00  98 89 00 06 */	stb r4, 6(r9)
/* 803050A4 00300D04  98 89 00 07 */	stb r4, 7(r9)
/* 803050A8 00300D08  39 29 00 08 */	addi r9, r9, 8
/* 803050AC 00300D0C  42 00 FF DC */	bdnz lbl_80305088
/* 803050B0 00300D10  70 A5 00 07 */	andi. r5, r5, 7
/* 803050B4 00300D14  4D 82 00 20 */	beqlr
lbl_803050B8:
/* 803050B8 00300D18  7C A9 03 A6 */	mtctr r5
lbl_803050BC:
/* 803050BC 00300D1C  98 89 00 00 */	stb r4, 0(r9)
/* 803050C0 00300D20  39 29 00 01 */	addi r9, r9, 1
/* 803050C4 00300D24  42 00 FF F8 */	bdnz lbl_803050BC
/* 803050C8 00300D28  4E 80 00 20 */	blr

.global VFipf_strlen
VFipf_strlen:
/* 803050CC 00300D2C  7C 64 1B 78 */	mr r4, r3
/* 803050D0 00300D30  48 00 00 08 */	b lbl_803050D8
lbl_803050D4:
/* 803050D4 00300D34  38 84 00 01 */	addi r4, r4, 1
lbl_803050D8:
/* 803050D8 00300D38  88 04 00 00 */	lbz r0, 0(r4)
/* 803050DC 00300D3C  7C 00 07 75 */	extsb. r0, r0
/* 803050E0 00300D40  40 82 FF F4 */	bne lbl_803050D4
/* 803050E4 00300D44  7C 63 20 50 */	subf r3, r3, r4
/* 803050E8 00300D48  4E 80 00 20 */	blr

.global VFipf_strcpy
VFipf_strcpy:
/* 803050EC 00300D4C  7C 66 1B 78 */	mr r6, r3
/* 803050F0 00300D50  48 00 00 0C */	b lbl_803050FC
lbl_803050F4:
/* 803050F4 00300D54  38 84 00 01 */	addi r4, r4, 1
/* 803050F8 00300D58  38 C6 00 01 */	addi r6, r6, 1
lbl_803050FC:
/* 803050FC 00300D5C  88 A4 00 00 */	lbz r5, 0(r4)
/* 80305100 00300D60  7C A0 07 75 */	extsb. r0, r5
/* 80305104 00300D64  98 A6 00 00 */	stb r5, 0(r6)
/* 80305108 00300D68  40 82 FF EC */	bne lbl_803050F4
/* 8030510C 00300D6C  4E 80 00 20 */	blr

.global VFipf_strcmp
VFipf_strcmp:
/* 80305110 00300D70  48 00 00 0C */	b lbl_8030511C
lbl_80305114:
/* 80305114 00300D74  38 63 00 01 */	addi r3, r3, 1
/* 80305118 00300D78  38 84 00 01 */	addi r4, r4, 1
lbl_8030511C:
/* 8030511C 00300D7C  88 A3 00 00 */	lbz r5, 0(r3)
/* 80305120 00300D80  2C 05 00 00 */	cmpwi r5, 0
/* 80305124 00300D84  41 82 00 18 */	beq lbl_8030513C
/* 80305128 00300D88  88 04 00 00 */	lbz r0, 0(r4)
/* 8030512C 00300D8C  2C 00 00 00 */	cmpwi r0, 0
/* 80305130 00300D90  41 82 00 0C */	beq lbl_8030513C
/* 80305134 00300D94  7C 05 00 40 */	cmplw r5, r0
/* 80305138 00300D98  41 82 FF DC */	beq lbl_80305114
lbl_8030513C:
/* 8030513C 00300D9C  88 04 00 00 */	lbz r0, 0(r4)
/* 80305140 00300DA0  7C 60 28 50 */	subf r3, r0, r5
/* 80305144 00300DA4  4E 80 00 20 */	blr

.global VFipf_strncmp
VFipf_strncmp:
/* 80305148 00300DA8  7C A9 03 A6 */	mtctr r5
/* 8030514C 00300DAC  2C 05 00 00 */	cmpwi r5, 0
/* 80305150 00300DB0  41 82 00 3C */	beq lbl_8030518C
lbl_80305154:
/* 80305154 00300DB4  88 A3 00 00 */	lbz r5, 0(r3)
/* 80305158 00300DB8  2C 05 00 00 */	cmpwi r5, 0
/* 8030515C 00300DBC  41 82 00 18 */	beq lbl_80305174
/* 80305160 00300DC0  88 04 00 00 */	lbz r0, 0(r4)
/* 80305164 00300DC4  2C 00 00 00 */	cmpwi r0, 0
/* 80305168 00300DC8  41 82 00 0C */	beq lbl_80305174
/* 8030516C 00300DCC  7C 05 00 40 */	cmplw r5, r0
/* 80305170 00300DD0  41 82 00 10 */	beq lbl_80305180
lbl_80305174:
/* 80305174 00300DD4  88 04 00 00 */	lbz r0, 0(r4)
/* 80305178 00300DD8  7C 60 28 50 */	subf r3, r0, r5
/* 8030517C 00300DDC  4E 80 00 20 */	blr
lbl_80305180:
/* 80305180 00300DE0  38 63 00 01 */	addi r3, r3, 1
/* 80305184 00300DE4  38 84 00 01 */	addi r4, r4, 1
/* 80305188 00300DE8  42 00 FF CC */	bdnz lbl_80305154
lbl_8030518C:
/* 8030518C 00300DEC  38 60 00 00 */	li r3, 0
/* 80305190 00300DF0  4E 80 00 20 */	blr