summaryrefslogtreecommitdiff
path: root/asm/libstdc++/direct_io.s
blob: ed81bcc01f5671d4fd6fe1fa6268d360a1221122 (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
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
.include "macros.inc"

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

.global fread
fread:
/* 801C9584 001C51E4  48 00 00 04 */	b __fread

__fread:
/* 801C9588 001C51E8  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 801C958C 001C51EC  7C 08 02 A6 */	mflr r0
/* 801C9590 001C51F0  90 01 00 34 */	stw r0, 0x34(r1)
/* 801C9594 001C51F4  BF 21 00 14 */	stmw r25, 0x14(r1)
/* 801C9598 001C51F8  7C 9B 23 78 */	mr r27, r4
/* 801C959C 001C51FC  7C DC 33 78 */	mr r28, r6
/* 801C95A0 001C5200  7C 7A 1B 78 */	mr r26, r3
/* 801C95A4 001C5204  7C B9 2B 78 */	mr r25, r5
/* 801C95A8 001C5208  38 80 00 00 */	li r4, 0
/* 801C95AC 001C520C  7F 83 E3 78 */	mr r3, r28
/* 801C95B0 001C5210  48 00 72 B5 */	bl fwide
/* 801C95B4 001C5214  2C 03 00 00 */	cmpwi r3, 0
/* 801C95B8 001C5218  40 82 00 10 */	bne lbl_801C95C8
/* 801C95BC 001C521C  7F 83 E3 78 */	mr r3, r28
/* 801C95C0 001C5220  38 80 FF FF */	li r4, -1
/* 801C95C4 001C5224  48 00 72 A1 */	bl fwide
lbl_801C95C8:
/* 801C95C8 001C5228  7F DB C9 D7 */	mullw. r30, r27, r25
/* 801C95CC 001C522C  41 82 00 1C */	beq lbl_801C95E8
/* 801C95D0 001C5230  88 1C 00 0A */	lbz r0, 0xa(r28)
/* 801C95D4 001C5234  2C 00 00 00 */	cmpwi r0, 0
/* 801C95D8 001C5238  40 82 00 10 */	bne lbl_801C95E8
/* 801C95DC 001C523C  80 7C 00 04 */	lwz r3, 4(r28)
/* 801C95E0 001C5240  54 60 57 7F */	rlwinm. r0, r3, 0xa, 0x1d, 0x1f
/* 801C95E4 001C5244  40 82 00 0C */	bne lbl_801C95F0
lbl_801C95E8:
/* 801C95E8 001C5248  38 60 00 00 */	li r3, 0
/* 801C95EC 001C524C  48 00 02 C8 */	b lbl_801C98B4
lbl_801C95F0:
/* 801C95F0 001C5250  54 60 6F FF */	rlwinm. r0, r3, 0xd, 0x1f, 0x1f
/* 801C95F4 001C5254  3B E0 00 01 */	li r31, 1
/* 801C95F8 001C5258  41 82 00 14 */	beq lbl_801C960C
/* 801C95FC 001C525C  54 60 3F BE */	rlwinm r0, r3, 7, 0x1e, 0x1f
/* 801C9600 001C5260  28 00 00 02 */	cmplwi r0, 2
/* 801C9604 001C5264  41 82 00 08 */	beq lbl_801C960C
/* 801C9608 001C5268  3B E0 00 00 */	li r31, 0
lbl_801C960C:
/* 801C960C 001C526C  80 7C 00 08 */	lwz r3, 8(r28)
/* 801C9610 001C5270  54 60 1F 7F */	rlwinm. r0, r3, 3, 0x1d, 0x1f
/* 801C9614 001C5274  40 82 00 24 */	bne lbl_801C9638
/* 801C9618 001C5278  80 1C 00 04 */	lwz r0, 4(r28)
/* 801C961C 001C527C  54 00 2F FF */	rlwinm. r0, r0, 5, 0x1f, 0x1f
/* 801C9620 001C5280  41 82 00 18 */	beq lbl_801C9638
/* 801C9624 001C5284  38 00 00 02 */	li r0, 2
/* 801C9628 001C5288  50 03 E8 04 */	rlwimi r3, r0, 0x1d, 0, 2
/* 801C962C 001C528C  38 00 00 00 */	li r0, 0
/* 801C9630 001C5290  90 7C 00 08 */	stw r3, 8(r28)
/* 801C9634 001C5294  90 1C 00 28 */	stw r0, 0x28(r28)
lbl_801C9638:
/* 801C9638 001C5298  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C963C 001C529C  54 00 1F 7E */	srwi r0, r0, 0x1d
/* 801C9640 001C52A0  28 00 00 02 */	cmplwi r0, 2
/* 801C9644 001C52A4  40 80 00 1C */	bge lbl_801C9660
/* 801C9648 001C52A8  38 60 00 01 */	li r3, 1
/* 801C964C 001C52AC  38 00 00 00 */	li r0, 0
/* 801C9650 001C52B0  98 7C 00 0A */	stb r3, 0xa(r28)
/* 801C9654 001C52B4  38 60 00 00 */	li r3, 0
/* 801C9658 001C52B8  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C965C 001C52BC  48 00 02 58 */	b lbl_801C98B4
lbl_801C9660:
/* 801C9660 001C52C0  80 1C 00 04 */	lwz r0, 4(r28)
/* 801C9664 001C52C4  54 00 3F FF */	rlwinm. r0, r0, 7, 0x1f, 0x1f
/* 801C9668 001C52C8  41 82 00 28 */	beq lbl_801C9690
/* 801C966C 001C52CC  4B FF E2 CD */	bl __flush_line_buffered_output_files
/* 801C9670 001C52D0  2C 03 00 00 */	cmpwi r3, 0
/* 801C9674 001C52D4  41 82 00 1C */	beq lbl_801C9690
/* 801C9678 001C52D8  38 60 00 01 */	li r3, 1
/* 801C967C 001C52DC  38 00 00 00 */	li r0, 0
/* 801C9680 001C52E0  98 7C 00 0A */	stb r3, 0xa(r28)
/* 801C9684 001C52E4  38 60 00 00 */	li r3, 0
/* 801C9688 001C52E8  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C968C 001C52EC  48 00 02 28 */	b lbl_801C98B4
lbl_801C9690:
/* 801C9690 001C52F0  2C 1E 00 00 */	cmpwi r30, 0
/* 801C9694 001C52F4  3B A0 00 00 */	li r29, 0
/* 801C9698 001C52F8  41 82 00 AC */	beq lbl_801C9744
/* 801C969C 001C52FC  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C96A0 001C5300  54 00 1F 7E */	srwi r0, r0, 0x1d
/* 801C96A4 001C5304  28 00 00 03 */	cmplwi r0, 3
/* 801C96A8 001C5308  41 80 00 9C */	blt lbl_801C9744
lbl_801C96AC:
/* 801C96AC 001C530C  7F 83 E3 78 */	mr r3, r28
/* 801C96B0 001C5310  38 80 00 00 */	li r4, 0
/* 801C96B4 001C5314  48 00 71 B1 */	bl fwide
/* 801C96B8 001C5318  2C 03 00 01 */	cmpwi r3, 1
/* 801C96BC 001C531C  40 82 00 28 */	bne lbl_801C96E4
/* 801C96C0 001C5320  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C96C4 001C5324  3B BD 00 02 */	addi r29, r29, 2
/* 801C96C8 001C5328  3B DE FF FE */	addi r30, r30, -2
/* 801C96CC 001C532C  54 00 27 3C */	rlwinm r0, r0, 4, 0x1c, 0x1e
/* 801C96D0 001C5330  7C 7C 02 14 */	add r3, r28, r0
/* 801C96D4 001C5334  A0 03 00 0C */	lhz r0, 0xc(r3)
/* 801C96D8 001C5338  B0 1A 00 00 */	sth r0, 0(r26)
/* 801C96DC 001C533C  3B 5A 00 02 */	addi r26, r26, 2
/* 801C96E0 001C5340  48 00 00 24 */	b lbl_801C9704
lbl_801C96E4:
/* 801C96E4 001C5344  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C96E8 001C5348  3B BD 00 01 */	addi r29, r29, 1
/* 801C96EC 001C534C  3B DE FF FF */	addi r30, r30, -1
/* 801C96F0 001C5350  54 00 1F 7E */	srwi r0, r0, 0x1d
/* 801C96F4 001C5354  7C 7C 02 14 */	add r3, r28, r0
/* 801C96F8 001C5358  88 03 00 0C */	lbz r0, 0xc(r3)
/* 801C96FC 001C535C  98 1A 00 00 */	stb r0, 0(r26)
/* 801C9700 001C5360  3B 5A 00 01 */	addi r26, r26, 1
lbl_801C9704:
/* 801C9704 001C5364  80 9C 00 08 */	lwz r4, 8(r28)
/* 801C9708 001C5368  2C 1E 00 00 */	cmpwi r30, 0
/* 801C970C 001C536C  54 83 1F 7E */	srwi r3, r4, 0x1d
/* 801C9710 001C5370  38 03 FF FF */	addi r0, r3, -1
/* 801C9714 001C5374  50 04 E8 04 */	rlwimi r4, r0, 0x1d, 0, 2
/* 801C9718 001C5378  90 9C 00 08 */	stw r4, 8(r28)
/* 801C971C 001C537C  41 82 00 10 */	beq lbl_801C972C
/* 801C9720 001C5380  54 80 1F 7E */	srwi r0, r4, 0x1d
/* 801C9724 001C5384  28 00 00 03 */	cmplwi r0, 3
/* 801C9728 001C5388  40 80 FF 84 */	bge lbl_801C96AC
lbl_801C972C:
/* 801C972C 001C538C  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C9730 001C5390  54 00 1F 7E */	srwi r0, r0, 0x1d
/* 801C9734 001C5394  28 00 00 02 */	cmplwi r0, 2
/* 801C9738 001C5398  40 82 00 0C */	bne lbl_801C9744
/* 801C973C 001C539C  80 1C 00 30 */	lwz r0, 0x30(r28)
/* 801C9740 001C53A0  90 1C 00 28 */	stw r0, 0x28(r28)
lbl_801C9744:
/* 801C9744 001C53A4  2C 1E 00 00 */	cmpwi r30, 0
/* 801C9748 001C53A8  41 82 00 D8 */	beq lbl_801C9820
/* 801C974C 001C53AC  80 1C 00 28 */	lwz r0, 0x28(r28)
/* 801C9750 001C53B0  2C 00 00 00 */	cmpwi r0, 0
/* 801C9754 001C53B4  40 82 00 0C */	bne lbl_801C9760
/* 801C9758 001C53B8  2C 1F 00 00 */	cmpwi r31, 0
/* 801C975C 001C53BC  41 82 00 C4 */	beq lbl_801C9820
lbl_801C9760:
/* 801C9760 001C53C0  80 1C 00 28 */	lwz r0, 0x28(r28)
/* 801C9764 001C53C4  2C 00 00 00 */	cmpwi r0, 0
/* 801C9768 001C53C8  40 82 00 5C */	bne lbl_801C97C4
/* 801C976C 001C53CC  7F 83 E3 78 */	mr r3, r28
/* 801C9770 001C53D0  38 80 00 00 */	li r4, 0
/* 801C9774 001C53D4  38 A0 00 00 */	li r5, 0
/* 801C9778 001C53D8  4B FF FC 59 */	bl __load_buffer
/* 801C977C 001C53DC  2C 03 00 00 */	cmpwi r3, 0
/* 801C9780 001C53E0  41 82 00 44 */	beq lbl_801C97C4
/* 801C9784 001C53E4  2C 03 00 01 */	cmpwi r3, 1
/* 801C9788 001C53E8  40 82 00 18 */	bne lbl_801C97A0
/* 801C978C 001C53EC  38 60 00 01 */	li r3, 1
/* 801C9790 001C53F0  38 00 00 00 */	li r0, 0
/* 801C9794 001C53F4  98 7C 00 0A */	stb r3, 0xa(r28)
/* 801C9798 001C53F8  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C979C 001C53FC  48 00 00 20 */	b lbl_801C97BC
lbl_801C97A0:
/* 801C97A0 001C5400  80 7C 00 08 */	lwz r3, 8(r28)
/* 801C97A4 001C5404  38 80 00 00 */	li r4, 0
/* 801C97A8 001C5408  38 00 00 01 */	li r0, 1
/* 801C97AC 001C540C  90 9C 00 28 */	stw r4, 0x28(r28)
/* 801C97B0 001C5410  54 63 00 FE */	clrlwi r3, r3, 3
/* 801C97B4 001C5414  90 7C 00 08 */	stw r3, 8(r28)
/* 801C97B8 001C5418  98 1C 00 09 */	stb r0, 9(r28)
lbl_801C97BC:
/* 801C97BC 001C541C  3B C0 00 00 */	li r30, 0
/* 801C97C0 001C5420  48 00 00 60 */	b lbl_801C9820
lbl_801C97C4:
/* 801C97C4 001C5424  80 BC 00 28 */	lwz r5, 0x28(r28)
/* 801C97C8 001C5428  7C 05 F0 40 */	cmplw r5, r30
/* 801C97CC 001C542C  90 A1 00 08 */	stw r5, 8(r1)
/* 801C97D0 001C5430  40 81 00 0C */	ble lbl_801C97DC
/* 801C97D4 001C5434  7F C5 F3 78 */	mr r5, r30
/* 801C97D8 001C5438  93 C1 00 08 */	stw r30, 8(r1)
lbl_801C97DC:
/* 801C97DC 001C543C  80 9C 00 24 */	lwz r4, 0x24(r28)
/* 801C97E0 001C5440  7F 43 D3 78 */	mr r3, r26
/* 801C97E4 001C5444  4B E3 A8 1D */	bl memcpy
/* 801C97E8 001C5448  80 81 00 08 */	lwz r4, 8(r1)
/* 801C97EC 001C544C  80 7C 00 24 */	lwz r3, 0x24(r28)
/* 801C97F0 001C5450  80 1C 00 28 */	lwz r0, 0x28(r28)
/* 801C97F4 001C5454  7F C4 F0 51 */	subf. r30, r4, r30
/* 801C97F8 001C5458  7C 63 22 14 */	add r3, r3, r4
/* 801C97FC 001C545C  7F 5A 22 14 */	add r26, r26, r4
/* 801C9800 001C5460  90 7C 00 24 */	stw r3, 0x24(r28)
/* 801C9804 001C5464  7F BD 22 14 */	add r29, r29, r4
/* 801C9808 001C5468  80 61 00 08 */	lwz r3, 8(r1)
/* 801C980C 001C546C  7C 03 00 50 */	subf r0, r3, r0
/* 801C9810 001C5470  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C9814 001C5474  41 82 00 0C */	beq lbl_801C9820
/* 801C9818 001C5478  2C 1F 00 00 */	cmpwi r31, 0
/* 801C981C 001C547C  40 82 FF 44 */	bne lbl_801C9760
lbl_801C9820:
/* 801C9820 001C5480  2C 1E 00 00 */	cmpwi r30, 0
/* 801C9824 001C5484  41 82 00 8C */	beq lbl_801C98B0
/* 801C9828 001C5488  2C 1F 00 00 */	cmpwi r31, 0
/* 801C982C 001C548C  40 82 00 84 */	bne lbl_801C98B0
/* 801C9830 001C5490  83 FC 00 1C */	lwz r31, 0x1c(r28)
/* 801C9834 001C5494  7F 83 E3 78 */	mr r3, r28
/* 801C9838 001C5498  83 3C 00 20 */	lwz r25, 0x20(r28)
/* 801C983C 001C549C  38 81 00 08 */	addi r4, r1, 8
/* 801C9840 001C54A0  93 5C 00 1C */	stw r26, 0x1c(r28)
/* 801C9844 001C54A4  38 A0 00 01 */	li r5, 1
/* 801C9848 001C54A8  93 DC 00 20 */	stw r30, 0x20(r28)
/* 801C984C 001C54AC  4B FF FB 85 */	bl __load_buffer
/* 801C9850 001C54B0  2C 03 00 00 */	cmpwi r3, 0
/* 801C9854 001C54B4  41 82 00 3C */	beq lbl_801C9890
/* 801C9858 001C54B8  2C 03 00 01 */	cmpwi r3, 1
/* 801C985C 001C54BC  40 82 00 18 */	bne lbl_801C9874
/* 801C9860 001C54C0  38 60 00 01 */	li r3, 1
/* 801C9864 001C54C4  38 00 00 00 */	li r0, 0
/* 801C9868 001C54C8  98 7C 00 0A */	stb r3, 0xa(r28)
/* 801C986C 001C54CC  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C9870 001C54D0  48 00 00 20 */	b lbl_801C9890
lbl_801C9874:
/* 801C9874 001C54D4  80 7C 00 08 */	lwz r3, 8(r28)
/* 801C9878 001C54D8  38 80 00 00 */	li r4, 0
/* 801C987C 001C54DC  38 00 00 01 */	li r0, 1
/* 801C9880 001C54E0  90 9C 00 28 */	stw r4, 0x28(r28)
/* 801C9884 001C54E4  54 63 00 FE */	clrlwi r3, r3, 3
/* 801C9888 001C54E8  90 7C 00 08 */	stw r3, 8(r28)
/* 801C988C 001C54EC  98 1C 00 09 */	stb r0, 9(r28)
lbl_801C9890:
/* 801C9890 001C54F0  80 01 00 08 */	lwz r0, 8(r1)
/* 801C9894 001C54F4  7F 83 E3 78 */	mr r3, r28
/* 801C9898 001C54F8  93 FC 00 1C */	stw r31, 0x1c(r28)
/* 801C989C 001C54FC  7F BD 02 14 */	add r29, r29, r0
/* 801C98A0 001C5500  93 3C 00 20 */	stw r25, 0x20(r28)
/* 801C98A4 001C5504  4B FF FB 05 */	bl __prep_buffer
/* 801C98A8 001C5508  38 00 00 00 */	li r0, 0
/* 801C98AC 001C550C  90 1C 00 28 */	stw r0, 0x28(r28)
lbl_801C98B0:
/* 801C98B0 001C5510  7C 7D DB 96 */	divwu r3, r29, r27
lbl_801C98B4:
/* 801C98B4 001C5514  BB 21 00 14 */	lmw r25, 0x14(r1)
/* 801C98B8 001C5518  80 01 00 34 */	lwz r0, 0x34(r1)
/* 801C98BC 001C551C  7C 08 03 A6 */	mtlr r0
/* 801C98C0 001C5520  38 21 00 30 */	addi r1, r1, 0x30
/* 801C98C4 001C5524  4E 80 00 20 */	blr

.global __fwrite
__fwrite:
/* 801C98C8 001C5528  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 801C98CC 001C552C  7C 08 02 A6 */	mflr r0
/* 801C98D0 001C5530  90 01 00 34 */	stw r0, 0x34(r1)
/* 801C98D4 001C5534  BF 21 00 14 */	stmw r25, 0x14(r1)
/* 801C98D8 001C5538  7C 9B 23 78 */	mr r27, r4
/* 801C98DC 001C553C  7C DC 33 78 */	mr r28, r6
/* 801C98E0 001C5540  7C 7A 1B 78 */	mr r26, r3
/* 801C98E4 001C5544  7C B9 2B 78 */	mr r25, r5
/* 801C98E8 001C5548  38 80 00 00 */	li r4, 0
/* 801C98EC 001C554C  7F 83 E3 78 */	mr r3, r28
/* 801C98F0 001C5550  48 00 6F 75 */	bl fwide
/* 801C98F4 001C5554  2C 03 00 00 */	cmpwi r3, 0
/* 801C98F8 001C5558  40 82 00 10 */	bne lbl_801C9908
/* 801C98FC 001C555C  7F 83 E3 78 */	mr r3, r28
/* 801C9900 001C5560  38 80 FF FF */	li r4, -1
/* 801C9904 001C5564  48 00 6F 61 */	bl fwide
lbl_801C9908:
/* 801C9908 001C5568  7F DB C9 D7 */	mullw. r30, r27, r25
/* 801C990C 001C556C  41 82 00 1C */	beq lbl_801C9928
/* 801C9910 001C5570  88 1C 00 0A */	lbz r0, 0xa(r28)
/* 801C9914 001C5574  2C 00 00 00 */	cmpwi r0, 0
/* 801C9918 001C5578  40 82 00 10 */	bne lbl_801C9928
/* 801C991C 001C557C  80 1C 00 04 */	lwz r0, 4(r28)
/* 801C9920 001C5580  54 00 57 7F */	rlwinm. r0, r0, 0xa, 0x1d, 0x1f
/* 801C9924 001C5584  40 82 00 0C */	bne lbl_801C9930
lbl_801C9928:
/* 801C9928 001C5588  38 60 00 00 */	li r3, 0
/* 801C992C 001C558C  48 00 02 90 */	b lbl_801C9BBC
lbl_801C9930:
/* 801C9930 001C5590  28 00 00 02 */	cmplwi r0, 2
/* 801C9934 001C5594  40 82 00 08 */	bne lbl_801C993C
/* 801C9938 001C5598  48 00 0E 79 */	bl __stdio_atexit
lbl_801C993C:
/* 801C993C 001C559C  80 7C 00 04 */	lwz r3, 4(r28)
/* 801C9940 001C55A0  3B E0 00 01 */	li r31, 1
/* 801C9944 001C55A4  38 80 00 00 */	li r4, 0
/* 801C9948 001C55A8  54 60 6F FF */	rlwinm. r0, r3, 0xd, 0x1f, 0x1f
/* 801C994C 001C55AC  41 82 00 10 */	beq lbl_801C995C
/* 801C9950 001C55B0  54 60 3F BE */	rlwinm r0, r3, 7, 0x1e, 0x1f
/* 801C9954 001C55B4  28 00 00 02 */	cmplwi r0, 2
/* 801C9958 001C55B8  40 82 00 08 */	bne lbl_801C9960
lbl_801C995C:
/* 801C995C 001C55BC  38 80 00 01 */	li r4, 1
lbl_801C9960:
/* 801C9960 001C55C0  2C 04 00 00 */	cmpwi r4, 0
/* 801C9964 001C55C4  40 82 00 18 */	bne lbl_801C997C
/* 801C9968 001C55C8  80 1C 00 04 */	lwz r0, 4(r28)
/* 801C996C 001C55CC  54 00 3F BE */	rlwinm r0, r0, 7, 0x1e, 0x1f
/* 801C9970 001C55D0  28 00 00 01 */	cmplwi r0, 1
/* 801C9974 001C55D4  41 82 00 08 */	beq lbl_801C997C
/* 801C9978 001C55D8  3B E0 00 00 */	li r31, 0
lbl_801C997C:
/* 801C997C 001C55DC  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C9980 001C55E0  54 00 1F 7F */	rlwinm. r0, r0, 3, 0x1d, 0x1f
/* 801C9984 001C55E4  40 82 00 54 */	bne lbl_801C99D8
/* 801C9988 001C55E8  80 7C 00 04 */	lwz r3, 4(r28)
/* 801C998C 001C55EC  54 60 2F BD */	rlwinm. r0, r3, 5, 0x1e, 0x1e
/* 801C9990 001C55F0  54 60 2F 7E */	rlwinm r0, r3, 5, 0x1d, 0x1f
/* 801C9994 001C55F4  41 82 00 44 */	beq lbl_801C99D8
/* 801C9998 001C55F8  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 801C999C 001C55FC  41 82 00 24 */	beq lbl_801C99C0
/* 801C99A0 001C5600  7F 83 E3 78 */	mr r3, r28
/* 801C99A4 001C5604  38 80 00 00 */	li r4, 0
/* 801C99A8 001C5608  38 A0 00 02 */	li r5, 2
/* 801C99AC 001C560C  48 00 05 81 */	bl _fseek
/* 801C99B0 001C5610  2C 03 00 00 */	cmpwi r3, 0
/* 801C99B4 001C5614  41 82 00 0C */	beq lbl_801C99C0
/* 801C99B8 001C5618  38 60 00 00 */	li r3, 0
/* 801C99BC 001C561C  48 00 02 00 */	b lbl_801C9BBC
lbl_801C99C0:
/* 801C99C0 001C5620  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C99C4 001C5624  38 60 00 01 */	li r3, 1
/* 801C99C8 001C5628  50 60 E8 04 */	rlwimi r0, r3, 0x1d, 0, 2
/* 801C99CC 001C562C  90 1C 00 08 */	stw r0, 8(r28)
/* 801C99D0 001C5630  7F 83 E3 78 */	mr r3, r28
/* 801C99D4 001C5634  4B FF F9 D5 */	bl __prep_buffer
lbl_801C99D8:
/* 801C99D8 001C5638  80 1C 00 08 */	lwz r0, 8(r28)
/* 801C99DC 001C563C  54 00 1F 7E */	srwi r0, r0, 0x1d
/* 801C99E0 001C5640  28 00 00 01 */	cmplwi r0, 1
/* 801C99E4 001C5644  41 82 00 1C */	beq lbl_801C9A00
/* 801C99E8 001C5648  38 60 00 01 */	li r3, 1
/* 801C99EC 001C564C  38 00 00 00 */	li r0, 0
/* 801C99F0 001C5650  98 7C 00 0A */	stb r3, 0xa(r28)
/* 801C99F4 001C5654  38 60 00 00 */	li r3, 0
/* 801C99F8 001C5658  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C99FC 001C565C  48 00 01 C0 */	b lbl_801C9BBC
lbl_801C9A00:
/* 801C9A00 001C5660  2C 1E 00 00 */	cmpwi r30, 0
/* 801C9A04 001C5664  3B A0 00 00 */	li r29, 0
/* 801C9A08 001C5668  41 82 01 28 */	beq lbl_801C9B30
/* 801C9A0C 001C566C  80 7C 00 1C */	lwz r3, 0x1c(r28)
/* 801C9A10 001C5670  80 9C 00 24 */	lwz r4, 0x24(r28)
/* 801C9A14 001C5674  7C 04 18 40 */	cmplw r4, r3
/* 801C9A18 001C5678  40 82 00 0C */	bne lbl_801C9A24
/* 801C9A1C 001C567C  2C 1F 00 00 */	cmpwi r31, 0
/* 801C9A20 001C5680  41 82 01 10 */	beq lbl_801C9B30
lbl_801C9A24:
/* 801C9A24 001C5684  80 1C 00 20 */	lwz r0, 0x20(r28)
/* 801C9A28 001C5688  7C 63 20 50 */	subf r3, r3, r4
/* 801C9A2C 001C568C  7C 03 00 50 */	subf r0, r3, r0
/* 801C9A30 001C5690  90 1C 00 28 */	stw r0, 0x28(r28)
lbl_801C9A34:
/* 801C9A34 001C5694  80 BC 00 28 */	lwz r5, 0x28(r28)
/* 801C9A38 001C5698  3B 20 00 00 */	li r25, 0
/* 801C9A3C 001C569C  7C 05 F0 40 */	cmplw r5, r30
/* 801C9A40 001C56A0  90 A1 00 08 */	stw r5, 8(r1)
/* 801C9A44 001C56A4  40 81 00 0C */	ble lbl_801C9A50
/* 801C9A48 001C56A8  7F C5 F3 78 */	mr r5, r30
/* 801C9A4C 001C56AC  93 C1 00 08 */	stw r30, 8(r1)
lbl_801C9A50:
/* 801C9A50 001C56B0  80 1C 00 04 */	lwz r0, 4(r28)
/* 801C9A54 001C56B4  54 00 3F BE */	rlwinm r0, r0, 7, 0x1e, 0x1f
/* 801C9A58 001C56B8  28 00 00 01 */	cmplwi r0, 1
/* 801C9A5C 001C56BC  40 82 00 30 */	bne lbl_801C9A8C
/* 801C9A60 001C56C0  2C 05 00 00 */	cmpwi r5, 0
/* 801C9A64 001C56C4  41 82 00 28 */	beq lbl_801C9A8C
/* 801C9A68 001C56C8  7F 43 D3 78 */	mr r3, r26
/* 801C9A6C 001C56CC  38 80 00 0A */	li r4, 0xa
/* 801C9A70 001C56D0  48 00 08 FD */	bl __memrchr
/* 801C9A74 001C56D4  2C 03 00 00 */	cmpwi r3, 0
/* 801C9A78 001C56D8  7C 79 1B 78 */	mr r25, r3
/* 801C9A7C 001C56DC  41 82 00 10 */	beq lbl_801C9A8C
/* 801C9A80 001C56E0  38 03 00 01 */	addi r0, r3, 1
/* 801C9A84 001C56E4  7C BA 00 50 */	subf r5, r26, r0
/* 801C9A88 001C56E8  90 A1 00 08 */	stw r5, 8(r1)
lbl_801C9A8C:
/* 801C9A8C 001C56EC  80 A1 00 08 */	lwz r5, 8(r1)
/* 801C9A90 001C56F0  2C 05 00 00 */	cmpwi r5, 0
/* 801C9A94 001C56F4  41 82 00 38 */	beq lbl_801C9ACC
/* 801C9A98 001C56F8  80 7C 00 24 */	lwz r3, 0x24(r28)
/* 801C9A9C 001C56FC  7F 44 D3 78 */	mr r4, r26
/* 801C9AA0 001C5700  4B E3 A5 61 */	bl memcpy
/* 801C9AA4 001C5704  80 81 00 08 */	lwz r4, 8(r1)
/* 801C9AA8 001C5708  80 7C 00 24 */	lwz r3, 0x24(r28)
/* 801C9AAC 001C570C  80 1C 00 28 */	lwz r0, 0x28(r28)
/* 801C9AB0 001C5710  7F 5A 22 14 */	add r26, r26, r4
/* 801C9AB4 001C5714  7C 63 22 14 */	add r3, r3, r4
/* 801C9AB8 001C5718  7F C4 F0 50 */	subf r30, r4, r30
/* 801C9ABC 001C571C  90 7C 00 24 */	stw r3, 0x24(r28)
/* 801C9AC0 001C5720  80 61 00 08 */	lwz r3, 8(r1)
/* 801C9AC4 001C5724  7C 03 00 50 */	subf r0, r3, r0
/* 801C9AC8 001C5728  90 1C 00 28 */	stw r0, 0x28(r28)
lbl_801C9ACC:
/* 801C9ACC 001C572C  80 1C 00 28 */	lwz r0, 0x28(r28)
/* 801C9AD0 001C5730  2C 00 00 00 */	cmpwi r0, 0
/* 801C9AD4 001C5734  41 82 00 18 */	beq lbl_801C9AEC
/* 801C9AD8 001C5738  2C 19 00 00 */	cmpwi r25, 0
/* 801C9ADC 001C573C  40 82 00 10 */	bne lbl_801C9AEC
/* 801C9AE0 001C5740  80 1C 00 04 */	lwz r0, 4(r28)
/* 801C9AE4 001C5744  54 00 3F BF */	rlwinm. r0, r0, 7, 0x1e, 0x1f
/* 801C9AE8 001C5748  40 82 00 30 */	bne lbl_801C9B18
lbl_801C9AEC:
/* 801C9AEC 001C574C  7F 83 E3 78 */	mr r3, r28
/* 801C9AF0 001C5750  38 80 00 00 */	li r4, 0
/* 801C9AF4 001C5754  4B FF F9 D9 */	bl __flush_buffer
/* 801C9AF8 001C5758  2C 03 00 00 */	cmpwi r3, 0
/* 801C9AFC 001C575C  41 82 00 1C */	beq lbl_801C9B18
/* 801C9B00 001C5760  38 60 00 01 */	li r3, 1
/* 801C9B04 001C5764  38 00 00 00 */	li r0, 0
/* 801C9B08 001C5768  98 7C 00 0A */	stb r3, 0xa(r28)
/* 801C9B0C 001C576C  3B C0 00 00 */	li r30, 0
/* 801C9B10 001C5770  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C9B14 001C5774  48 00 00 1C */	b lbl_801C9B30
lbl_801C9B18:
/* 801C9B18 001C5778  80 01 00 08 */	lwz r0, 8(r1)
/* 801C9B1C 001C577C  2C 1E 00 00 */	cmpwi r30, 0
/* 801C9B20 001C5780  7F BD 02 14 */	add r29, r29, r0
/* 801C9B24 001C5784  41 82 00 0C */	beq lbl_801C9B30
/* 801C9B28 001C5788  2C 1F 00 00 */	cmpwi r31, 0
/* 801C9B2C 001C578C  40 82 FF 08 */	bne lbl_801C9A34
lbl_801C9B30:
/* 801C9B30 001C5790  2C 1E 00 00 */	cmpwi r30, 0
/* 801C9B34 001C5794  41 82 00 6C */	beq lbl_801C9BA0
/* 801C9B38 001C5798  2C 1F 00 00 */	cmpwi r31, 0
/* 801C9B3C 001C579C  40 82 00 64 */	bne lbl_801C9BA0
/* 801C9B40 001C57A0  83 3C 00 1C */	lwz r25, 0x1c(r28)
/* 801C9B44 001C57A4  7C 1A F2 14 */	add r0, r26, r30
/* 801C9B48 001C57A8  83 FC 00 20 */	lwz r31, 0x20(r28)
/* 801C9B4C 001C57AC  7F 83 E3 78 */	mr r3, r28
/* 801C9B50 001C57B0  93 5C 00 1C */	stw r26, 0x1c(r28)
/* 801C9B54 001C57B4  38 81 00 08 */	addi r4, r1, 8
/* 801C9B58 001C57B8  93 DC 00 20 */	stw r30, 0x20(r28)
/* 801C9B5C 001C57BC  90 1C 00 24 */	stw r0, 0x24(r28)
/* 801C9B60 001C57C0  4B FF F9 6D */	bl __flush_buffer
/* 801C9B64 001C57C4  2C 03 00 00 */	cmpwi r3, 0
/* 801C9B68 001C57C8  41 82 00 18 */	beq lbl_801C9B80
/* 801C9B6C 001C57CC  38 60 00 01 */	li r3, 1
/* 801C9B70 001C57D0  38 00 00 00 */	li r0, 0
/* 801C9B74 001C57D4  98 7C 00 0A */	stb r3, 0xa(r28)
/* 801C9B78 001C57D8  90 1C 00 28 */	stw r0, 0x28(r28)
/* 801C9B7C 001C57DC  48 00 00 0C */	b lbl_801C9B88
lbl_801C9B80:
/* 801C9B80 001C57E0  80 01 00 08 */	lwz r0, 8(r1)
/* 801C9B84 001C57E4  7F BD 02 14 */	add r29, r29, r0
lbl_801C9B88:
/* 801C9B88 001C57E8  93 3C 00 1C */	stw r25, 0x1c(r28)
/* 801C9B8C 001C57EC  7F 83 E3 78 */	mr r3, r28
/* 801C9B90 001C57F0  93 FC 00 20 */	stw r31, 0x20(r28)
/* 801C9B94 001C57F4  4B FF F8 15 */	bl __prep_buffer
/* 801C9B98 001C57F8  38 00 00 00 */	li r0, 0
/* 801C9B9C 001C57FC  90 1C 00 28 */	stw r0, 0x28(r28)
lbl_801C9BA0:
/* 801C9BA0 001C5800  80 1C 00 04 */	lwz r0, 4(r28)
/* 801C9BA4 001C5804  54 00 3F BE */	rlwinm r0, r0, 7, 0x1e, 0x1f
/* 801C9BA8 001C5808  28 00 00 02 */	cmplwi r0, 2
/* 801C9BAC 001C580C  41 82 00 0C */	beq lbl_801C9BB8
/* 801C9BB0 001C5810  38 00 00 00 */	li r0, 0
/* 801C9BB4 001C5814  90 1C 00 28 */	stw r0, 0x28(r28)
lbl_801C9BB8:
/* 801C9BB8 001C5818  7C 7D DB 96 */	divwu r3, r29, r27
lbl_801C9BBC:
/* 801C9BBC 001C581C  BB 21 00 14 */	lmw r25, 0x14(r1)
/* 801C9BC0 001C5820  80 01 00 34 */	lwz r0, 0x34(r1)
/* 801C9BC4 001C5824  7C 08 03 A6 */	mtlr r0
/* 801C9BC8 001C5828  38 21 00 30 */	addi r1, r1, 0x30
/* 801C9BCC 001C582C  4E 80 00 20 */	blr