summaryrefslogtreecommitdiff
path: root/asm/SDK/MEM/mem_expHeap.s
blob: 33dd97dbb1fe2511c2acedb92c9ad6b8f3afaa64 (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
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
.include "macros.inc"

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

.global AllocUsedBlockFromFreeBlock_
AllocUsedBlockFromFreeBlock_:
/* 80296938 00292598  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8029693C 0029259C  7C 08 02 A6 */	mflr r0
/* 80296940 002925A0  90 01 00 24 */	stw r0, 0x24(r1)
/* 80296944 002925A4  39 61 00 20 */	addi r11, r1, 0x20
/* 80296948 002925A8  4B F3 07 DD */	bl _savegpr_26
/* 8029694C 002925AC  81 04 00 08 */	lwz r8, 8(r4)
/* 80296950 002925B0  7F C6 2A 14 */	add r30, r6, r5
/* 80296954 002925B4  A0 C4 00 02 */	lhz r6, 2(r4)
/* 80296958 002925B8  3B A5 FF F0 */	addi r29, r5, -16
/* 8029695C 002925BC  80 04 00 04 */	lwz r0, 4(r4)
/* 80296960 002925C0  2C 08 00 00 */	cmpwi r8, 0
/* 80296964 002925C4  54 C9 C6 7E */	rlwinm r9, r6, 0x18, 0x19, 0x1f
/* 80296968 002925C8  81 44 00 0C */	lwz r10, 0xc(r4)
/* 8029696C 002925CC  7C C4 02 14 */	add r6, r4, r0
/* 80296970 002925D0  7C BB 2B 78 */	mr r27, r5
/* 80296974 002925D4  7C 7A 1B 78 */	mr r26, r3
/* 80296978 002925D8  7C FC 3B 78 */	mr r28, r7
/* 8029697C 002925DC  7F BF EB 78 */	mr r31, r29
/* 80296980 002925E0  7C A9 20 50 */	subf r5, r9, r4
/* 80296984 002925E4  38 C6 00 10 */	addi r6, r6, 0x10
/* 80296988 002925E8  41 82 00 0C */	beq lbl_80296994
/* 8029698C 002925EC  91 48 00 0C */	stw r10, 0xc(r8)
/* 80296990 002925F0  48 00 00 08 */	b lbl_80296998
lbl_80296994:
/* 80296994 002925F4  91 43 00 00 */	stw r10, 0(r3)
lbl_80296998:
/* 80296998 002925F8  2C 0A 00 00 */	cmpwi r10, 0
/* 8029699C 002925FC  41 82 00 0C */	beq lbl_802969A8
/* 802969A0 00292600  91 0A 00 08 */	stw r8, 8(r10)
/* 802969A4 00292604  48 00 00 08 */	b lbl_802969AC
lbl_802969A8:
/* 802969A8 00292608  91 03 00 04 */	stw r8, 4(r3)
lbl_802969AC:
/* 802969AC 0029260C  7C 05 E8 50 */	subf r0, r5, r29
/* 802969B0 00292610  28 00 00 14 */	cmplwi r0, 0x14
/* 802969B4 00292614  40 80 00 0C */	bge lbl_802969C0
/* 802969B8 00292618  7C BF 2B 78 */	mr r31, r5
/* 802969BC 0029261C  48 00 00 60 */	b lbl_80296A1C
lbl_802969C0:
/* 802969C0 00292620  38 80 46 52 */	li r4, 0x4652
/* 802969C4 00292624  38 05 00 10 */	addi r0, r5, 0x10
/* 802969C8 00292628  B0 85 00 00 */	sth r4, 0(r5)
/* 802969CC 0029262C  38 80 00 00 */	li r4, 0
/* 802969D0 00292630  7C 00 E8 50 */	subf r0, r0, r29
/* 802969D4 00292634  2C 08 00 00 */	cmpwi r8, 0
/* 802969D8 00292638  B0 85 00 02 */	sth r4, 2(r5)
/* 802969DC 0029263C  90 05 00 04 */	stw r0, 4(r5)
/* 802969E0 00292640  90 85 00 0C */	stw r4, 0xc(r5)
/* 802969E4 00292644  91 05 00 08 */	stw r8, 8(r5)
/* 802969E8 00292648  41 82 00 10 */	beq lbl_802969F8
/* 802969EC 0029264C  80 88 00 0C */	lwz r4, 0xc(r8)
/* 802969F0 00292650  90 A8 00 0C */	stw r5, 0xc(r8)
/* 802969F4 00292654  48 00 00 0C */	b lbl_80296A00
lbl_802969F8:
/* 802969F8 00292658  80 83 00 00 */	lwz r4, 0(r3)
/* 802969FC 0029265C  90 A3 00 00 */	stw r5, 0(r3)
lbl_80296A00:
/* 80296A00 00292660  2C 04 00 00 */	cmpwi r4, 0
/* 80296A04 00292664  90 85 00 0C */	stw r4, 0xc(r5)
/* 80296A08 00292668  41 82 00 0C */	beq lbl_80296A14
/* 80296A0C 0029266C  90 A4 00 08 */	stw r5, 8(r4)
/* 80296A10 00292670  48 00 00 08 */	b lbl_80296A18
lbl_80296A14:
/* 80296A14 00292674  90 A3 00 04 */	stw r5, 4(r3)
lbl_80296A18:
/* 80296A18 00292678  7C A8 2B 78 */	mr r8, r5
lbl_80296A1C:
/* 80296A1C 0029267C  7C 1E 30 50 */	subf r0, r30, r6
/* 80296A20 00292680  28 00 00 14 */	cmplwi r0, 0x14
/* 80296A24 00292684  40 80 00 0C */	bge lbl_80296A30
/* 80296A28 00292688  7C DE 33 78 */	mr r30, r6
/* 80296A2C 0029268C  48 00 00 5C */	b lbl_80296A88
lbl_80296A30:
/* 80296A30 00292690  38 80 46 52 */	li r4, 0x4652
/* 80296A34 00292694  38 1E 00 10 */	addi r0, r30, 0x10
/* 80296A38 00292698  B0 9E 00 00 */	sth r4, 0(r30)
/* 80296A3C 0029269C  38 80 00 00 */	li r4, 0
/* 80296A40 002926A0  7C 00 30 50 */	subf r0, r0, r6
/* 80296A44 002926A4  2C 08 00 00 */	cmpwi r8, 0
/* 80296A48 002926A8  B0 9E 00 02 */	sth r4, 2(r30)
/* 80296A4C 002926AC  90 1E 00 04 */	stw r0, 4(r30)
/* 80296A50 002926B0  90 9E 00 0C */	stw r4, 0xc(r30)
/* 80296A54 002926B4  91 1E 00 08 */	stw r8, 8(r30)
/* 80296A58 002926B8  41 82 00 10 */	beq lbl_80296A68
/* 80296A5C 002926BC  80 88 00 0C */	lwz r4, 0xc(r8)
/* 80296A60 002926C0  93 C8 00 0C */	stw r30, 0xc(r8)
/* 80296A64 002926C4  48 00 00 0C */	b lbl_80296A70
lbl_80296A68:
/* 80296A68 002926C8  80 83 00 00 */	lwz r4, 0(r3)
/* 80296A6C 002926CC  93 C3 00 00 */	stw r30, 0(r3)
lbl_80296A70:
/* 80296A70 002926D0  2C 04 00 00 */	cmpwi r4, 0
/* 80296A74 002926D4  90 9E 00 0C */	stw r4, 0xc(r30)
/* 80296A78 002926D8  41 82 00 0C */	beq lbl_80296A84
/* 80296A7C 002926DC  93 C4 00 08 */	stw r30, 8(r4)
/* 80296A80 002926E0  48 00 00 08 */	b lbl_80296A88
lbl_80296A84:
/* 80296A84 002926E4  93 C3 00 04 */	stw r30, 4(r3)
lbl_80296A88:
/* 80296A88 002926E8  80 03 FF FC */	lwz r0, -4(r3)
/* 80296A8C 002926EC  7C BF F0 50 */	subf r5, r31, r30
/* 80296A90 002926F0  54 00 07 FF */	clrlwi. r0, r0, 0x1f
/* 80296A94 002926F4  41 82 00 10 */	beq lbl_80296AA4
/* 80296A98 002926F8  7F E3 FB 78 */	mr r3, r31
/* 80296A9C 002926FC  38 80 00 00 */	li r4, 0
/* 80296AA0 00292700  4B D6 D6 65 */	bl memset
lbl_80296AA4:
/* 80296AA4 00292704  38 A0 00 00 */	li r5, 0
/* 80296AA8 00292708  38 9D 00 10 */	addi r4, r29, 0x10
/* 80296AAC 0029270C  7C A3 2B 78 */	mr r3, r5
/* 80296AB0 00292710  38 C0 55 44 */	li r6, 0x5544
/* 80296AB4 00292714  7C 84 F0 50 */	subf r4, r4, r30
/* 80296AB8 00292718  7C 1F E8 50 */	subf r0, r31, r29
/* 80296ABC 0029271C  53 83 7C 20 */	rlwimi r3, r28, 0xf, 0x10, 0x10
/* 80296AC0 00292720  B0 DD 00 00 */	sth r6, 0(r29)
/* 80296AC4 00292724  50 03 44 6E */	rlwimi r3, r0, 8, 0x11, 0x17
/* 80296AC8 00292728  90 9D 00 04 */	stw r4, 4(r29)
/* 80296ACC 0029272C  90 BD 00 08 */	stw r5, 8(r29)
/* 80296AD0 00292730  90 BD 00 0C */	stw r5, 0xc(r29)
/* 80296AD4 00292734  B0 7D 00 02 */	sth r3, 2(r29)
/* 80296AD8 00292738  A0 1A 00 10 */	lhz r0, 0x10(r26)
/* 80296ADC 0029273C  50 03 06 3E */	rlwimi r3, r0, 0, 0x18, 0x1f
/* 80296AE0 00292740  B0 7D 00 02 */	sth r3, 2(r29)
/* 80296AE4 00292744  80 9A 00 0C */	lwz r4, 0xc(r26)
/* 80296AE8 00292748  2C 04 00 00 */	cmpwi r4, 0
/* 80296AEC 0029274C  90 9D 00 08 */	stw r4, 8(r29)
/* 80296AF0 00292750  41 82 00 10 */	beq lbl_80296B00
/* 80296AF4 00292754  80 64 00 0C */	lwz r3, 0xc(r4)
/* 80296AF8 00292758  93 A4 00 0C */	stw r29, 0xc(r4)
/* 80296AFC 0029275C  48 00 00 0C */	b lbl_80296B08
lbl_80296B00:
/* 80296B00 00292760  80 7A 00 08 */	lwz r3, 8(r26)
/* 80296B04 00292764  93 BA 00 08 */	stw r29, 8(r26)
lbl_80296B08:
/* 80296B08 00292768  2C 03 00 00 */	cmpwi r3, 0
/* 80296B0C 0029276C  90 7D 00 0C */	stw r3, 0xc(r29)
/* 80296B10 00292770  41 82 00 0C */	beq lbl_80296B1C
/* 80296B14 00292774  93 A3 00 08 */	stw r29, 8(r3)
/* 80296B18 00292778  48 00 00 08 */	b lbl_80296B20
lbl_80296B1C:
/* 80296B1C 0029277C  93 BA 00 0C */	stw r29, 0xc(r26)
lbl_80296B20:
/* 80296B20 00292780  39 61 00 20 */	addi r11, r1, 0x20
/* 80296B24 00292784  7F 63 DB 78 */	mr r3, r27
/* 80296B28 00292788  4B F3 06 49 */	bl _restgpr_26
/* 80296B2C 0029278C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80296B30 00292790  7C 08 03 A6 */	mtlr r0
/* 80296B34 00292794  38 21 00 20 */	addi r1, r1, 0x20
/* 80296B38 00292798  4E 80 00 20 */	blr

.global AllocFromHead_
AllocFromHead_:
/* 80296B3C 0029279C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80296B40 002927A0  7C 08 02 A6 */	mflr r0
/* 80296B44 002927A4  38 63 00 3C */	addi r3, r3, 0x3c
/* 80296B48 002927A8  7C 86 23 78 */	mr r6, r4
/* 80296B4C 002927AC  90 01 00 24 */	stw r0, 0x24(r1)
/* 80296B50 002927B0  38 05 FF FF */	addi r0, r5, -1
/* 80296B54 002927B4  7C 08 00 F8 */	nor r8, r0, r0
/* 80296B58 002927B8  39 80 00 00 */	li r12, 0
/* 80296B5C 002927BC  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80296B60 002927C0  3B E0 FF FF */	li r31, -1
/* 80296B64 002927C4  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80296B68 002927C8  3B C0 00 00 */	li r30, 0
/* 80296B6C 002927CC  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80296B70 002927D0  A0 E3 00 12 */	lhz r7, 0x12(r3)
/* 80296B74 002927D4  81 63 00 00 */	lwz r11, 0(r3)
/* 80296B78 002927D8  54 E0 07 FE */	clrlwi r0, r7, 0x1f
/* 80296B7C 002927DC  7C 00 00 34 */	cntlzw r0, r0
/* 80296B80 002927E0  54 0A D9 7E */	srwi r10, r0, 5
/* 80296B84 002927E4  48 00 00 50 */	b lbl_80296BD4
lbl_80296B88:
/* 80296B88 002927E8  3B AB 00 10 */	addi r29, r11, 0x10
/* 80296B8C 002927EC  81 2B 00 04 */	lwz r9, 4(r11)
/* 80296B90 002927F0  7C E5 EA 14 */	add r7, r5, r29
/* 80296B94 002927F4  38 07 FF FF */	addi r0, r7, -1
/* 80296B98 002927F8  7D 07 00 38 */	and r7, r8, r0
/* 80296B9C 002927FC  7C 1D 38 50 */	subf r0, r29, r7
/* 80296BA0 00292800  7C 04 02 14 */	add r0, r4, r0
/* 80296BA4 00292804  7C 09 00 40 */	cmplw r9, r0
/* 80296BA8 00292808  41 80 00 28 */	blt lbl_80296BD0
/* 80296BAC 0029280C  7C 1F 48 40 */	cmplw r31, r9
/* 80296BB0 00292810  40 81 00 20 */	ble lbl_80296BD0
/* 80296BB4 00292814  2C 0A 00 00 */	cmpwi r10, 0
/* 80296BB8 00292818  7D 6C 5B 78 */	mr r12, r11
/* 80296BBC 0029281C  7D 3F 4B 78 */	mr r31, r9
/* 80296BC0 00292820  7C FE 3B 78 */	mr r30, r7
/* 80296BC4 00292824  40 82 00 18 */	bne lbl_80296BDC
/* 80296BC8 00292828  7C 09 20 40 */	cmplw r9, r4
/* 80296BCC 0029282C  41 82 00 10 */	beq lbl_80296BDC
lbl_80296BD0:
/* 80296BD0 00292830  81 6B 00 0C */	lwz r11, 0xc(r11)
lbl_80296BD4:
/* 80296BD4 00292834  2C 0B 00 00 */	cmpwi r11, 0
/* 80296BD8 00292838  40 82 FF B0 */	bne lbl_80296B88
lbl_80296BDC:
/* 80296BDC 0029283C  2C 0C 00 00 */	cmpwi r12, 0
/* 80296BE0 00292840  41 82 00 18 */	beq lbl_80296BF8
/* 80296BE4 00292844  7D 84 63 78 */	mr r4, r12
/* 80296BE8 00292848  7F C5 F3 78 */	mr r5, r30
/* 80296BEC 0029284C  38 E0 00 00 */	li r7, 0
/* 80296BF0 00292850  4B FF FD 49 */	bl AllocUsedBlockFromFreeBlock_
/* 80296BF4 00292854  48 00 00 08 */	b lbl_80296BFC
lbl_80296BF8:
/* 80296BF8 00292858  38 60 00 00 */	li r3, 0
lbl_80296BFC:
/* 80296BFC 0029285C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80296C00 00292860  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80296C04 00292864  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80296C08 00292868  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80296C0C 0029286C  7C 08 03 A6 */	mtlr r0
/* 80296C10 00292870  38 21 00 20 */	addi r1, r1, 0x20
/* 80296C14 00292874  4E 80 00 20 */	blr

.global AllocFromTail_
AllocFromTail_:
/* 80296C18 00292878  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80296C1C 0029287C  7C 08 02 A6 */	mflr r0
/* 80296C20 00292880  38 63 00 3C */	addi r3, r3, 0x3c
/* 80296C24 00292884  7C 86 23 78 */	mr r6, r4
/* 80296C28 00292888  90 01 00 14 */	stw r0, 0x14(r1)
/* 80296C2C 0029288C  38 05 FF FF */	addi r0, r5, -1
/* 80296C30 00292890  7C 07 00 F8 */	nor r7, r0, r0
/* 80296C34 00292894  39 60 00 00 */	li r11, 0
/* 80296C38 00292898  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80296C3C 0029289C  39 80 FF FF */	li r12, -1
/* 80296C40 002928A0  93 C1 00 08 */	stw r30, 8(r1)
/* 80296C44 002928A4  A0 A3 00 12 */	lhz r5, 0x12(r3)
/* 80296C48 002928A8  81 43 00 04 */	lwz r10, 4(r3)
/* 80296C4C 002928AC  54 A0 07 FE */	clrlwi r0, r5, 0x1f
/* 80296C50 002928B0  38 A0 00 00 */	li r5, 0
/* 80296C54 002928B4  7C 00 00 34 */	cntlzw r0, r0
/* 80296C58 002928B8  54 09 D9 7E */	srwi r9, r0, 5
/* 80296C5C 002928BC  48 00 00 48 */	b lbl_80296CA4
lbl_80296C60:
/* 80296C60 002928C0  81 0A 00 04 */	lwz r8, 4(r10)
/* 80296C64 002928C4  3B EA 00 10 */	addi r31, r10, 0x10
/* 80296C68 002928C8  7C 08 FA 14 */	add r0, r8, r31
/* 80296C6C 002928CC  7C 04 00 50 */	subf r0, r4, r0
/* 80296C70 002928D0  7C FE 00 38 */	and r30, r7, r0
/* 80296C74 002928D4  7C 1F F0 51 */	subf. r0, r31, r30
/* 80296C78 002928D8  41 80 00 28 */	blt lbl_80296CA0
/* 80296C7C 002928DC  7C 0C 40 40 */	cmplw r12, r8
/* 80296C80 002928E0  40 81 00 20 */	ble lbl_80296CA0
/* 80296C84 002928E4  2C 09 00 00 */	cmpwi r9, 0
/* 80296C88 002928E8  7D 4B 53 78 */	mr r11, r10
/* 80296C8C 002928EC  7D 0C 43 78 */	mr r12, r8
/* 80296C90 002928F0  7F C5 F3 78 */	mr r5, r30
/* 80296C94 002928F4  40 82 00 18 */	bne lbl_80296CAC
/* 80296C98 002928F8  7C 08 20 40 */	cmplw r8, r4
/* 80296C9C 002928FC  41 82 00 10 */	beq lbl_80296CAC
lbl_80296CA0:
/* 80296CA0 00292900  81 4A 00 08 */	lwz r10, 8(r10)
lbl_80296CA4:
/* 80296CA4 00292904  2C 0A 00 00 */	cmpwi r10, 0
/* 80296CA8 00292908  40 82 FF B8 */	bne lbl_80296C60
lbl_80296CAC:
/* 80296CAC 0029290C  2C 0B 00 00 */	cmpwi r11, 0
/* 80296CB0 00292910  41 82 00 14 */	beq lbl_80296CC4
/* 80296CB4 00292914  7D 64 5B 78 */	mr r4, r11
/* 80296CB8 00292918  38 E0 00 01 */	li r7, 1
/* 80296CBC 0029291C  4B FF FC 7D */	bl AllocUsedBlockFromFreeBlock_
/* 80296CC0 00292920  48 00 00 08 */	b lbl_80296CC8
lbl_80296CC4:
/* 80296CC4 00292924  38 60 00 00 */	li r3, 0
lbl_80296CC8:
/* 80296CC8 00292928  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80296CCC 0029292C  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 80296CD0 00292930  83 C1 00 08 */	lwz r30, 8(r1)
/* 80296CD4 00292934  7C 08 03 A6 */	mtlr r0
/* 80296CD8 00292938  38 21 00 10 */	addi r1, r1, 0x10
/* 80296CDC 0029293C  4E 80 00 20 */	blr

.global RecycleRegion_
RecycleRegion_:
/* 80296CE0 00292940  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80296CE4 00292944  39 00 00 00 */	li r8, 0
/* 80296CE8 00292948  80 A4 00 00 */	lwz r5, 0(r4)
/* 80296CEC 0029294C  80 04 00 04 */	lwz r0, 4(r4)
/* 80296CF0 00292950  90 A1 00 08 */	stw r5, 8(r1)
/* 80296CF4 00292954  80 C3 00 00 */	lwz r6, 0(r3)
/* 80296CF8 00292958  90 01 00 0C */	stw r0, 0xc(r1)
/* 80296CFC 0029295C  48 00 00 6C */	b lbl_80296D68
lbl_80296D00:
/* 80296D00 00292960  80 04 00 00 */	lwz r0, 0(r4)
/* 80296D04 00292964  7C 06 00 40 */	cmplw r6, r0
/* 80296D08 00292968  40 80 00 0C */	bge lbl_80296D14
/* 80296D0C 0029296C  7C C8 33 78 */	mr r8, r6
/* 80296D10 00292970  48 00 00 54 */	b lbl_80296D64
lbl_80296D14:
/* 80296D14 00292974  80 04 00 04 */	lwz r0, 4(r4)
/* 80296D18 00292978  7C 06 00 40 */	cmplw r6, r0
/* 80296D1C 0029297C  40 82 00 54 */	bne lbl_80296D70
/* 80296D20 00292980  80 06 00 04 */	lwz r0, 4(r6)
/* 80296D24 00292984  80 E6 00 08 */	lwz r7, 8(r6)
/* 80296D28 00292988  7C A6 02 14 */	add r5, r6, r0
/* 80296D2C 0029298C  80 C6 00 0C */	lwz r6, 0xc(r6)
/* 80296D30 00292990  38 05 00 10 */	addi r0, r5, 0x10
/* 80296D34 00292994  2C 07 00 00 */	cmpwi r7, 0
/* 80296D38 00292998  90 01 00 0C */	stw r0, 0xc(r1)
/* 80296D3C 0029299C  41 82 00 0C */	beq lbl_80296D48
/* 80296D40 002929A0  90 C7 00 0C */	stw r6, 0xc(r7)
/* 80296D44 002929A4  48 00 00 08 */	b lbl_80296D4C
lbl_80296D48:
/* 80296D48 002929A8  90 C3 00 00 */	stw r6, 0(r3)
lbl_80296D4C:
/* 80296D4C 002929AC  2C 06 00 00 */	cmpwi r6, 0
/* 80296D50 002929B0  41 82 00 0C */	beq lbl_80296D5C
/* 80296D54 002929B4  90 E6 00 08 */	stw r7, 8(r6)
/* 80296D58 002929B8  48 00 00 18 */	b lbl_80296D70
lbl_80296D5C:
/* 80296D5C 002929BC  90 E3 00 04 */	stw r7, 4(r3)
/* 80296D60 002929C0  48 00 00 10 */	b lbl_80296D70
lbl_80296D64:
/* 80296D64 002929C4  80 C6 00 0C */	lwz r6, 0xc(r6)
lbl_80296D68:
/* 80296D68 002929C8  2C 06 00 00 */	cmpwi r6, 0
/* 80296D6C 002929CC  40 82 FF 94 */	bne lbl_80296D00
lbl_80296D70:
/* 80296D70 002929D0  2C 08 00 00 */	cmpwi r8, 0
/* 80296D74 002929D4  41 82 00 54 */	beq lbl_80296DC8
/* 80296D78 002929D8  80 A8 00 04 */	lwz r5, 4(r8)
/* 80296D7C 002929DC  80 04 00 00 */	lwz r0, 0(r4)
/* 80296D80 002929E0  7C 88 2A 14 */	add r4, r8, r5
/* 80296D84 002929E4  38 84 00 10 */	addi r4, r4, 0x10
/* 80296D88 002929E8  7C 04 00 40 */	cmplw r4, r0
/* 80296D8C 002929EC  40 82 00 3C */	bne lbl_80296DC8
/* 80296D90 002929F0  80 A8 00 08 */	lwz r5, 8(r8)
/* 80296D94 002929F4  91 01 00 08 */	stw r8, 8(r1)
/* 80296D98 002929F8  2C 05 00 00 */	cmpwi r5, 0
/* 80296D9C 002929FC  80 88 00 0C */	lwz r4, 0xc(r8)
/* 80296DA0 00292A00  41 82 00 0C */	beq lbl_80296DAC
/* 80296DA4 00292A04  90 85 00 0C */	stw r4, 0xc(r5)
/* 80296DA8 00292A08  48 00 00 08 */	b lbl_80296DB0
lbl_80296DAC:
/* 80296DAC 00292A0C  90 83 00 00 */	stw r4, 0(r3)
lbl_80296DB0:
/* 80296DB0 00292A10  2C 04 00 00 */	cmpwi r4, 0
/* 80296DB4 00292A14  41 82 00 0C */	beq lbl_80296DC0
/* 80296DB8 00292A18  90 A4 00 08 */	stw r5, 8(r4)
/* 80296DBC 00292A1C  48 00 00 08 */	b lbl_80296DC4
lbl_80296DC0:
/* 80296DC0 00292A20  90 A3 00 04 */	stw r5, 4(r3)
lbl_80296DC4:
/* 80296DC4 00292A24  7C A8 2B 78 */	mr r8, r5
lbl_80296DC8:
/* 80296DC8 00292A28  80 C1 00 0C */	lwz r6, 0xc(r1)
/* 80296DCC 00292A2C  80 A1 00 08 */	lwz r5, 8(r1)
/* 80296DD0 00292A30  7C 05 30 50 */	subf r0, r5, r6
/* 80296DD4 00292A34  28 00 00 10 */	cmplwi r0, 0x10
/* 80296DD8 00292A38  40 80 00 0C */	bge lbl_80296DE4
/* 80296DDC 00292A3C  38 60 00 00 */	li r3, 0
/* 80296DE0 00292A40  48 00 00 60 */	b lbl_80296E40
lbl_80296DE4:
/* 80296DE4 00292A44  38 80 46 52 */	li r4, 0x4652
/* 80296DE8 00292A48  38 05 00 10 */	addi r0, r5, 0x10
/* 80296DEC 00292A4C  B0 85 00 00 */	sth r4, 0(r5)
/* 80296DF0 00292A50  38 80 00 00 */	li r4, 0
/* 80296DF4 00292A54  7C 00 30 50 */	subf r0, r0, r6
/* 80296DF8 00292A58  2C 08 00 00 */	cmpwi r8, 0
/* 80296DFC 00292A5C  B0 85 00 02 */	sth r4, 2(r5)
/* 80296E00 00292A60  90 05 00 04 */	stw r0, 4(r5)
/* 80296E04 00292A64  90 85 00 0C */	stw r4, 0xc(r5)
/* 80296E08 00292A68  91 05 00 08 */	stw r8, 8(r5)
/* 80296E0C 00292A6C  41 82 00 10 */	beq lbl_80296E1C
/* 80296E10 00292A70  80 88 00 0C */	lwz r4, 0xc(r8)
/* 80296E14 00292A74  90 A8 00 0C */	stw r5, 0xc(r8)
/* 80296E18 00292A78  48 00 00 0C */	b lbl_80296E24
lbl_80296E1C:
/* 80296E1C 00292A7C  80 83 00 00 */	lwz r4, 0(r3)
/* 80296E20 00292A80  90 A3 00 00 */	stw r5, 0(r3)
lbl_80296E24:
/* 80296E24 00292A84  2C 04 00 00 */	cmpwi r4, 0
/* 80296E28 00292A88  90 85 00 0C */	stw r4, 0xc(r5)
/* 80296E2C 00292A8C  41 82 00 0C */	beq lbl_80296E38
/* 80296E30 00292A90  90 A4 00 08 */	stw r5, 8(r4)
/* 80296E34 00292A94  48 00 00 08 */	b lbl_80296E3C
lbl_80296E38:
/* 80296E38 00292A98  90 A3 00 04 */	stw r5, 4(r3)
lbl_80296E3C:
/* 80296E3C 00292A9C  38 60 00 01 */	li r3, 1
lbl_80296E40:
/* 80296E40 00292AA0  38 21 00 10 */	addi r1, r1, 0x10
/* 80296E44 00292AA4  4E 80 00 20 */	blr

.global MEMCreateExpHeapEx
MEMCreateExpHeapEx:
/* 80296E48 00292AA8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80296E4C 00292AAC  7C 08 02 A6 */	mflr r0
/* 80296E50 00292AB0  7C 84 1A 14 */	add r4, r4, r3
/* 80296E54 00292AB4  90 01 00 14 */	stw r0, 0x14(r1)
/* 80296E58 00292AB8  38 03 00 03 */	addi r0, r3, 3
/* 80296E5C 00292ABC  54 86 00 3A */	rlwinm r6, r4, 0, 0, 0x1d
/* 80296E60 00292AC0  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80296E64 00292AC4  54 1F 00 3A */	rlwinm r31, r0, 0, 0, 0x1d
/* 80296E68 00292AC8  7C 1F 30 40 */	cmplw r31, r6
/* 80296E6C 00292ACC  41 81 00 10 */	bgt lbl_80296E7C
/* 80296E70 00292AD0  7C 1F 30 50 */	subf r0, r31, r6
/* 80296E74 00292AD4  28 00 00 64 */	cmplwi r0, 0x64
/* 80296E78 00292AD8  40 80 00 0C */	bge lbl_80296E84
lbl_80296E7C:
/* 80296E7C 00292ADC  38 60 00 00 */	li r3, 0
/* 80296E80 00292AE0  48 00 00 64 */	b lbl_80296EE4
lbl_80296E84:
/* 80296E84 00292AE4  3C 80 45 58 */	lis r4, 0x45585048@ha
/* 80296E88 00292AE8  7C A7 2B 78 */	mr r7, r5
/* 80296E8C 00292AEC  7F E3 FB 78 */	mr r3, r31
/* 80296E90 00292AF0  38 BF 00 50 */	addi r5, r31, 0x50
/* 80296E94 00292AF4  38 84 50 48 */	addi r4, r4, 0x45585048@l
/* 80296E98 00292AF8  4B FF F7 75 */	bl MEMiInitHeapHead
/* 80296E9C 00292AFC  38 A0 00 00 */	li r5, 0
/* 80296EA0 00292B00  38 80 46 52 */	li r4, 0x4652
/* 80296EA4 00292B04  B0 BF 00 4C */	sth r5, 0x4c(r31)
/* 80296EA8 00292B08  7F E3 FB 78 */	mr r3, r31
/* 80296EAC 00292B0C  B0 BF 00 4E */	sth r5, 0x4e(r31)
/* 80296EB0 00292B10  80 DF 00 18 */	lwz r6, 0x18(r31)
/* 80296EB4 00292B14  80 FF 00 1C */	lwz r7, 0x1c(r31)
/* 80296EB8 00292B18  38 06 00 10 */	addi r0, r6, 0x10
/* 80296EBC 00292B1C  B0 86 00 00 */	sth r4, 0(r6)
/* 80296EC0 00292B20  7C 00 38 50 */	subf r0, r0, r7
/* 80296EC4 00292B24  B0 A6 00 02 */	sth r5, 2(r6)
/* 80296EC8 00292B28  90 06 00 04 */	stw r0, 4(r6)
/* 80296ECC 00292B2C  90 A6 00 08 */	stw r5, 8(r6)
/* 80296ED0 00292B30  90 A6 00 0C */	stw r5, 0xc(r6)
/* 80296ED4 00292B34  90 DF 00 3C */	stw r6, 0x3c(r31)
/* 80296ED8 00292B38  90 DF 00 40 */	stw r6, 0x40(r31)
/* 80296EDC 00292B3C  90 BF 00 44 */	stw r5, 0x44(r31)
/* 80296EE0 00292B40  90 BF 00 48 */	stw r5, 0x48(r31)
lbl_80296EE4:
/* 80296EE4 00292B44  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80296EE8 00292B48  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 80296EEC 00292B4C  7C 08 03 A6 */	mtlr r0
/* 80296EF0 00292B50  38 21 00 10 */	addi r1, r1, 0x10
/* 80296EF4 00292B54  4E 80 00 20 */	blr

.global MEMDestroyExpHeap
MEMDestroyExpHeap:
/* 80296EF8 00292B58  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80296EFC 00292B5C  7C 08 02 A6 */	mflr r0
/* 80296F00 00292B60  90 01 00 14 */	stw r0, 0x14(r1)
/* 80296F04 00292B64  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80296F08 00292B68  7C 7F 1B 78 */	mr r31, r3
/* 80296F0C 00292B6C  4B FF F8 C1 */	bl MEMiFinalizeHeap
/* 80296F10 00292B70  7F E3 FB 78 */	mr r3, r31
/* 80296F14 00292B74  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 80296F18 00292B78  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80296F1C 00292B7C  7C 08 03 A6 */	mtlr r0
/* 80296F20 00292B80  38 21 00 10 */	addi r1, r1, 0x10
/* 80296F24 00292B84  4E 80 00 20 */	blr

.global MEMAllocFromExpHeapEx
MEMAllocFromExpHeapEx:
/* 80296F28 00292B88  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80296F2C 00292B8C  7C 08 02 A6 */	mflr r0
/* 80296F30 00292B90  2C 04 00 00 */	cmpwi r4, 0
/* 80296F34 00292B94  90 01 00 24 */	stw r0, 0x24(r1)
/* 80296F38 00292B98  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80296F3C 00292B9C  7C BF 2B 78 */	mr r31, r5
/* 80296F40 00292BA0  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80296F44 00292BA4  7C 9E 23 78 */	mr r30, r4
/* 80296F48 00292BA8  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80296F4C 00292BAC  7C 7D 1B 78 */	mr r29, r3
/* 80296F50 00292BB0  40 82 00 08 */	bne lbl_80296F58
/* 80296F54 00292BB4  3B C0 00 01 */	li r30, 1
lbl_80296F58:
/* 80296F58 00292BB8  80 03 00 38 */	lwz r0, 0x38(r3)
/* 80296F5C 00292BBC  38 9E 00 03 */	addi r4, r30, 3
/* 80296F60 00292BC0  54 9E 00 3A */	rlwinm r30, r4, 0, 0, 0x1d
/* 80296F64 00292BC4  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80296F68 00292BC8  41 82 00 0C */	beq lbl_80296F74
/* 80296F6C 00292BCC  38 63 00 20 */	addi r3, r3, 0x20
/* 80296F70 00292BD0  4B FD 89 D9 */	bl OSLockMutex
lbl_80296F74:
/* 80296F74 00292BD4  2C 1F 00 00 */	cmpwi r31, 0
/* 80296F78 00292BD8  41 80 00 18 */	blt lbl_80296F90
/* 80296F7C 00292BDC  7F A3 EB 78 */	mr r3, r29
/* 80296F80 00292BE0  7F C4 F3 78 */	mr r4, r30
/* 80296F84 00292BE4  7F E5 FB 78 */	mr r5, r31
/* 80296F88 00292BE8  4B FF FB B5 */	bl AllocFromHead_
/* 80296F8C 00292BEC  48 00 00 14 */	b lbl_80296FA0
lbl_80296F90:
/* 80296F90 00292BF0  7F A3 EB 78 */	mr r3, r29
/* 80296F94 00292BF4  7F C4 F3 78 */	mr r4, r30
/* 80296F98 00292BF8  7C BF 00 D0 */	neg r5, r31
/* 80296F9C 00292BFC  4B FF FC 7D */	bl AllocFromTail_
lbl_80296FA0:
/* 80296FA0 00292C00  80 1D 00 38 */	lwz r0, 0x38(r29)
/* 80296FA4 00292C04  7C 7F 1B 78 */	mr r31, r3
/* 80296FA8 00292C08  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80296FAC 00292C0C  41 82 00 0C */	beq lbl_80296FB8
/* 80296FB0 00292C10  38 7D 00 20 */	addi r3, r29, 0x20
/* 80296FB4 00292C14  4B FD 8A 71 */	bl OSUnlockMutex
lbl_80296FB8:
/* 80296FB8 00292C18  7F E3 FB 78 */	mr r3, r31
/* 80296FBC 00292C1C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80296FC0 00292C20  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80296FC4 00292C24  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80296FC8 00292C28  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80296FCC 00292C2C  7C 08 03 A6 */	mtlr r0
/* 80296FD0 00292C30  38 21 00 20 */	addi r1, r1, 0x20
/* 80296FD4 00292C34  4E 80 00 20 */	blr

.global MEMResizeForMBlockExpHeap
MEMResizeForMBlockExpHeap:
/* 80296FD8 00292C38  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80296FDC 00292C3C  7C 08 02 A6 */	mflr r0
/* 80296FE0 00292C40  90 01 00 34 */	stw r0, 0x34(r1)
/* 80296FE4 00292C44  39 61 00 30 */	addi r11, r1, 0x30
/* 80296FE8 00292C48  4B F3 01 3D */	bl _savegpr_26
/* 80296FEC 00292C4C  38 A5 00 03 */	addi r5, r5, 3
/* 80296FF0 00292C50  80 04 FF F4 */	lwz r0, -0xc(r4)
/* 80296FF4 00292C54  54 BD 00 3A */	rlwinm r29, r5, 0, 0, 0x1d
/* 80296FF8 00292C58  3B C4 FF F0 */	addi r30, r4, -16
/* 80296FFC 00292C5C  7C 1D 00 40 */	cmplw r29, r0
/* 80297000 00292C60  7C 7B 1B 78 */	mr r27, r3
/* 80297004 00292C64  7C 9C 23 78 */	mr r28, r4
/* 80297008 00292C68  3B E3 00 3C */	addi r31, r3, 0x3c
/* 8029700C 00292C6C  40 82 00 0C */	bne lbl_80297018
/* 80297010 00292C70  7F A3 EB 78 */	mr r3, r29
/* 80297014 00292C74  48 00 01 98 */	b lbl_802971AC
lbl_80297018:
/* 80297018 00292C78  80 03 00 38 */	lwz r0, 0x38(r3)
/* 8029701C 00292C7C  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80297020 00292C80  41 82 00 0C */	beq lbl_8029702C
/* 80297024 00292C84  38 63 00 20 */	addi r3, r3, 0x20
/* 80297028 00292C88  4B FD 89 21 */	bl OSLockMutex
lbl_8029702C:
/* 8029702C 00292C8C  83 5E 00 04 */	lwz r26, 4(r30)
/* 80297030 00292C90  7C 1D D0 40 */	cmplw r29, r26
/* 80297034 00292C94  40 81 01 2C */	ble lbl_80297160
/* 80297038 00292C98  7C 7E D2 14 */	add r3, r30, r26
/* 8029703C 00292C9C  80 FF 00 00 */	lwz r7, 0(r31)
/* 80297040 00292CA0  38 03 00 10 */	addi r0, r3, 0x10
/* 80297044 00292CA4  48 00 00 10 */	b lbl_80297054
lbl_80297048:
/* 80297048 00292CA8  7C 07 00 40 */	cmplw r7, r0
/* 8029704C 00292CAC  41 82 00 10 */	beq lbl_8029705C
/* 80297050 00292CB0  80 E7 00 0C */	lwz r7, 0xc(r7)
lbl_80297054:
/* 80297054 00292CB4  2C 07 00 00 */	cmpwi r7, 0
/* 80297058 00292CB8  40 82 FF F0 */	bne lbl_80297048
lbl_8029705C:
/* 8029705C 00292CBC  2C 07 00 00 */	cmpwi r7, 0
/* 80297060 00292CC0  41 82 00 18 */	beq lbl_80297078
/* 80297064 00292CC4  80 87 00 04 */	lwz r4, 4(r7)
/* 80297068 00292CC8  7C 7A 22 14 */	add r3, r26, r4
/* 8029706C 00292CCC  38 03 00 10 */	addi r0, r3, 0x10
/* 80297070 00292CD0  7C 1D 00 40 */	cmplw r29, r0
/* 80297074 00292CD4  40 81 00 0C */	ble lbl_80297080
lbl_80297078:
/* 80297078 00292CD8  38 60 00 00 */	li r3, 0
/* 8029707C 00292CDC  48 00 01 30 */	b lbl_802971AC
lbl_80297080:
/* 80297080 00292CE0  80 A7 00 08 */	lwz r5, 8(r7)
/* 80297084 00292CE4  7C 67 22 14 */	add r3, r7, r4
/* 80297088 00292CE8  A0 07 00 02 */	lhz r0, 2(r7)
/* 8029708C 00292CEC  38 C3 00 10 */	addi r6, r3, 0x10
/* 80297090 00292CF0  2C 05 00 00 */	cmpwi r5, 0
/* 80297094 00292CF4  80 87 00 0C */	lwz r4, 0xc(r7)
/* 80297098 00292CF8  54 00 C6 7E */	rlwinm r0, r0, 0x18, 0x19, 0x1f
/* 8029709C 00292CFC  7C 60 38 50 */	subf r3, r0, r7
/* 802970A0 00292D00  41 82 00 0C */	beq lbl_802970AC
/* 802970A4 00292D04  90 85 00 0C */	stw r4, 0xc(r5)
/* 802970A8 00292D08  48 00 00 08 */	b lbl_802970B0
lbl_802970AC:
/* 802970AC 00292D0C  90 9F 00 00 */	stw r4, 0(r31)
lbl_802970B0:
/* 802970B0 00292D10  2C 04 00 00 */	cmpwi r4, 0
/* 802970B4 00292D14  41 82 00 0C */	beq lbl_802970C0
/* 802970B8 00292D18  90 A4 00 08 */	stw r5, 8(r4)
/* 802970BC 00292D1C  48 00 00 08 */	b lbl_802970C4
lbl_802970C0:
/* 802970C0 00292D20  90 BF 00 04 */	stw r5, 4(r31)
lbl_802970C4:
/* 802970C4 00292D24  7C FD E2 14 */	add r7, r29, r28
/* 802970C8 00292D28  7C 07 30 50 */	subf r0, r7, r6
/* 802970CC 00292D2C  28 00 00 10 */	cmplwi r0, 0x10
/* 802970D0 00292D30  40 80 00 08 */	bge lbl_802970D8
/* 802970D4 00292D34  7C C7 33 78 */	mr r7, r6
lbl_802970D8:
/* 802970D8 00292D38  7C 07 30 50 */	subf r0, r7, r6
/* 802970DC 00292D3C  7C 9C 38 50 */	subf r4, r28, r7
/* 802970E0 00292D40  28 00 00 10 */	cmplwi r0, 0x10
/* 802970E4 00292D44  90 9E 00 04 */	stw r4, 4(r30)
/* 802970E8 00292D48  41 80 00 5C */	blt lbl_80297144
/* 802970EC 00292D4C  38 80 46 52 */	li r4, 0x4652
/* 802970F0 00292D50  38 07 00 10 */	addi r0, r7, 0x10
/* 802970F4 00292D54  B0 87 00 00 */	sth r4, 0(r7)
/* 802970F8 00292D58  38 80 00 00 */	li r4, 0
/* 802970FC 00292D5C  7C 00 30 50 */	subf r0, r0, r6
/* 80297100 00292D60  2C 05 00 00 */	cmpwi r5, 0
/* 80297104 00292D64  B0 87 00 02 */	sth r4, 2(r7)
/* 80297108 00292D68  90 07 00 04 */	stw r0, 4(r7)
/* 8029710C 00292D6C  90 87 00 0C */	stw r4, 0xc(r7)
/* 80297110 00292D70  90 A7 00 08 */	stw r5, 8(r7)
/* 80297114 00292D74  41 82 00 10 */	beq lbl_80297124
/* 80297118 00292D78  80 85 00 0C */	lwz r4, 0xc(r5)
/* 8029711C 00292D7C  90 E5 00 0C */	stw r7, 0xc(r5)
/* 80297120 00292D80  48 00 00 0C */	b lbl_8029712C
lbl_80297124:
/* 80297124 00292D84  80 9F 00 00 */	lwz r4, 0(r31)
/* 80297128 00292D88  90 FF 00 00 */	stw r7, 0(r31)
lbl_8029712C:
/* 8029712C 00292D8C  2C 04 00 00 */	cmpwi r4, 0
/* 80297130 00292D90  90 87 00 0C */	stw r4, 0xc(r7)
/* 80297134 00292D94  41 82 00 0C */	beq lbl_80297140
/* 80297138 00292D98  90 E4 00 08 */	stw r7, 8(r4)
/* 8029713C 00292D9C  48 00 00 08 */	b lbl_80297144
lbl_80297140:
/* 80297140 00292DA0  90 FF 00 04 */	stw r7, 4(r31)
lbl_80297144:
/* 80297144 00292DA4  80 1B 00 38 */	lwz r0, 0x38(r27)
/* 80297148 00292DA8  7C A3 38 50 */	subf r5, r3, r7
/* 8029714C 00292DAC  54 00 07 FF */	clrlwi. r0, r0, 0x1f
/* 80297150 00292DB0  41 82 00 44 */	beq lbl_80297194
/* 80297154 00292DB4  38 80 00 00 */	li r4, 0
/* 80297158 00292DB8  4B D6 CF AD */	bl memset
/* 8029715C 00292DBC  48 00 00 38 */	b lbl_80297194
lbl_80297160:
/* 80297160 00292DC0  7C 1D E2 14 */	add r0, r29, r28
/* 80297164 00292DC4  7F E3 FB 78 */	mr r3, r31
/* 80297168 00292DC8  90 01 00 08 */	stw r0, 8(r1)
/* 8029716C 00292DCC  38 81 00 08 */	addi r4, r1, 8
/* 80297170 00292DD0  80 1E 00 04 */	lwz r0, 4(r30)
/* 80297174 00292DD4  7C BE 02 14 */	add r5, r30, r0
/* 80297178 00292DD8  38 05 00 10 */	addi r0, r5, 0x10
/* 8029717C 00292DDC  90 01 00 0C */	stw r0, 0xc(r1)
/* 80297180 00292DE0  93 BE 00 04 */	stw r29, 4(r30)
/* 80297184 00292DE4  4B FF FB 5D */	bl RecycleRegion_
/* 80297188 00292DE8  2C 03 00 00 */	cmpwi r3, 0
/* 8029718C 00292DEC  40 82 00 08 */	bne lbl_80297194
/* 80297190 00292DF0  93 5E 00 04 */	stw r26, 4(r30)
lbl_80297194:
/* 80297194 00292DF4  80 1B 00 38 */	lwz r0, 0x38(r27)
/* 80297198 00292DF8  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 8029719C 00292DFC  41 82 00 0C */	beq lbl_802971A8
/* 802971A0 00292E00  38 7B 00 20 */	addi r3, r27, 0x20
/* 802971A4 00292E04  4B FD 88 81 */	bl OSUnlockMutex
lbl_802971A8:
/* 802971A8 00292E08  80 7E 00 04 */	lwz r3, 4(r30)
lbl_802971AC:
/* 802971AC 00292E0C  39 61 00 30 */	addi r11, r1, 0x30
/* 802971B0 00292E10  4B F2 FF C1 */	bl _restgpr_26
/* 802971B4 00292E14  80 01 00 34 */	lwz r0, 0x34(r1)
/* 802971B8 00292E18  7C 08 03 A6 */	mtlr r0
/* 802971BC 00292E1C  38 21 00 30 */	addi r1, r1, 0x30
/* 802971C0 00292E20  4E 80 00 20 */	blr

.global MEMFreeToExpHeap
MEMFreeToExpHeap:
/* 802971C4 00292E24  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802971C8 00292E28  7C 08 02 A6 */	mflr r0
/* 802971CC 00292E2C  2C 04 00 00 */	cmpwi r4, 0
/* 802971D0 00292E30  90 01 00 24 */	stw r0, 0x24(r1)
/* 802971D4 00292E34  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802971D8 00292E38  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802971DC 00292E3C  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802971E0 00292E40  7C 7D 1B 78 */	mr r29, r3
/* 802971E4 00292E44  41 82 00 90 */	beq lbl_80297274
/* 802971E8 00292E48  80 03 00 38 */	lwz r0, 0x38(r3)
/* 802971EC 00292E4C  3B E3 00 3C */	addi r31, r3, 0x3c
/* 802971F0 00292E50  3B C4 FF F0 */	addi r30, r4, -16
/* 802971F4 00292E54  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 802971F8 00292E58  41 82 00 0C */	beq lbl_80297204
/* 802971FC 00292E5C  38 63 00 20 */	addi r3, r3, 0x20
/* 80297200 00292E60  4B FD 87 49 */	bl OSLockMutex
lbl_80297204:
/* 80297204 00292E64  A0 1E 00 02 */	lhz r0, 2(r30)
/* 80297208 00292E68  54 00 C6 7E */	rlwinm r0, r0, 0x18, 0x19, 0x1f
/* 8029720C 00292E6C  7C 00 F0 50 */	subf r0, r0, r30
/* 80297210 00292E70  90 01 00 08 */	stw r0, 8(r1)
/* 80297214 00292E74  80 1E 00 04 */	lwz r0, 4(r30)
/* 80297218 00292E78  7C 7E 02 14 */	add r3, r30, r0
/* 8029721C 00292E7C  38 03 00 10 */	addi r0, r3, 0x10
/* 80297220 00292E80  90 01 00 0C */	stw r0, 0xc(r1)
/* 80297224 00292E84  80 9E 00 08 */	lwz r4, 8(r30)
/* 80297228 00292E88  80 7E 00 0C */	lwz r3, 0xc(r30)
/* 8029722C 00292E8C  2C 04 00 00 */	cmpwi r4, 0
/* 80297230 00292E90  41 82 00 0C */	beq lbl_8029723C
/* 80297234 00292E94  90 64 00 0C */	stw r3, 0xc(r4)
/* 80297238 00292E98  48 00 00 08 */	b lbl_80297240
lbl_8029723C:
/* 8029723C 00292E9C  90 7F 00 08 */	stw r3, 8(r31)
lbl_80297240:
/* 80297240 00292EA0  2C 03 00 00 */	cmpwi r3, 0
/* 80297244 00292EA4  41 82 00 0C */	beq lbl_80297250
/* 80297248 00292EA8  90 83 00 08 */	stw r4, 8(r3)
/* 8029724C 00292EAC  48 00 00 08 */	b lbl_80297254
lbl_80297250:
/* 80297250 00292EB0  90 9F 00 0C */	stw r4, 0xc(r31)
lbl_80297254:
/* 80297254 00292EB4  7F E3 FB 78 */	mr r3, r31
/* 80297258 00292EB8  38 81 00 08 */	addi r4, r1, 8
/* 8029725C 00292EBC  4B FF FA 85 */	bl RecycleRegion_
/* 80297260 00292EC0  80 1D 00 38 */	lwz r0, 0x38(r29)
/* 80297264 00292EC4  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80297268 00292EC8  41 82 00 0C */	beq lbl_80297274
/* 8029726C 00292ECC  38 7D 00 20 */	addi r3, r29, 0x20
/* 80297270 00292ED0  4B FD 87 B5 */	bl OSUnlockMutex
lbl_80297274:
/* 80297274 00292ED4  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80297278 00292ED8  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8029727C 00292EDC  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80297280 00292EE0  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80297284 00292EE4  7C 08 03 A6 */	mtlr r0
/* 80297288 00292EE8  38 21 00 20 */	addi r1, r1, 0x20
/* 8029728C 00292EEC  4E 80 00 20 */	blr

.global MEMGetTotalFreeSizeForExpHeap
MEMGetTotalFreeSizeForExpHeap:
/* 80297290 00292EF0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80297294 00292EF4  7C 08 02 A6 */	mflr r0
/* 80297298 00292EF8  90 01 00 14 */	stw r0, 0x14(r1)
/* 8029729C 00292EFC  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802972A0 00292F00  3B E0 00 00 */	li r31, 0
/* 802972A4 00292F04  93 C1 00 08 */	stw r30, 8(r1)
/* 802972A8 00292F08  7C 7E 1B 78 */	mr r30, r3
/* 802972AC 00292F0C  80 03 00 38 */	lwz r0, 0x38(r3)
/* 802972B0 00292F10  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 802972B4 00292F14  41 82 00 0C */	beq lbl_802972C0
/* 802972B8 00292F18  38 63 00 20 */	addi r3, r3, 0x20
/* 802972BC 00292F1C  4B FD 86 8D */	bl OSLockMutex
lbl_802972C0:
/* 802972C0 00292F20  80 7E 00 3C */	lwz r3, 0x3c(r30)
/* 802972C4 00292F24  48 00 00 10 */	b lbl_802972D4
lbl_802972C8:
/* 802972C8 00292F28  80 03 00 04 */	lwz r0, 4(r3)
/* 802972CC 00292F2C  80 63 00 0C */	lwz r3, 0xc(r3)
/* 802972D0 00292F30  7F FF 02 14 */	add r31, r31, r0
lbl_802972D4:
/* 802972D4 00292F34  2C 03 00 00 */	cmpwi r3, 0
/* 802972D8 00292F38  40 82 FF F0 */	bne lbl_802972C8
/* 802972DC 00292F3C  80 1E 00 38 */	lwz r0, 0x38(r30)
/* 802972E0 00292F40  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 802972E4 00292F44  41 82 00 0C */	beq lbl_802972F0
/* 802972E8 00292F48  38 7E 00 20 */	addi r3, r30, 0x20
/* 802972EC 00292F4C  4B FD 87 39 */	bl OSUnlockMutex
lbl_802972F0:
/* 802972F0 00292F50  7F E3 FB 78 */	mr r3, r31
/* 802972F4 00292F54  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802972F8 00292F58  83 C1 00 08 */	lwz r30, 8(r1)
/* 802972FC 00292F5C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80297300 00292F60  7C 08 03 A6 */	mtlr r0
/* 80297304 00292F64  38 21 00 10 */	addi r1, r1, 0x10
/* 80297308 00292F68  4E 80 00 20 */	blr

.global MEMSetGroupIDForExpHeap
MEMSetGroupIDForExpHeap:
/* 8029730C 00292F6C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80297310 00292F70  7C 08 02 A6 */	mflr r0
/* 80297314 00292F74  90 01 00 24 */	stw r0, 0x24(r1)
/* 80297318 00292F78  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8029731C 00292F7C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80297320 00292F80  7C 9E 23 78 */	mr r30, r4
/* 80297324 00292F84  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80297328 00292F88  7C 7D 1B 78 */	mr r29, r3
/* 8029732C 00292F8C  4B FD 74 31 */	bl OSDisableInterrupts
/* 80297330 00292F90  A3 FD 00 4C */	lhz r31, 0x4c(r29)
/* 80297334 00292F94  B3 DD 00 4C */	sth r30, 0x4c(r29)
/* 80297338 00292F98  4B FD 74 4D */	bl OSRestoreInterrupts
/* 8029733C 00292F9C  7F E3 FB 78 */	mr r3, r31
/* 80297340 00292FA0  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80297344 00292FA4  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80297348 00292FA8  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8029734C 00292FAC  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80297350 00292FB0  7C 08 03 A6 */	mtlr r0
/* 80297354 00292FB4  38 21 00 20 */	addi r1, r1, 0x20
/* 80297358 00292FB8  4E 80 00 20 */	blr

.global MEMVisitAllocatedForExpHeap
MEMVisitAllocatedForExpHeap:
/* 8029735C 00292FBC  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80297360 00292FC0  7C 08 02 A6 */	mflr r0
/* 80297364 00292FC4  90 01 00 24 */	stw r0, 0x24(r1)
/* 80297368 00292FC8  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8029736C 00292FCC  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80297370 00292FD0  7C BE 2B 78 */	mr r30, r5
/* 80297374 00292FD4  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80297378 00292FD8  7C 9D 23 78 */	mr r29, r4
/* 8029737C 00292FDC  93 81 00 10 */	stw r28, 0x10(r1)
/* 80297380 00292FE0  7C 7C 1B 78 */	mr r28, r3
/* 80297384 00292FE4  80 03 00 38 */	lwz r0, 0x38(r3)
/* 80297388 00292FE8  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 8029738C 00292FEC  41 82 00 0C */	beq lbl_80297398
/* 80297390 00292FF0  38 63 00 20 */	addi r3, r3, 0x20
/* 80297394 00292FF4  4B FD 85 B5 */	bl OSLockMutex
lbl_80297398:
/* 80297398 00292FF8  83 FC 00 44 */	lwz r31, 0x44(r28)
/* 8029739C 00292FFC  48 00 00 20 */	b lbl_802973BC
lbl_802973A0:
/* 802973A0 00293000  7F AC EB 78 */	mr r12, r29
/* 802973A4 00293004  38 7F 00 10 */	addi r3, r31, 0x10
/* 802973A8 00293008  7F 84 E3 78 */	mr r4, r28
/* 802973AC 0029300C  7F C5 F3 78 */	mr r5, r30
/* 802973B0 00293010  83 FF 00 0C */	lwz r31, 0xc(r31)
/* 802973B4 00293014  7D 89 03 A6 */	mtctr r12
/* 802973B8 00293018  4E 80 04 21 */	bctrl
lbl_802973BC:
/* 802973BC 0029301C  2C 1F 00 00 */	cmpwi r31, 0
/* 802973C0 00293020  40 82 FF E0 */	bne lbl_802973A0
/* 802973C4 00293024  80 1C 00 38 */	lwz r0, 0x38(r28)
/* 802973C8 00293028  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 802973CC 0029302C  41 82 00 0C */	beq lbl_802973D8
/* 802973D0 00293030  38 7C 00 20 */	addi r3, r28, 0x20
/* 802973D4 00293034  4B FD 86 51 */	bl OSUnlockMutex
lbl_802973D8:
/* 802973D8 00293038  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802973DC 0029303C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802973E0 00293040  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802973E4 00293044  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802973E8 00293048  83 81 00 10 */	lwz r28, 0x10(r1)
/* 802973EC 0029304C  7C 08 03 A6 */	mtlr r0
/* 802973F0 00293050  38 21 00 20 */	addi r1, r1, 0x20
/* 802973F4 00293054  4E 80 00 20 */	blr

.global MEMGetSizeForMBlockExpHeap
MEMGetSizeForMBlockExpHeap:
/* 802973F8 00293058  80 63 FF F4 */	lwz r3, -0xc(r3)
/* 802973FC 0029305C  4E 80 00 20 */	blr

.global MEMGetGroupIDForMBlockExpHeap
MEMGetGroupIDForMBlockExpHeap:
/* 80297400 00293060  A0 03 FF F2 */	lhz r0, -0xe(r3)
/* 80297404 00293064  54 03 06 3E */	clrlwi r3, r0, 0x18
/* 80297408 00293068  4E 80 00 20 */	blr