summaryrefslogtreecommitdiff
path: root/asm/SDK/MEM/mem_frameHeap.s
blob: 5cca960036ba2a9c6ef39c235a650b2678ad3d63 (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
.include "macros.inc"

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

.global MEMCreateFrmHeapEx
MEMCreateFrmHeapEx:
/* 8029740C 0029306C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80297410 00293070  7C 08 02 A6 */	mflr r0
/* 80297414 00293074  7C 84 1A 14 */	add r4, r4, r3
/* 80297418 00293078  90 01 00 14 */	stw r0, 0x14(r1)
/* 8029741C 0029307C  38 03 00 03 */	addi r0, r3, 3
/* 80297420 00293080  54 86 00 3A */	rlwinm r6, r4, 0, 0, 0x1d
/* 80297424 00293084  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80297428 00293088  54 1F 00 3A */	rlwinm r31, r0, 0, 0, 0x1d
/* 8029742C 0029308C  7C 1F 30 40 */	cmplw r31, r6
/* 80297430 00293090  41 81 00 10 */	bgt lbl_80297440
/* 80297434 00293094  7C 1F 30 50 */	subf r0, r31, r6
/* 80297438 00293098  28 00 00 48 */	cmplwi r0, 0x48
/* 8029743C 0029309C  40 80 00 0C */	bge lbl_80297448
lbl_80297440:
/* 80297440 002930A0  38 60 00 00 */	li r3, 0
/* 80297444 002930A4  48 00 00 38 */	b lbl_8029747C
lbl_80297448:
/* 80297448 002930A8  3C 80 46 52 */	lis r4, 0x46524D48@ha
/* 8029744C 002930AC  7C A7 2B 78 */	mr r7, r5
/* 80297450 002930B0  7F E3 FB 78 */	mr r3, r31
/* 80297454 002930B4  38 BF 00 48 */	addi r5, r31, 0x48
/* 80297458 002930B8  38 84 4D 48 */	addi r4, r4, 0x46524D48@l
/* 8029745C 002930BC  4B FF F1 B1 */	bl MEMiInitHeapHead
/* 80297460 002930C0  80 9F 00 18 */	lwz r4, 0x18(r31)
/* 80297464 002930C4  38 00 00 00 */	li r0, 0
/* 80297468 002930C8  7F E3 FB 78 */	mr r3, r31
/* 8029746C 002930CC  90 9F 00 3C */	stw r4, 0x3c(r31)
/* 80297470 002930D0  80 9F 00 1C */	lwz r4, 0x1c(r31)
/* 80297474 002930D4  90 9F 00 40 */	stw r4, 0x40(r31)
/* 80297478 002930D8  90 1F 00 44 */	stw r0, 0x44(r31)
lbl_8029747C:
/* 8029747C 002930DC  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80297480 002930E0  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 80297484 002930E4  7C 08 03 A6 */	mtlr r0
/* 80297488 002930E8  38 21 00 10 */	addi r1, r1, 0x10
/* 8029748C 002930EC  4E 80 00 20 */	blr

.global MEMDestroyFrmHeap
MEMDestroyFrmHeap:
/* 80297490 002930F0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80297494 002930F4  7C 08 02 A6 */	mflr r0
/* 80297498 002930F8  90 01 00 14 */	stw r0, 0x14(r1)
/* 8029749C 002930FC  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802974A0 00293100  7C 7F 1B 78 */	mr r31, r3
/* 802974A4 00293104  4B FF F3 29 */	bl MEMiFinalizeHeap
/* 802974A8 00293108  7F E3 FB 78 */	mr r3, r31
/* 802974AC 0029310C  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802974B0 00293110  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802974B4 00293114  7C 08 03 A6 */	mtlr r0
/* 802974B8 00293118  38 21 00 10 */	addi r1, r1, 0x10
/* 802974BC 0029311C  4E 80 00 20 */	blr

.global MEMAllocFromFrmHeapEx
MEMAllocFromFrmHeapEx:
/* 802974C0 00293120  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802974C4 00293124  7C 08 02 A6 */	mflr r0
/* 802974C8 00293128  2C 04 00 00 */	cmpwi r4, 0
/* 802974CC 0029312C  90 01 00 24 */	stw r0, 0x24(r1)
/* 802974D0 00293130  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802974D4 00293134  7C 7F 1B 78 */	mr r31, r3
/* 802974D8 00293138  93 C1 00 18 */	stw r30, 0x18(r1)
/* 802974DC 0029313C  7C 9E 23 78 */	mr r30, r4
/* 802974E0 00293140  93 A1 00 14 */	stw r29, 0x14(r1)
/* 802974E4 00293144  7C BD 2B 78 */	mr r29, r5
/* 802974E8 00293148  40 82 00 08 */	bne lbl_802974F0
/* 802974EC 0029314C  3B C0 00 01 */	li r30, 1
lbl_802974F0:
/* 802974F0 00293150  80 03 00 38 */	lwz r0, 0x38(r3)
/* 802974F4 00293154  38 9E 00 03 */	addi r4, r30, 3
/* 802974F8 00293158  54 9E 00 3A */	rlwinm r30, r4, 0, 0, 0x1d
/* 802974FC 0029315C  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80297500 00293160  41 82 00 0C */	beq lbl_8029750C
/* 80297504 00293164  38 63 00 20 */	addi r3, r3, 0x20
/* 80297508 00293168  4B FD 84 41 */	bl OSLockMutex
lbl_8029750C:
/* 8029750C 0029316C  2C 1D 00 00 */	cmpwi r29, 0
/* 80297510 00293170  41 80 00 54 */	blt lbl_80297564
/* 80297514 00293174  80 7F 00 3C */	lwz r3, 0x3c(r31)
/* 80297518 00293178  38 1D FF FF */	addi r0, r29, -1
/* 8029751C 0029317C  7C 05 00 F8 */	nor r5, r0, r0
/* 80297520 00293180  80 1F 00 40 */	lwz r0, 0x40(r31)
/* 80297524 00293184  7C 9D 1A 14 */	add r4, r29, r3
/* 80297528 00293188  38 84 FF FF */	addi r4, r4, -1
/* 8029752C 0029318C  7C BD 20 38 */	and r29, r5, r4
/* 80297530 00293190  7F DE EA 14 */	add r30, r30, r29
/* 80297534 00293194  7C 1E 00 40 */	cmplw r30, r0
/* 80297538 00293198  40 81 00 0C */	ble lbl_80297544
/* 8029753C 0029319C  3B A0 00 00 */	li r29, 0
/* 80297540 002931A0  48 00 00 6C */	b lbl_802975AC
lbl_80297544:
/* 80297544 002931A4  80 1F 00 38 */	lwz r0, 0x38(r31)
/* 80297548 002931A8  7C A3 F0 50 */	subf r5, r3, r30
/* 8029754C 002931AC  54 00 07 FF */	clrlwi. r0, r0, 0x1f
/* 80297550 002931B0  41 82 00 0C */	beq lbl_8029755C
/* 80297554 002931B4  38 80 00 00 */	li r4, 0
/* 80297558 002931B8  4B D6 CB AD */	bl memset
lbl_8029755C:
/* 8029755C 002931BC  93 DF 00 3C */	stw r30, 0x3c(r31)
/* 80297560 002931C0  48 00 00 4C */	b lbl_802975AC
lbl_80297564:
/* 80297564 002931C4  80 BF 00 40 */	lwz r5, 0x40(r31)
/* 80297568 002931C8  20 1D FF FF */	subfic r0, r29, -1
/* 8029756C 002931CC  7C 04 00 F8 */	nor r4, r0, r0
/* 80297570 002931D0  80 1F 00 3C */	lwz r0, 0x3c(r31)
/* 80297574 002931D4  7C 7E 28 50 */	subf r3, r30, r5
/* 80297578 002931D8  7C 9D 18 38 */	and r29, r4, r3
/* 8029757C 002931DC  7C 1D 00 40 */	cmplw r29, r0
/* 80297580 002931E0  40 80 00 0C */	bge lbl_8029758C
/* 80297584 002931E4  3B A0 00 00 */	li r29, 0
/* 80297588 002931E8  48 00 00 24 */	b lbl_802975AC
lbl_8029758C:
/* 8029758C 002931EC  80 1F 00 38 */	lwz r0, 0x38(r31)
/* 80297590 002931F0  7C BD 28 50 */	subf r5, r29, r5
/* 80297594 002931F4  54 00 07 FF */	clrlwi. r0, r0, 0x1f
/* 80297598 002931F8  41 82 00 10 */	beq lbl_802975A8
/* 8029759C 002931FC  7F A3 EB 78 */	mr r3, r29
/* 802975A0 00293200  38 80 00 00 */	li r4, 0
/* 802975A4 00293204  4B D6 CB 61 */	bl memset
lbl_802975A8:
/* 802975A8 00293208  93 BF 00 40 */	stw r29, 0x40(r31)
lbl_802975AC:
/* 802975AC 0029320C  80 1F 00 38 */	lwz r0, 0x38(r31)
/* 802975B0 00293210  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 802975B4 00293214  41 82 00 0C */	beq lbl_802975C0
/* 802975B8 00293218  38 7F 00 20 */	addi r3, r31, 0x20
/* 802975BC 0029321C  4B FD 84 69 */	bl OSUnlockMutex
lbl_802975C0:
/* 802975C0 00293220  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802975C4 00293224  7F A3 EB 78 */	mr r3, r29
/* 802975C8 00293228  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 802975CC 0029322C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 802975D0 00293230  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802975D4 00293234  7C 08 03 A6 */	mtlr r0
/* 802975D8 00293238  38 21 00 20 */	addi r1, r1, 0x20
/* 802975DC 0029323C  4E 80 00 20 */	blr

.global MEMFreeToFrmHeap
MEMFreeToFrmHeap:
/* 802975E0 00293240  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802975E4 00293244  7C 08 02 A6 */	mflr r0
/* 802975E8 00293248  90 01 00 14 */	stw r0, 0x14(r1)
/* 802975EC 0029324C  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802975F0 00293250  7C 9F 23 78 */	mr r31, r4
/* 802975F4 00293254  93 C1 00 08 */	stw r30, 8(r1)
/* 802975F8 00293258  7C 7E 1B 78 */	mr r30, r3
/* 802975FC 0029325C  80 03 00 38 */	lwz r0, 0x38(r3)
/* 80297600 00293260  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 80297604 00293264  41 82 00 0C */	beq lbl_80297610
/* 80297608 00293268  38 63 00 20 */	addi r3, r3, 0x20
/* 8029760C 0029326C  4B FD 83 3D */	bl OSLockMutex
lbl_80297610:
/* 80297610 00293270  57 E0 07 FF */	clrlwi. r0, r31, 0x1f
/* 80297614 00293274  41 82 00 14 */	beq lbl_80297628
/* 80297618 00293278  80 7E 00 18 */	lwz r3, 0x18(r30)
/* 8029761C 0029327C  38 00 00 00 */	li r0, 0
/* 80297620 00293280  90 1E 00 44 */	stw r0, 0x44(r30)
/* 80297624 00293284  90 7E 00 3C */	stw r3, 0x3c(r30)
lbl_80297628:
/* 80297628 00293288  57 E0 07 BD */	rlwinm. r0, r31, 0, 0x1e, 0x1e
/* 8029762C 0029328C  41 82 00 28 */	beq lbl_80297654
/* 80297630 00293290  80 7E 00 44 */	lwz r3, 0x44(r30)
/* 80297634 00293294  48 00 00 10 */	b lbl_80297644
lbl_80297638:
/* 80297638 00293298  80 1E 00 1C */	lwz r0, 0x1c(r30)
/* 8029763C 0029329C  90 03 00 08 */	stw r0, 8(r3)
/* 80297640 002932A0  80 63 00 0C */	lwz r3, 0xc(r3)
lbl_80297644:
/* 80297644 002932A4  2C 03 00 00 */	cmpwi r3, 0
/* 80297648 002932A8  40 82 FF F0 */	bne lbl_80297638
/* 8029764C 002932AC  80 1E 00 1C */	lwz r0, 0x1c(r30)
/* 80297650 002932B0  90 1E 00 40 */	stw r0, 0x40(r30)
lbl_80297654:
/* 80297654 002932B4  80 1E 00 38 */	lwz r0, 0x38(r30)
/* 80297658 002932B8  54 00 07 7B */	rlwinm. r0, r0, 0, 0x1d, 0x1d
/* 8029765C 002932BC  41 82 00 0C */	beq lbl_80297668
/* 80297660 002932C0  38 7E 00 20 */	addi r3, r30, 0x20
/* 80297664 002932C4  4B FD 83 C1 */	bl OSUnlockMutex
lbl_80297668:
/* 80297668 002932C8  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8029766C 002932CC  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 80297670 002932D0  83 C1 00 08 */	lwz r30, 8(r1)
/* 80297674 002932D4  7C 08 03 A6 */	mtlr r0
/* 80297678 002932D8  38 21 00 10 */	addi r1, r1, 0x10
/* 8029767C 002932DC  4E 80 00 20 */	blr

.global MEMGetAllocatableSizeForFrmHeapEx
MEMGetAllocatableSizeForFrmHeapEx:
/* 80297680 002932E0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80297684 002932E4  7C 08 02 A6 */	mflr r0
/* 80297688 002932E8  90 01 00 14 */	stw r0, 0x14(r1)
/* 8029768C 002932EC  7C 80 FE 70 */	srawi r0, r4, 0x1f
/* 80297690 002932F0  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80297694 002932F4  7C 1F 22 78 */	xor r31, r0, r4
/* 80297698 002932F8  7F E0 F8 50 */	subf r31, r0, r31
/* 8029769C 002932FC  93 C1 00 08 */	stw r30, 8(r1)
/* 802976A0 00293300  7C 7E 1B 78 */	mr r30, r3
/* 802976A4 00293304  4B FD 70 B9 */	bl OSDisableInterrupts
/* 802976A8 00293308  80 1E 00 3C */	lwz r0, 0x3c(r30)
/* 802976AC 0029330C  38 9F FF FF */	addi r4, r31, -1
/* 802976B0 00293310  7C 85 20 F8 */	nor r5, r4, r4
/* 802976B4 00293314  80 DE 00 40 */	lwz r6, 0x40(r30)
/* 802976B8 00293318  7C 9F 02 14 */	add r4, r31, r0
/* 802976BC 0029331C  38 04 FF FF */	addi r0, r4, -1
/* 802976C0 00293320  7C A0 00 38 */	and r0, r5, r0
/* 802976C4 00293324  7C 00 30 40 */	cmplw r0, r6
/* 802976C8 00293328  40 81 00 0C */	ble lbl_802976D4
/* 802976CC 0029332C  3B E0 00 00 */	li r31, 0
/* 802976D0 00293330  48 00 00 08 */	b lbl_802976D8
lbl_802976D4:
/* 802976D4 00293334  7F E0 30 50 */	subf r31, r0, r6
lbl_802976D8:
/* 802976D8 00293338  4B FD 70 AD */	bl OSRestoreInterrupts
/* 802976DC 0029333C  7F E3 FB 78 */	mr r3, r31
/* 802976E0 00293340  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802976E4 00293344  83 C1 00 08 */	lwz r30, 8(r1)
/* 802976E8 00293348  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802976EC 0029334C  7C 08 03 A6 */	mtlr r0
/* 802976F0 00293350  38 21 00 10 */	addi r1, r1, 0x10
/* 802976F4 00293354  4E 80 00 20 */	blr