summaryrefslogtreecommitdiff
path: root/asm/MSL_C/MSL_Common/string.s
blob: 311ea6764ccb7b70af8512e117f419da40c953f9 (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
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
.include "macros.inc"

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

.global strcpy
strcpy:
/* 801CE2D0 001C9F30  54 60 07 BE */	clrlwi r0, r3, 0x1e
/* 801CE2D4 001C9F34  54 85 07 BE */	clrlwi r5, r4, 0x1e
/* 801CE2D8 001C9F38  7C 00 28 40 */	cmplw r0, r5
/* 801CE2DC 001C9F3C  7C 67 1B 78 */	mr r7, r3
/* 801CE2E0 001C9F40  40 82 00 8C */	bne lbl_801CE36C
/* 801CE2E4 001C9F44  2C 05 00 00 */	cmpwi r5, 0
/* 801CE2E8 001C9F48  41 82 00 40 */	beq lbl_801CE328
/* 801CE2EC 001C9F4C  88 04 00 00 */	lbz r0, 0(r4)
/* 801CE2F0 001C9F50  2C 00 00 00 */	cmpwi r0, 0
/* 801CE2F4 001C9F54  98 03 00 00 */	stb r0, 0(r3)
/* 801CE2F8 001C9F58  4D 82 00 20 */	beqlr
/* 801CE2FC 001C9F5C  20 05 00 03 */	subfic r0, r5, 3
/* 801CE300 001C9F60  7C 09 03 A6 */	mtctr r0
/* 801CE304 001C9F64  2C 00 00 00 */	cmpwi r0, 0
/* 801CE308 001C9F68  41 82 00 18 */	beq lbl_801CE320
lbl_801CE30C:
/* 801CE30C 001C9F6C  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CE310 001C9F70  2C 00 00 00 */	cmpwi r0, 0
/* 801CE314 001C9F74  9C 07 00 01 */	stbu r0, 1(r7)
/* 801CE318 001C9F78  4D 82 00 20 */	beqlr
/* 801CE31C 001C9F7C  42 00 FF F0 */	bdnz lbl_801CE30C
lbl_801CE320:
/* 801CE320 001C9F80  38 E7 00 01 */	addi r7, r7, 1
/* 801CE324 001C9F84  38 84 00 01 */	addi r4, r4, 1
lbl_801CE328:
/* 801CE328 001C9F88  81 04 00 00 */	lwz r8, 0(r4)
/* 801CE32C 001C9F8C  3C A0 80 81 */	lis r5, 0x80808080@ha
/* 801CE330 001C9F90  38 A5 80 80 */	addi r5, r5, 0x80808080@l
/* 801CE334 001C9F94  3C C8 FE FF */	addis r6, r8, 0xfeff
/* 801CE338 001C9F98  38 C6 FE FF */	addi r6, r6, -257
/* 801CE33C 001C9F9C  7C C6 40 78 */	andc r6, r6, r8
/* 801CE340 001C9FA0  7C C0 28 39 */	and. r0, r6, r5
/* 801CE344 001C9FA4  40 82 00 28 */	bne lbl_801CE36C
/* 801CE348 001C9FA8  38 E7 FF FC */	addi r7, r7, -4
lbl_801CE34C:
/* 801CE34C 001C9FAC  95 07 00 04 */	stwu r8, 4(r7)
/* 801CE350 001C9FB0  85 04 00 04 */	lwzu r8, 4(r4)
/* 801CE354 001C9FB4  3C C8 FE FF */	addis r6, r8, 0xfeff
/* 801CE358 001C9FB8  38 C6 FE FF */	addi r6, r6, -257
/* 801CE35C 001C9FBC  7C C6 40 78 */	andc r6, r6, r8
/* 801CE360 001C9FC0  7C C0 28 39 */	and. r0, r6, r5
/* 801CE364 001C9FC4  41 82 FF E8 */	beq lbl_801CE34C
/* 801CE368 001C9FC8  38 E7 00 04 */	addi r7, r7, 4
lbl_801CE36C:
/* 801CE36C 001C9FCC  88 04 00 00 */	lbz r0, 0(r4)
/* 801CE370 001C9FD0  2C 00 00 00 */	cmpwi r0, 0
/* 801CE374 001C9FD4  98 07 00 00 */	stb r0, 0(r7)
/* 801CE378 001C9FD8  4D 82 00 20 */	beqlr
lbl_801CE37C:
/* 801CE37C 001C9FDC  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CE380 001C9FE0  2C 00 00 00 */	cmpwi r0, 0
/* 801CE384 001C9FE4  9C 07 00 01 */	stbu r0, 1(r7)
/* 801CE388 001C9FE8  40 82 FF F4 */	bne lbl_801CE37C
/* 801CE38C 001C9FEC  4E 80 00 20 */	blr

.global strncpy
strncpy:
/* 801CE390 001C9FF0  38 84 FF FF */	addi r4, r4, -1
/* 801CE394 001C9FF4  38 C3 FF FF */	addi r6, r3, -1
/* 801CE398 001C9FF8  38 A5 00 01 */	addi r5, r5, 1
/* 801CE39C 001C9FFC  48 00 00 2C */	b lbl_801CE3C8
lbl_801CE3A0:
/* 801CE3A0 001CA000  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CE3A4 001CA004  2C 00 00 00 */	cmpwi r0, 0
/* 801CE3A8 001CA008  9C 06 00 01 */	stbu r0, 1(r6)
/* 801CE3AC 001CA00C  40 82 00 1C */	bne lbl_801CE3C8
/* 801CE3B0 001CA010  38 00 00 00 */	li r0, 0
/* 801CE3B4 001CA014  48 00 00 08 */	b lbl_801CE3BC
lbl_801CE3B8:
/* 801CE3B8 001CA018  9C 06 00 01 */	stbu r0, 1(r6)
lbl_801CE3BC:
/* 801CE3BC 001CA01C  34 A5 FF FF */	addic. r5, r5, -1
/* 801CE3C0 001CA020  40 82 FF F8 */	bne lbl_801CE3B8
/* 801CE3C4 001CA024  4E 80 00 20 */	blr
lbl_801CE3C8:
/* 801CE3C8 001CA028  34 A5 FF FF */	addic. r5, r5, -1
/* 801CE3CC 001CA02C  40 82 FF D4 */	bne lbl_801CE3A0
/* 801CE3D0 001CA030  4E 80 00 20 */	blr

.global strcat
strcat:
/* 801CE3D4 001CA034  38 84 FF FF */	addi r4, r4, -1
/* 801CE3D8 001CA038  38 A3 FF FF */	addi r5, r3, -1
lbl_801CE3DC:
/* 801CE3DC 001CA03C  8C 05 00 01 */	lbzu r0, 1(r5)
/* 801CE3E0 001CA040  2C 00 00 00 */	cmpwi r0, 0
/* 801CE3E4 001CA044  40 82 FF F8 */	bne lbl_801CE3DC
/* 801CE3E8 001CA048  38 A5 FF FF */	addi r5, r5, -1
lbl_801CE3EC:
/* 801CE3EC 001CA04C  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CE3F0 001CA050  2C 00 00 00 */	cmpwi r0, 0
/* 801CE3F4 001CA054  9C 05 00 01 */	stbu r0, 1(r5)
/* 801CE3F8 001CA058  40 82 FF F4 */	bne lbl_801CE3EC
/* 801CE3FC 001CA05C  4E 80 00 20 */	blr

.global strncat
strncat:
/* 801CE400 001CA060  38 84 FF FF */	addi r4, r4, -1
/* 801CE404 001CA064  38 C3 FF FF */	addi r6, r3, -1
lbl_801CE408:
/* 801CE408 001CA068  8C 06 00 01 */	lbzu r0, 1(r6)
/* 801CE40C 001CA06C  2C 00 00 00 */	cmpwi r0, 0
/* 801CE410 001CA070  40 82 FF F8 */	bne lbl_801CE408
/* 801CE414 001CA074  38 C6 FF FF */	addi r6, r6, -1
/* 801CE418 001CA078  38 A5 00 01 */	addi r5, r5, 1
/* 801CE41C 001CA07C  48 00 00 1C */	b lbl_801CE438
lbl_801CE420:
/* 801CE420 001CA080  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CE424 001CA084  2C 00 00 00 */	cmpwi r0, 0
/* 801CE428 001CA088  9C 06 00 01 */	stbu r0, 1(r6)
/* 801CE42C 001CA08C  40 82 00 0C */	bne lbl_801CE438
/* 801CE430 001CA090  38 C6 FF FF */	addi r6, r6, -1
/* 801CE434 001CA094  48 00 00 0C */	b lbl_801CE440
lbl_801CE438:
/* 801CE438 001CA098  34 A5 FF FF */	addic. r5, r5, -1
/* 801CE43C 001CA09C  40 82 FF E4 */	bne lbl_801CE420
lbl_801CE440:
/* 801CE440 001CA0A0  38 00 00 00 */	li r0, 0
/* 801CE444 001CA0A4  98 06 00 01 */	stb r0, 1(r6)
/* 801CE448 001CA0A8  4E 80 00 20 */	blr

.global strcmp
strcmp:
/* 801CE44C 001CA0AC  88 A3 00 00 */	lbz r5, 0(r3)
/* 801CE450 001CA0B0  88 04 00 00 */	lbz r0, 0(r4)
/* 801CE454 001CA0B4  7C 00 28 51 */	subf. r0, r0, r5
/* 801CE458 001CA0B8  41 82 00 0C */	beq lbl_801CE464
/* 801CE45C 001CA0BC  7C 03 03 78 */	mr r3, r0
/* 801CE460 001CA0C0  4E 80 00 20 */	blr
lbl_801CE464:
/* 801CE464 001CA0C4  54 80 07 BE */	clrlwi r0, r4, 0x1e
/* 801CE468 001CA0C8  54 66 07 BE */	clrlwi r6, r3, 0x1e
/* 801CE46C 001CA0CC  7C 00 30 40 */	cmplw r0, r6
/* 801CE470 001CA0D0  40 82 00 C0 */	bne lbl_801CE530
/* 801CE474 001CA0D4  2C 06 00 00 */	cmpwi r6, 0
/* 801CE478 001CA0D8  41 82 00 58 */	beq lbl_801CE4D0
/* 801CE47C 001CA0DC  2C 05 00 00 */	cmpwi r5, 0
/* 801CE480 001CA0E0  40 82 00 0C */	bne lbl_801CE48C
/* 801CE484 001CA0E4  38 60 00 00 */	li r3, 0
/* 801CE488 001CA0E8  4E 80 00 20 */	blr
lbl_801CE48C:
/* 801CE48C 001CA0EC  20 06 00 03 */	subfic r0, r6, 3
/* 801CE490 001CA0F0  7C 09 03 A6 */	mtctr r0
/* 801CE494 001CA0F4  2C 00 00 00 */	cmpwi r0, 0
/* 801CE498 001CA0F8  41 82 00 30 */	beq lbl_801CE4C8
lbl_801CE49C:
/* 801CE49C 001CA0FC  8C A3 00 01 */	lbzu r5, 1(r3)
/* 801CE4A0 001CA100  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CE4A4 001CA104  7C 00 28 51 */	subf. r0, r0, r5
/* 801CE4A8 001CA108  41 82 00 0C */	beq lbl_801CE4B4
/* 801CE4AC 001CA10C  7C 03 03 78 */	mr r3, r0
/* 801CE4B0 001CA110  4E 80 00 20 */	blr
lbl_801CE4B4:
/* 801CE4B4 001CA114  2C 05 00 00 */	cmpwi r5, 0
/* 801CE4B8 001CA118  40 82 00 0C */	bne lbl_801CE4C4
/* 801CE4BC 001CA11C  38 60 00 00 */	li r3, 0
/* 801CE4C0 001CA120  4E 80 00 20 */	blr
lbl_801CE4C4:
/* 801CE4C4 001CA124  42 00 FF D8 */	bdnz lbl_801CE49C
lbl_801CE4C8:
/* 801CE4C8 001CA128  38 63 00 01 */	addi r3, r3, 1
/* 801CE4CC 001CA12C  38 84 00 01 */	addi r4, r4, 1
lbl_801CE4D0:
/* 801CE4D0 001CA130  80 E3 00 00 */	lwz r7, 0(r3)
/* 801CE4D4 001CA134  3C A0 80 81 */	lis r5, 0x80808080@ha
/* 801CE4D8 001CA138  38 C5 80 80 */	addi r6, r5, 0x80808080@l
/* 801CE4DC 001CA13C  81 04 00 00 */	lwz r8, 0(r4)
/* 801CE4E0 001CA140  3C A7 FE FF */	addis r5, r7, 0xfeff
/* 801CE4E4 001CA144  38 A5 FE FF */	addi r5, r5, -257
/* 801CE4E8 001CA148  7C A5 38 78 */	andc r5, r5, r7
/* 801CE4EC 001CA14C  7C A0 30 39 */	and. r0, r5, r6
/* 801CE4F0 001CA150  40 82 00 28 */	bne lbl_801CE518
/* 801CE4F4 001CA154  48 00 00 1C */	b lbl_801CE510
lbl_801CE4F8:
/* 801CE4F8 001CA158  84 E3 00 04 */	lwzu r7, 4(r3)
/* 801CE4FC 001CA15C  85 04 00 04 */	lwzu r8, 4(r4)
/* 801CE500 001CA160  3C A7 FE FF */	addis r5, r7, 0xfeff
/* 801CE504 001CA164  38 05 FE FF */	addi r0, r5, -257
/* 801CE508 001CA168  7C 00 30 39 */	and. r0, r0, r6
/* 801CE50C 001CA16C  40 82 00 0C */	bne lbl_801CE518
lbl_801CE510:
/* 801CE510 001CA170  7C 07 40 40 */	cmplw r7, r8
/* 801CE514 001CA174  41 82 FF E4 */	beq lbl_801CE4F8
lbl_801CE518:
/* 801CE518 001CA178  88 A3 00 00 */	lbz r5, 0(r3)
/* 801CE51C 001CA17C  88 04 00 00 */	lbz r0, 0(r4)
/* 801CE520 001CA180  7C 00 28 51 */	subf. r0, r0, r5
/* 801CE524 001CA184  41 82 00 0C */	beq lbl_801CE530
/* 801CE528 001CA188  7C 03 03 78 */	mr r3, r0
/* 801CE52C 001CA18C  4E 80 00 20 */	blr
lbl_801CE530:
/* 801CE530 001CA190  2C 05 00 00 */	cmpwi r5, 0
/* 801CE534 001CA194  40 82 00 0C */	bne lbl_801CE540
/* 801CE538 001CA198  38 60 00 00 */	li r3, 0
/* 801CE53C 001CA19C  4E 80 00 20 */	blr
lbl_801CE540:
/* 801CE540 001CA1A0  8C A3 00 01 */	lbzu r5, 1(r3)
/* 801CE544 001CA1A4  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CE548 001CA1A8  7C 00 28 51 */	subf. r0, r0, r5
/* 801CE54C 001CA1AC  41 82 00 0C */	beq lbl_801CE558
/* 801CE550 001CA1B0  7C 03 03 78 */	mr r3, r0
/* 801CE554 001CA1B4  4E 80 00 20 */	blr
lbl_801CE558:
/* 801CE558 001CA1B8  2C 05 00 00 */	cmpwi r5, 0
/* 801CE55C 001CA1BC  40 82 FF E4 */	bne lbl_801CE540
/* 801CE560 001CA1C0  38 60 00 00 */	li r3, 0
/* 801CE564 001CA1C4  4E 80 00 20 */	blr

.global strncmp
strncmp:
/* 801CE568 001CA1C8  38 63 FF FF */	addi r3, r3, -1
/* 801CE56C 001CA1CC  38 84 FF FF */	addi r4, r4, -1
/* 801CE570 001CA1D0  38 C5 00 01 */	addi r6, r5, 1
/* 801CE574 001CA1D4  48 00 00 24 */	b lbl_801CE598
lbl_801CE578:
/* 801CE578 001CA1D8  8C 03 00 01 */	lbzu r0, 1(r3)
/* 801CE57C 001CA1DC  8C A4 00 01 */	lbzu r5, 1(r4)
/* 801CE580 001CA1E0  7C 00 28 40 */	cmplw r0, r5
/* 801CE584 001CA1E4  41 82 00 0C */	beq lbl_801CE590
/* 801CE588 001CA1E8  7C 65 00 50 */	subf r3, r5, r0
/* 801CE58C 001CA1EC  4E 80 00 20 */	blr
lbl_801CE590:
/* 801CE590 001CA1F0  2C 00 00 00 */	cmpwi r0, 0
/* 801CE594 001CA1F4  41 82 00 0C */	beq lbl_801CE5A0
lbl_801CE598:
/* 801CE598 001CA1F8  34 C6 FF FF */	addic. r6, r6, -1
/* 801CE59C 001CA1FC  40 82 FF DC */	bne lbl_801CE578
lbl_801CE5A0:
/* 801CE5A0 001CA200  38 60 00 00 */	li r3, 0
/* 801CE5A4 001CA204  4E 80 00 20 */	blr

.global strchr
strchr:
/* 801CE5A8 001CA208  38 63 FF FF */	addi r3, r3, -1
/* 801CE5AC 001CA20C  54 80 06 3E */	clrlwi r0, r4, 0x18
/* 801CE5B0 001CA210  48 00 00 0C */	b lbl_801CE5BC
lbl_801CE5B4:
/* 801CE5B4 001CA214  7C 04 00 40 */	cmplw r4, r0
/* 801CE5B8 001CA218  4D 82 00 20 */	beqlr
lbl_801CE5BC:
/* 801CE5BC 001CA21C  8C 83 00 01 */	lbzu r4, 1(r3)
/* 801CE5C0 001CA220  2C 04 00 00 */	cmpwi r4, 0
/* 801CE5C4 001CA224  40 82 FF F0 */	bne lbl_801CE5B4
/* 801CE5C8 001CA228  2C 00 00 00 */	cmpwi r0, 0
/* 801CE5CC 001CA22C  4D 82 00 20 */	beqlr
/* 801CE5D0 001CA230  38 60 00 00 */	li r3, 0
/* 801CE5D4 001CA234  4E 80 00 20 */	blr

.global strcspn
strcspn:
/* 801CE5D8 001CA238  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 801CE5DC 001CA23C  38 00 00 00 */	li r0, 0
/* 801CE5E0 001CA240  39 04 FF FF */	addi r8, r4, -1
/* 801CE5E4 001CA244  38 80 00 01 */	li r4, 1
/* 801CE5E8 001CA248  90 01 00 08 */	stw r0, 8(r1)
/* 801CE5EC 001CA24C  38 C1 00 08 */	addi r6, r1, 8
/* 801CE5F0 001CA250  90 01 00 0C */	stw r0, 0xc(r1)
/* 801CE5F4 001CA254  90 01 00 10 */	stw r0, 0x10(r1)
/* 801CE5F8 001CA258  90 01 00 14 */	stw r0, 0x14(r1)
/* 801CE5FC 001CA25C  90 01 00 18 */	stw r0, 0x18(r1)
/* 801CE600 001CA260  90 01 00 1C */	stw r0, 0x1c(r1)
/* 801CE604 001CA264  90 01 00 20 */	stw r0, 0x20(r1)
/* 801CE608 001CA268  90 01 00 24 */	stw r0, 0x24(r1)
/* 801CE60C 001CA26C  48 00 00 20 */	b lbl_801CE62C
lbl_801CE610:
/* 801CE610 001CA270  54 07 EE FE */	rlwinm r7, r0, 0x1d, 0x1b, 0x1f
/* 801CE614 001CA274  54 00 07 7E */	clrlwi r0, r0, 0x1d
/* 801CE618 001CA278  7C 80 00 30 */	slw r0, r4, r0
/* 801CE61C 001CA27C  7C A6 38 AE */	lbzx r5, r6, r7
/* 801CE620 001CA280  54 00 06 3E */	clrlwi r0, r0, 0x18
/* 801CE624 001CA284  7C A0 03 78 */	or r0, r5, r0
/* 801CE628 001CA288  7C 06 39 AE */	stbx r0, r6, r7
lbl_801CE62C:
/* 801CE62C 001CA28C  8C 08 00 01 */	lbzu r0, 1(r8)
/* 801CE630 001CA290  2C 00 00 00 */	cmpwi r0, 0
/* 801CE634 001CA294  40 82 FF DC */	bne lbl_801CE610
/* 801CE638 001CA298  38 E3 FF FF */	addi r7, r3, -1
/* 801CE63C 001CA29C  38 C1 00 08 */	addi r6, r1, 8
/* 801CE640 001CA2A0  38 80 00 01 */	li r4, 1
/* 801CE644 001CA2A4  48 00 00 20 */	b lbl_801CE664
lbl_801CE648:
/* 801CE648 001CA2A8  54 05 EE FE */	rlwinm r5, r0, 0x1d, 0x1b, 0x1f
/* 801CE64C 001CA2AC  54 00 07 7E */	clrlwi r0, r0, 0x1d
/* 801CE650 001CA2B0  7C 80 00 30 */	slw r0, r4, r0
/* 801CE654 001CA2B4  7C A6 28 AE */	lbzx r5, r6, r5
/* 801CE658 001CA2B8  54 00 06 3E */	clrlwi r0, r0, 0x18
/* 801CE65C 001CA2BC  7C A0 00 39 */	and. r0, r5, r0
/* 801CE660 001CA2C0  40 82 00 10 */	bne lbl_801CE670
lbl_801CE664:
/* 801CE664 001CA2C4  8C 07 00 01 */	lbzu r0, 1(r7)
/* 801CE668 001CA2C8  2C 00 00 00 */	cmpwi r0, 0
/* 801CE66C 001CA2CC  40 82 FF DC */	bne lbl_801CE648
lbl_801CE670:
/* 801CE670 001CA2D0  7C 63 38 50 */	subf r3, r3, r7
/* 801CE674 001CA2D4  38 21 00 30 */	addi r1, r1, 0x30
/* 801CE678 001CA2D8  4E 80 00 20 */	blr

.global strtok
strtok:
/* 801CE67C 001CA2DC  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 801CE680 001CA2E0  38 00 00 00 */	li r0, 0
/* 801CE684 001CA2E4  2C 03 00 00 */	cmpwi r3, 0
/* 801CE688 001CA2E8  90 01 00 08 */	stw r0, 8(r1)
/* 801CE68C 001CA2EC  90 01 00 0C */	stw r0, 0xc(r1)
/* 801CE690 001CA2F0  90 01 00 10 */	stw r0, 0x10(r1)
/* 801CE694 001CA2F4  90 01 00 14 */	stw r0, 0x14(r1)
/* 801CE698 001CA2F8  90 01 00 18 */	stw r0, 0x18(r1)
/* 801CE69C 001CA2FC  90 01 00 1C */	stw r0, 0x1c(r1)
/* 801CE6A0 001CA300  90 01 00 20 */	stw r0, 0x20(r1)
/* 801CE6A4 001CA304  90 01 00 24 */	stw r0, 0x24(r1)
/* 801CE6A8 001CA308  41 82 00 08 */	beq lbl_801CE6B0
/* 801CE6AC 001CA30C  90 6D 83 F4 */	stw r3, lbl_8063D6B4-_SDA_BASE_(r13)
lbl_801CE6B0:
/* 801CE6B0 001CA310  38 E4 FF FF */	addi r7, r4, -1
/* 801CE6B4 001CA314  38 A1 00 08 */	addi r5, r1, 8
/* 801CE6B8 001CA318  38 60 00 01 */	li r3, 1
/* 801CE6BC 001CA31C  48 00 00 20 */	b lbl_801CE6DC
lbl_801CE6C0:
/* 801CE6C0 001CA320  54 06 EE FE */	rlwinm r6, r0, 0x1d, 0x1b, 0x1f
/* 801CE6C4 001CA324  54 00 07 7E */	clrlwi r0, r0, 0x1d
/* 801CE6C8 001CA328  7C 60 00 30 */	slw r0, r3, r0
/* 801CE6CC 001CA32C  7C 85 30 AE */	lbzx r4, r5, r6
/* 801CE6D0 001CA330  54 00 06 3E */	clrlwi r0, r0, 0x18
/* 801CE6D4 001CA334  7C 80 03 78 */	or r0, r4, r0
/* 801CE6D8 001CA338  7C 05 31 AE */	stbx r0, r5, r6
lbl_801CE6DC:
/* 801CE6DC 001CA33C  8C 07 00 01 */	lbzu r0, 1(r7)
/* 801CE6E0 001CA340  2C 00 00 00 */	cmpwi r0, 0
/* 801CE6E4 001CA344  40 82 FF DC */	bne lbl_801CE6C0
/* 801CE6E8 001CA348  80 8D 83 F4 */	lwz r4, lbl_8063D6B4-_SDA_BASE_(r13)
/* 801CE6EC 001CA34C  38 A1 00 08 */	addi r5, r1, 8
/* 801CE6F0 001CA350  38 60 00 01 */	li r3, 1
/* 801CE6F4 001CA354  38 E4 FF FF */	addi r7, r4, -1
/* 801CE6F8 001CA358  48 00 00 20 */	b lbl_801CE718
lbl_801CE6FC:
/* 801CE6FC 001CA35C  54 C4 EE FE */	rlwinm r4, r6, 0x1d, 0x1b, 0x1f
/* 801CE700 001CA360  54 C0 07 7E */	clrlwi r0, r6, 0x1d
/* 801CE704 001CA364  7C 60 00 30 */	slw r0, r3, r0
/* 801CE708 001CA368  7C 85 20 AE */	lbzx r4, r5, r4
/* 801CE70C 001CA36C  54 00 06 3E */	clrlwi r0, r0, 0x18
/* 801CE710 001CA370  7C 80 00 39 */	and. r0, r4, r0
/* 801CE714 001CA374  41 82 00 10 */	beq lbl_801CE724
lbl_801CE718:
/* 801CE718 001CA378  8C C7 00 01 */	lbzu r6, 1(r7)
/* 801CE71C 001CA37C  2C 06 00 00 */	cmpwi r6, 0
/* 801CE720 001CA380  40 82 FF DC */	bne lbl_801CE6FC
lbl_801CE724:
/* 801CE724 001CA384  2C 06 00 00 */	cmpwi r6, 0
/* 801CE728 001CA388  40 82 00 14 */	bne lbl_801CE73C
/* 801CE72C 001CA38C  80 0D 83 F0 */	lwz r0, lbl_8063D6B0-_SDA_BASE_(r13)
/* 801CE730 001CA390  38 60 00 00 */	li r3, 0
/* 801CE734 001CA394  90 0D 83 F4 */	stw r0, lbl_8063D6B4-_SDA_BASE_(r13)
/* 801CE738 001CA398  48 00 00 60 */	b lbl_801CE798
lbl_801CE73C:
/* 801CE73C 001CA39C  7C E3 3B 78 */	mr r3, r7
/* 801CE740 001CA3A0  38 C1 00 08 */	addi r6, r1, 8
/* 801CE744 001CA3A4  38 80 00 01 */	li r4, 1
/* 801CE748 001CA3A8  48 00 00 20 */	b lbl_801CE768
lbl_801CE74C:
/* 801CE74C 001CA3AC  55 05 EE FE */	rlwinm r5, r8, 0x1d, 0x1b, 0x1f
/* 801CE750 001CA3B0  55 00 07 7E */	clrlwi r0, r8, 0x1d
/* 801CE754 001CA3B4  7C 80 00 30 */	slw r0, r4, r0
/* 801CE758 001CA3B8  7C A6 28 AE */	lbzx r5, r6, r5
/* 801CE75C 001CA3BC  54 00 06 3E */	clrlwi r0, r0, 0x18
/* 801CE760 001CA3C0  7C A0 00 39 */	and. r0, r5, r0
/* 801CE764 001CA3C4  40 82 00 10 */	bne lbl_801CE774
lbl_801CE768:
/* 801CE768 001CA3C8  8D 07 00 01 */	lbzu r8, 1(r7)
/* 801CE76C 001CA3CC  2C 08 00 00 */	cmpwi r8, 0
/* 801CE770 001CA3D0  40 82 FF DC */	bne lbl_801CE74C
lbl_801CE774:
/* 801CE774 001CA3D4  2C 08 00 00 */	cmpwi r8, 0
/* 801CE778 001CA3D8  40 82 00 10 */	bne lbl_801CE788
/* 801CE77C 001CA3DC  80 0D 83 F0 */	lwz r0, lbl_8063D6B0-_SDA_BASE_(r13)
/* 801CE780 001CA3E0  90 0D 83 F4 */	stw r0, lbl_8063D6B4-_SDA_BASE_(r13)
/* 801CE784 001CA3E4  48 00 00 14 */	b lbl_801CE798
lbl_801CE788:
/* 801CE788 001CA3E8  38 87 00 01 */	addi r4, r7, 1
/* 801CE78C 001CA3EC  38 00 00 00 */	li r0, 0
/* 801CE790 001CA3F0  90 8D 83 F4 */	stw r4, lbl_8063D6B4-_SDA_BASE_(r13)
/* 801CE794 001CA3F4  98 07 00 00 */	stb r0, 0(r7)
lbl_801CE798:
/* 801CE798 001CA3F8  38 21 00 30 */	addi r1, r1, 0x30
/* 801CE79C 001CA3FC  4E 80 00 20 */	blr

.global strstr
strstr:
/* 801CE7A0 001CA400  2C 04 00 00 */	cmpwi r4, 0
/* 801CE7A4 001CA404  38 A3 FF FF */	addi r5, r3, -1
/* 801CE7A8 001CA408  4D 82 00 20 */	beqlr
/* 801CE7AC 001CA40C  88 C4 00 00 */	lbz r6, 0(r4)
/* 801CE7B0 001CA410  2C 06 00 00 */	cmpwi r6, 0
/* 801CE7B4 001CA414  40 82 00 44 */	bne lbl_801CE7F8
/* 801CE7B8 001CA418  4E 80 00 20 */	blr
/* 801CE7BC 001CA41C  48 00 00 3C */	b lbl_801CE7F8
lbl_801CE7C0:
/* 801CE7C0 001CA420  7C 00 30 40 */	cmplw r0, r6
/* 801CE7C4 001CA424  40 82 00 34 */	bne lbl_801CE7F8
/* 801CE7C8 001CA428  38 E5 FF FF */	addi r7, r5, -1
/* 801CE7CC 001CA42C  39 04 FF FF */	addi r8, r4, -1
lbl_801CE7D0:
/* 801CE7D0 001CA430  8C 07 00 01 */	lbzu r0, 1(r7)
/* 801CE7D4 001CA434  8C 68 00 01 */	lbzu r3, 1(r8)
/* 801CE7D8 001CA438  7C 00 18 40 */	cmplw r0, r3
/* 801CE7DC 001CA43C  40 82 00 0C */	bne lbl_801CE7E8
/* 801CE7E0 001CA440  2C 00 00 00 */	cmpwi r0, 0
/* 801CE7E4 001CA444  40 82 FF EC */	bne lbl_801CE7D0
lbl_801CE7E8:
/* 801CE7E8 001CA448  2C 03 00 00 */	cmpwi r3, 0
/* 801CE7EC 001CA44C  40 82 00 0C */	bne lbl_801CE7F8
/* 801CE7F0 001CA450  7C A3 2B 78 */	mr r3, r5
/* 801CE7F4 001CA454  4E 80 00 20 */	blr
lbl_801CE7F8:
/* 801CE7F8 001CA458  8C 05 00 01 */	lbzu r0, 1(r5)
/* 801CE7FC 001CA45C  2C 00 00 00 */	cmpwi r0, 0
/* 801CE800 001CA460  40 82 FF C0 */	bne lbl_801CE7C0
/* 801CE804 001CA464  38 60 00 00 */	li r3, 0
/* 801CE808 001CA468  4E 80 00 20 */	blr