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

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

.global THPAudioDecode
THPAudioDecode:
/* 8029EEFC 0029AB5C  94 21 FF C0 */	stwu r1, -0x40(r1)
/* 8029EF00 0029AB60  7C 08 02 A6 */	mflr r0
/* 8029EF04 0029AB64  90 01 00 44 */	stw r0, 0x44(r1)
/* 8029EF08 0029AB68  39 61 00 40 */	addi r11, r1, 0x40
/* 8029EF0C 0029AB6C  4B F2 82 01 */	bl _savegpr_20
/* 8029EF10 0029AB70  2C 03 00 00 */	cmpwi r3, 0
/* 8029EF14 0029AB74  41 82 00 0C */	beq lbl_8029EF20
/* 8029EF18 0029AB78  2C 04 00 00 */	cmpwi r4, 0
/* 8029EF1C 0029AB7C  40 82 00 0C */	bne lbl_8029EF28
lbl_8029EF20:
/* 8029EF20 0029AB80  38 60 00 00 */	li r3, 0
/* 8029EF24 0029AB84  48 00 04 54 */	b lbl_8029F378
lbl_8029EF28:
/* 8029EF28 0029AB88  2C 05 00 01 */	cmpwi r5, 1
/* 8029EF2C 0029AB8C  80 A4 00 00 */	lwz r5, 0(r4)
/* 8029EF30 0029AB90  3A 84 00 50 */	addi r20, r4, 0x50
/* 8029EF34 0029AB94  7D 94 2A 14 */	add r12, r20, r5
/* 8029EF38 0029AB98  40 82 00 1C */	bne lbl_8029EF54
/* 8029EF3C 0029AB9C  80 04 00 04 */	lwz r0, 4(r4)
/* 8029EF40 0029ABA0  7C 7E 1B 78 */	mr r30, r3
/* 8029EF44 0029ABA4  39 00 00 01 */	li r8, 1
/* 8029EF48 0029ABA8  54 00 08 3C */	slwi r0, r0, 1
/* 8029EF4C 0029ABAC  7F E3 02 14 */	add r31, r3, r0
/* 8029EF50 0029ABB0  48 00 00 10 */	b lbl_8029EF60
lbl_8029EF54:
/* 8029EF54 0029ABB4  7C 7E 1B 78 */	mr r30, r3
/* 8029EF58 0029ABB8  3B E3 00 02 */	addi r31, r3, 2
/* 8029EF5C 0029ABBC  39 00 00 02 */	li r8, 2
lbl_8029EF60:
/* 8029EF60 0029ABC0  2C 05 00 00 */	cmpwi r5, 0
/* 8029EF64 0029ABC4  40 82 01 68 */	bne lbl_8029F0CC
/* 8029EF68 0029ABC8  88 B4 00 00 */	lbz r5, 0(r20)
/* 8029EF6C 0029ABCC  3E E0 80 00 */	lis r23, 0x7FFFFFFF@ha
/* 8029EF70 0029ABD0  39 60 00 00 */	li r11, 0
/* 8029EF74 0029ABD4  3C 60 00 01 */	lis r3, 0x00008000@ha
/* 8029EF78 0029ABD8  A9 24 00 48 */	lha r9, 0x48(r4)
/* 8029EF7C 0029ABDC  54 A0 E7 7E */	rlwinm r0, r5, 0x1c, 0x1d, 0x1f
/* 8029EF80 0029ABE0  54 A7 07 3E */	clrlwi r7, r5, 0x1c
/* 8029EF84 0029ABE4  A9 44 00 4A */	lha r10, 0x4a(r4)
/* 8029EF88 0029ABE8  55 08 08 3C */	slwi r8, r8, 1
/* 8029EF8C 0029ABEC  38 B4 00 01 */	addi r5, r20, 1
/* 8029EF90 0029ABF0  3B 63 80 00 */	addi r27, r3, 0x00008000@l
/* 8029EF94 0029ABF4  3B 37 FF FF */	addi r25, r23, 0x7FFFFFFF@l
/* 8029EF98 0029ABF8  6D 78 80 00 */	xoris r24, r11, 0x8000
/* 8029EF9C 0029ABFC  38 C0 00 02 */	li r6, 2
/* 8029EFA0 0029AC00  3B 40 00 00 */	li r26, 0
/* 8029EFA4 0029AC04  3A C0 FF FF */	li r22, -1
/* 8029EFA8 0029AC08  48 00 01 14 */	b lbl_8029F0BC
lbl_8029EFAC:
/* 8029EFAC 0029AC0C  54 C3 07 3F */	clrlwi. r3, r6, 0x1c
/* 8029EFB0 0029AC10  40 82 00 18 */	bne lbl_8029EFC8
/* 8029EFB4 0029AC14  88 65 00 00 */	lbz r3, 0(r5)
/* 8029EFB8 0029AC18  38 A5 00 01 */	addi r5, r5, 1
/* 8029EFBC 0029AC1C  38 C6 00 02 */	addi r6, r6, 2
/* 8029EFC0 0029AC20  54 60 E7 7E */	rlwinm r0, r3, 0x1c, 0x1d, 0x1f
/* 8029EFC4 0029AC24  54 67 07 3E */	clrlwi r7, r3, 0x1c
lbl_8029EFC8:
/* 8029EFC8 0029AC28  54 C3 07 FF */	clrlwi. r3, r6, 0x1f
/* 8029EFCC 0029AC2C  41 82 00 18 */	beq lbl_8029EFE4
/* 8029EFD0 0029AC30  88 65 00 00 */	lbz r3, 0(r5)
/* 8029EFD4 0029AC34  38 A5 00 01 */	addi r5, r5, 1
/* 8029EFD8 0029AC38  54 63 E0 06 */	slwi r3, r3, 0x1c
/* 8029EFDC 0029AC3C  7C 75 E6 70 */	srawi r21, r3, 0x1c
/* 8029EFE0 0029AC40  48 00 00 10 */	b lbl_8029EFF0
lbl_8029EFE4:
/* 8029EFE4 0029AC44  88 65 00 00 */	lbz r3, 0(r5)
/* 8029EFE8 0029AC48  54 63 C0 06 */	rlwinm r3, r3, 0x18, 0, 3
/* 8029EFEC 0029AC4C  7C 75 E6 70 */	srawi r21, r3, 0x1c
lbl_8029EFF0:
/* 8029EFF0 0029AC50  54 0C 15 BA */	rlwinm r12, r0, 2, 0x16, 0x1d
/* 8029EFF4 0029AC54  54 E3 06 3E */	clrlwi r3, r7, 0x18
/* 8029EFF8 0029AC58  7D 84 62 14 */	add r12, r4, r12
/* 8029EFFC 0029AC5C  7D 5C 07 34 */	extsh r28, r10
/* 8029F000 0029AC60  A9 4C 00 0A */	lha r10, 0xa(r12)
/* 8029F004 0029AC64  7E A3 18 30 */	slw r3, r21, r3
/* 8029F008 0029AC68  A9 8C 00 08 */	lha r12, 8(r12)
/* 8029F00C 0029AC6C  7D 35 07 34 */	extsh r21, r9
/* 8029F010 0029AC70  7F 9C 51 D6 */	mullw r28, r28, r10
/* 8029F014 0029AC74  54 6A 58 28 */	slwi r10, r3, 0xb
/* 8029F018 0029AC78  38 C6 00 01 */	addi r6, r6, 1
/* 8029F01C 0029AC7C  7E B5 61 D6 */	mullw r21, r21, r12
/* 8029F020 0029AC80  7F 83 FE 70 */	srawi r3, r28, 0x1f
/* 8029F024 0029AC84  7E AC FE 70 */	srawi r12, r21, 0x1f
/* 8029F028 0029AC88  7F 9C A8 14 */	addc r28, r28, r21
/* 8029F02C 0029AC8C  7E A3 61 14 */	adde r21, r3, r12
/* 8029F030 0029AC90  7D 43 FE 70 */	srawi r3, r10, 0x1f
/* 8029F034 0029AC94  7D 9C 50 14 */	addc r12, r28, r10
/* 8029F038 0029AC98  7C 75 19 14 */	adde r3, r21, r3
/* 8029F03C 0029AC9C  55 8A 28 34 */	slwi r10, r12, 5
/* 8029F040 0029ACA0  54 63 28 34 */	slwi r3, r3, 5
/* 8029F044 0029ACA4  51 83 2E FE */	rlwimi r3, r12, 5, 0x1b, 0x1f
/* 8029F048 0029ACA8  7E 8A D8 14 */	addc r20, r10, r27
/* 8029F04C 0029ACAC  7C 63 D1 14 */	adde r3, r3, r26
/* 8029F050 0029ACB0  6C 6C 80 00 */	xoris r12, r3, 0x8000
/* 8029F054 0029ACB4  7D 54 C8 10 */	subfc r10, r20, r25
/* 8029F058 0029ACB8  7D 8C C1 10 */	subfe r12, r12, r24
/* 8029F05C 0029ACBC  7D 98 C1 10 */	subfe r12, r24, r24
/* 8029F060 0029ACC0  7D 8C 00 D1 */	neg. r12, r12
/* 8029F064 0029ACC4  41 82 00 0C */	beq lbl_8029F070
/* 8029F068 0029ACC8  3A 97 FF FF */	addi r20, r23, -1
/* 8029F06C 0029ACCC  38 60 00 00 */	li r3, 0
lbl_8029F070:
/* 8029F070 0029ACD0  6C 6A 80 00 */	xoris r10, r3, 0x8000
/* 8029F074 0029ACD4  6E D5 80 00 */	xoris r21, r22, 0x8000
/* 8029F078 0029ACD8  7D 97 A0 10 */	subfc r12, r23, r20
/* 8029F07C 0029ACDC  7E B5 51 10 */	subfe r21, r21, r10
/* 8029F080 0029ACE0  7E AA 51 10 */	subfe r21, r10, r10
/* 8029F084 0029ACE4  7E B5 00 D1 */	neg. r21, r21
/* 8029F088 0029ACE8  41 82 00 0C */	beq lbl_8029F094
/* 8029F08C 0029ACEC  3E 80 80 00 */	lis r20, 0x8000
/* 8029F090 0029ACF0  38 60 FF FF */	li r3, -1
lbl_8029F094:
/* 8029F094 0029ACF4  56 8C 80 3E */	rotlwi r12, r20, 0x10
/* 8029F098 0029ACF8  7D 2A 4B 78 */	mr r10, r9
/* 8029F09C 0029ACFC  50 6C 80 1E */	rlwimi r12, r3, 0x10, 0, 0xf
/* 8029F0A0 0029AD00  7C 63 86 70 */	srawi r3, r3, 0x10
/* 8029F0A4 0029AD04  B1 9F 00 00 */	sth r12, 0(r31)
/* 8029F0A8 0029AD08  7D 89 63 78 */	mr r9, r12
/* 8029F0AC 0029AD0C  7F FF 42 14 */	add r31, r31, r8
/* 8029F0B0 0029AD10  39 6B 00 01 */	addi r11, r11, 1
/* 8029F0B4 0029AD14  B1 9E 00 00 */	sth r12, 0(r30)
/* 8029F0B8 0029AD18  7F DE 42 14 */	add r30, r30, r8
lbl_8029F0BC:
/* 8029F0BC 0029AD1C  80 64 00 04 */	lwz r3, 4(r4)
/* 8029F0C0 0029AD20  7C 0B 18 40 */	cmplw r11, r3
/* 8029F0C4 0029AD24  41 80 FE E8 */	blt lbl_8029EFAC
/* 8029F0C8 0029AD28  48 00 02 B0 */	b lbl_8029F378
lbl_8029F0CC:
/* 8029F0CC 0029AD2C  88 14 00 00 */	lbz r0, 0(r20)
/* 8029F0D0 0029AD30  3F 40 80 00 */	lis r26, 0x7FFFFFFF@ha
/* 8029F0D4 0029AD34  38 C0 00 00 */	li r6, 0
/* 8029F0D8 0029AD38  3C E0 00 01 */	lis r7, 0x00008000@ha
/* 8029F0DC 0029AD3C  A8 64 00 48 */	lha r3, 0x48(r4)
/* 8029F0E0 0029AD40  54 0A E7 7E */	rlwinm r10, r0, 0x1c, 0x1d, 0x1f
/* 8029F0E4 0029AD44  54 0B 07 3E */	clrlwi r11, r0, 0x1c
/* 8029F0E8 0029AD48  55 00 08 3C */	slwi r0, r8, 1
/* 8029F0EC 0029AD4C  A8 A4 00 4A */	lha r5, 0x4a(r4)
/* 8029F0F0 0029AD50  39 14 00 01 */	addi r8, r20, 1
/* 8029F0F4 0029AD54  3A C7 80 00 */	addi r22, r7, 0x00008000@l
/* 8029F0F8 0029AD58  3B 9A FF FF */	addi r28, r26, 0x7FFFFFFF@l
/* 8029F0FC 0029AD5C  6C DB 80 00 */	xoris r27, r6, 0x8000
/* 8029F100 0029AD60  39 20 00 02 */	li r9, 2
/* 8029F104 0029AD64  3B A0 00 00 */	li r29, 0
/* 8029F108 0029AD68  3B 20 FF FF */	li r25, -1
/* 8029F10C 0029AD6C  48 00 01 0C */	b lbl_8029F218
lbl_8029F110:
/* 8029F110 0029AD70  55 27 07 3F */	clrlwi. r7, r9, 0x1c
/* 8029F114 0029AD74  40 82 00 18 */	bne lbl_8029F12C
/* 8029F118 0029AD78  88 E8 00 00 */	lbz r7, 0(r8)
/* 8029F11C 0029AD7C  39 08 00 01 */	addi r8, r8, 1
/* 8029F120 0029AD80  39 29 00 02 */	addi r9, r9, 2
/* 8029F124 0029AD84  54 EA E7 7E */	rlwinm r10, r7, 0x1c, 0x1d, 0x1f
/* 8029F128 0029AD88  54 EB 07 3E */	clrlwi r11, r7, 0x1c
lbl_8029F12C:
/* 8029F12C 0029AD8C  55 27 07 FF */	clrlwi. r7, r9, 0x1f
/* 8029F130 0029AD90  41 82 00 18 */	beq lbl_8029F148
/* 8029F134 0029AD94  88 E8 00 00 */	lbz r7, 0(r8)
/* 8029F138 0029AD98  39 08 00 01 */	addi r8, r8, 1
/* 8029F13C 0029AD9C  54 E7 E0 06 */	slwi r7, r7, 0x1c
/* 8029F140 0029ADA0  7C F8 E6 70 */	srawi r24, r7, 0x1c
/* 8029F144 0029ADA4  48 00 00 10 */	b lbl_8029F154
lbl_8029F148:
/* 8029F148 0029ADA8  88 E8 00 00 */	lbz r7, 0(r8)
/* 8029F14C 0029ADAC  54 E7 C0 06 */	rlwinm r7, r7, 0x18, 0, 3
/* 8029F150 0029ADB0  7C F8 E6 70 */	srawi r24, r7, 0x1c
lbl_8029F154:
/* 8029F154 0029ADB4  55 55 15 BA */	rlwinm r21, r10, 2, 0x16, 0x1d
/* 8029F158 0029ADB8  55 67 06 3E */	clrlwi r7, r11, 0x18
/* 8029F15C 0029ADBC  7E 84 AA 14 */	add r20, r4, r21
/* 8029F160 0029ADC0  7C B7 07 34 */	extsh r23, r5
/* 8029F164 0029ADC4  AA B4 00 0A */	lha r21, 0xa(r20)
/* 8029F168 0029ADC8  7F 05 38 30 */	slw r5, r24, r7
/* 8029F16C 0029ADCC  A8 F4 00 08 */	lha r7, 8(r20)
/* 8029F170 0029ADD0  7C 78 07 34 */	extsh r24, r3
/* 8029F174 0029ADD4  7E B7 A9 D6 */	mullw r21, r23, r21
/* 8029F178 0029ADD8  54 B7 58 28 */	slwi r23, r5, 0xb
/* 8029F17C 0029ADDC  39 29 00 01 */	addi r9, r9, 1
/* 8029F180 0029ADE0  7F 18 39 D6 */	mullw r24, r24, r7
/* 8029F184 0029ADE4  7E A7 FE 70 */	srawi r7, r21, 0x1f
/* 8029F188 0029ADE8  7F 05 FE 70 */	srawi r5, r24, 0x1f
/* 8029F18C 0029ADEC  7F 15 C0 14 */	addc r24, r21, r24
/* 8029F190 0029ADF0  7C E7 29 14 */	adde r7, r7, r5
/* 8029F194 0029ADF4  7E E5 FE 70 */	srawi r5, r23, 0x1f
/* 8029F198 0029ADF8  7E F8 B8 14 */	addc r23, r24, r23
/* 8029F19C 0029ADFC  7C A7 29 14 */	adde r5, r7, r5
/* 8029F1A0 0029AE00  56 E7 28 34 */	slwi r7, r23, 5
/* 8029F1A4 0029AE04  54 A5 28 34 */	slwi r5, r5, 5
/* 8029F1A8 0029AE08  52 E5 2E FE */	rlwimi r5, r23, 5, 0x1b, 0x1f
/* 8029F1AC 0029AE0C  7E 87 B0 14 */	addc r20, r7, r22
/* 8029F1B0 0029AE10  7C E5 E9 14 */	adde r7, r5, r29
/* 8029F1B4 0029AE14  6C F7 80 00 */	xoris r23, r7, 0x8000
/* 8029F1B8 0029AE18  7C B4 E0 10 */	subfc r5, r20, r28
/* 8029F1BC 0029AE1C  7E F7 D9 10 */	subfe r23, r23, r27
/* 8029F1C0 0029AE20  7E FB D9 10 */	subfe r23, r27, r27
/* 8029F1C4 0029AE24  7E F7 00 D1 */	neg. r23, r23
/* 8029F1C8 0029AE28  41 82 00 0C */	beq lbl_8029F1D4
/* 8029F1CC 0029AE2C  3A 9A FF FF */	addi r20, r26, -1
/* 8029F1D0 0029AE30  38 E0 00 00 */	li r7, 0
lbl_8029F1D4:
/* 8029F1D4 0029AE34  6C E5 80 00 */	xoris r5, r7, 0x8000
/* 8029F1D8 0029AE38  6F 38 80 00 */	xoris r24, r25, 0x8000
/* 8029F1DC 0029AE3C  7E FA A0 10 */	subfc r23, r26, r20
/* 8029F1E0 0029AE40  7F 18 29 10 */	subfe r24, r24, r5
/* 8029F1E4 0029AE44  7F 05 29 10 */	subfe r24, r5, r5
/* 8029F1E8 0029AE48  7F 18 00 D1 */	neg. r24, r24
/* 8029F1EC 0029AE4C  41 82 00 0C */	beq lbl_8029F1F8
/* 8029F1F0 0029AE50  3E 80 80 00 */	lis r20, 0x8000
/* 8029F1F4 0029AE54  38 E0 FF FF */	li r7, -1
lbl_8029F1F8:
/* 8029F1F8 0029AE58  56 97 80 3E */	rotlwi r23, r20, 0x10
/* 8029F1FC 0029AE5C  7C 65 1B 78 */	mr r5, r3
/* 8029F200 0029AE60  50 F7 80 1E */	rlwimi r23, r7, 0x10, 0, 0xf
/* 8029F204 0029AE64  7C E3 86 70 */	srawi r3, r7, 0x10
/* 8029F208 0029AE68  B2 FF 00 00 */	sth r23, 0(r31)
/* 8029F20C 0029AE6C  7E E3 BB 78 */	mr r3, r23
/* 8029F210 0029AE70  7F FF 02 14 */	add r31, r31, r0
/* 8029F214 0029AE74  38 C6 00 01 */	addi r6, r6, 1
lbl_8029F218:
/* 8029F218 0029AE78  80 E4 00 04 */	lwz r7, 4(r4)
/* 8029F21C 0029AE7C  7C 06 38 40 */	cmplw r6, r7
/* 8029F220 0029AE80  41 80 FE F0 */	blt lbl_8029F110
/* 8029F224 0029AE84  89 0C 00 00 */	lbz r8, 0(r12)
/* 8029F228 0029AE88  3F A0 80 00 */	lis r29, 0x7FFFFFFF@ha
/* 8029F22C 0029AE8C  38 E0 00 00 */	li r7, 0
/* 8029F230 0029AE90  3C 60 00 01 */	lis r3, 0x00008000@ha
/* 8029F234 0029AE94  A8 A4 00 4C */	lha r5, 0x4c(r4)
/* 8029F238 0029AE98  55 0A E7 7E */	rlwinm r10, r8, 0x1c, 0x1d, 0x1f
/* 8029F23C 0029AE9C  55 0B 07 3E */	clrlwi r11, r8, 0x1c
/* 8029F240 0029AEA0  A8 C4 00 4E */	lha r6, 0x4e(r4)
/* 8029F244 0029AEA4  39 0C 00 01 */	addi r8, r12, 1
/* 8029F248 0029AEA8  3B 23 80 00 */	addi r25, r3, 0x00008000@l
/* 8029F24C 0029AEAC  3B 7D FF FF */	addi r27, r29, 0x7FFFFFFF@l
/* 8029F250 0029AEB0  6C FC 80 00 */	xoris r28, r7, 0x8000
/* 8029F254 0029AEB4  39 20 00 02 */	li r9, 2
/* 8029F258 0029AEB8  3B 40 00 00 */	li r26, 0
/* 8029F25C 0029AEBC  3B E0 FF FF */	li r31, -1
/* 8029F260 0029AEC0  48 00 01 0C */	b lbl_8029F36C
lbl_8029F264:
/* 8029F264 0029AEC4  55 23 07 3F */	clrlwi. r3, r9, 0x1c
/* 8029F268 0029AEC8  40 82 00 18 */	bne lbl_8029F280
/* 8029F26C 0029AECC  88 68 00 00 */	lbz r3, 0(r8)
/* 8029F270 0029AED0  39 08 00 01 */	addi r8, r8, 1
/* 8029F274 0029AED4  39 29 00 02 */	addi r9, r9, 2
/* 8029F278 0029AED8  54 6A E7 7E */	rlwinm r10, r3, 0x1c, 0x1d, 0x1f
/* 8029F27C 0029AEDC  54 6B 07 3E */	clrlwi r11, r3, 0x1c
lbl_8029F280:
/* 8029F280 0029AEE0  55 23 07 FF */	clrlwi. r3, r9, 0x1f
/* 8029F284 0029AEE4  41 82 00 18 */	beq lbl_8029F29C
/* 8029F288 0029AEE8  88 68 00 00 */	lbz r3, 0(r8)
/* 8029F28C 0029AEEC  39 08 00 01 */	addi r8, r8, 1
/* 8029F290 0029AEF0  54 63 E0 06 */	slwi r3, r3, 0x1c
/* 8029F294 0029AEF4  7C 75 E6 70 */	srawi r21, r3, 0x1c
/* 8029F298 0029AEF8  48 00 00 10 */	b lbl_8029F2A8
lbl_8029F29C:
/* 8029F29C 0029AEFC  88 68 00 00 */	lbz r3, 0(r8)
/* 8029F2A0 0029AF00  54 63 C0 06 */	rlwinm r3, r3, 0x18, 0, 3
/* 8029F2A4 0029AF04  7C 75 E6 70 */	srawi r21, r3, 0x1c
lbl_8029F2A8:
/* 8029F2A8 0029AF08  55 4C 15 BA */	rlwinm r12, r10, 2, 0x16, 0x1d
/* 8029F2AC 0029AF0C  55 63 06 3E */	clrlwi r3, r11, 0x18
/* 8029F2B0 0029AF10  7D 84 62 14 */	add r12, r4, r12
/* 8029F2B4 0029AF14  7C D7 07 34 */	extsh r23, r6
/* 8029F2B8 0029AF18  A8 CC 00 2A */	lha r6, 0x2a(r12)
/* 8029F2BC 0029AF1C  7C B8 07 34 */	extsh r24, r5
/* 8029F2C0 0029AF20  A9 8C 00 28 */	lha r12, 0x28(r12)
/* 8029F2C4 0029AF24  7E A3 18 30 */	slw r3, r21, r3
/* 8029F2C8 0029AF28  7E F7 31 D6 */	mullw r23, r23, r6
/* 8029F2CC 0029AF2C  39 29 00 01 */	addi r9, r9, 1
/* 8029F2D0 0029AF30  54 66 58 28 */	slwi r6, r3, 0xb
/* 8029F2D4 0029AF34  7D 98 61 D6 */	mullw r12, r24, r12
/* 8029F2D8 0029AF38  7E F4 FE 70 */	srawi r20, r23, 0x1f
/* 8029F2DC 0029AF3C  7D 83 FE 70 */	srawi r3, r12, 0x1f
/* 8029F2E0 0029AF40  7D 97 60 14 */	addc r12, r23, r12
/* 8029F2E4 0029AF44  7F 14 19 14 */	adde r24, r20, r3
/* 8029F2E8 0029AF48  7C C3 FE 70 */	srawi r3, r6, 0x1f
/* 8029F2EC 0029AF4C  7D 8C 30 14 */	addc r12, r12, r6
/* 8029F2F0 0029AF50  7C 78 19 14 */	adde r3, r24, r3
/* 8029F2F4 0029AF54  55 86 28 34 */	slwi r6, r12, 5
/* 8029F2F8 0029AF58  54 63 28 34 */	slwi r3, r3, 5
/* 8029F2FC 0029AF5C  51 83 2E FE */	rlwimi r3, r12, 5, 0x1b, 0x1f
/* 8029F300 0029AF60  7E A6 C8 14 */	addc r21, r6, r25
/* 8029F304 0029AF64  7E 83 D1 14 */	adde r20, r3, r26
/* 8029F308 0029AF68  6E 86 80 00 */	xoris r6, r20, 0x8000
/* 8029F30C 0029AF6C  7C 75 D8 10 */	subfc r3, r21, r27
/* 8029F310 0029AF70  7C C6 E1 10 */	subfe r6, r6, r28
/* 8029F314 0029AF74  7C DC E1 10 */	subfe r6, r28, r28
/* 8029F318 0029AF78  7C C6 00 D1 */	neg. r6, r6
/* 8029F31C 0029AF7C  41 82 00 0C */	beq lbl_8029F328
/* 8029F320 0029AF80  3A BD FF FF */	addi r21, r29, -1
/* 8029F324 0029AF84  3A 80 00 00 */	li r20, 0
lbl_8029F328:
/* 8029F328 0029AF88  6E 83 80 00 */	xoris r3, r20, 0x8000
/* 8029F32C 0029AF8C  6F EC 80 00 */	xoris r12, r31, 0x8000
/* 8029F330 0029AF90  7C DD A8 10 */	subfc r6, r29, r21
/* 8029F334 0029AF94  7D 8C 19 10 */	subfe r12, r12, r3
/* 8029F338 0029AF98  7D 83 19 10 */	subfe r12, r3, r3
/* 8029F33C 0029AF9C  7D 8C 00 D1 */	neg. r12, r12
/* 8029F340 0029AFA0  41 82 00 0C */	beq lbl_8029F34C
/* 8029F344 0029AFA4  3E A0 80 00 */	lis r21, 0x8000
/* 8029F348 0029AFA8  3A 80 FF FF */	li r20, -1
lbl_8029F34C:
/* 8029F34C 0029AFAC  56 AC 80 3E */	rotlwi r12, r21, 0x10
/* 8029F350 0029AFB0  7C A6 2B 78 */	mr r6, r5
/* 8029F354 0029AFB4  52 8C 80 1E */	rlwimi r12, r20, 0x10, 0, 0xf
/* 8029F358 0029AFB8  7E 83 86 70 */	srawi r3, r20, 0x10
/* 8029F35C 0029AFBC  B1 9E 00 00 */	sth r12, 0(r30)
/* 8029F360 0029AFC0  7D 85 63 78 */	mr r5, r12
/* 8029F364 0029AFC4  7F DE 02 14 */	add r30, r30, r0
/* 8029F368 0029AFC8  38 E7 00 01 */	addi r7, r7, 1
lbl_8029F36C:
/* 8029F36C 0029AFCC  80 64 00 04 */	lwz r3, 4(r4)
/* 8029F370 0029AFD0  7C 07 18 40 */	cmplw r7, r3
/* 8029F374 0029AFD4  41 80 FE F0 */	blt lbl_8029F264
lbl_8029F378:
/* 8029F378 0029AFD8  39 61 00 40 */	addi r11, r1, 0x40
/* 8029F37C 0029AFDC  4B F2 7D DD */	bl _restgpr_20
/* 8029F380 0029AFE0  80 01 00 44 */	lwz r0, 0x44(r1)
/* 8029F384 0029AFE4  7C 08 03 A6 */	mtlr r0
/* 8029F388 0029AFE8  38 21 00 40 */	addi r1, r1, 0x40
/* 8029F38C 0029AFEC  4E 80 00 20 */	blr