summaryrefslogtreecommitdiff
path: root/asm/SDK/CX/CXCompression.s
blob: 4eb692e2e49c6679abc1cebfbbe756687f5949d0 (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
.include "macros.inc"

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

.global CXCompressLZ
CXCompressLZ:
/* 802A2244 0029DEA4  94 21 FF B0 */	stwu r1, -0x50(r1)
/* 802A2248 0029DEA8  7C 08 02 A6 */	mflr r0
/* 802A224C 0029DEAC  90 01 00 54 */	stw r0, 0x54(r1)
/* 802A2250 0029DEB0  39 61 00 50 */	addi r11, r1, 0x50
/* 802A2254 0029DEB4  4B F2 4E BD */	bl _savegpr_21
/* 802A2258 0029DEB8  3C 00 01 00 */	lis r0, 0x100
/* 802A225C 0029DEBC  7C 77 1B 78 */	mr r23, r3
/* 802A2260 0029DEC0  7C 04 00 40 */	cmplw r4, r0
/* 802A2264 0029DEC4  7C 98 23 78 */	mr r24, r4
/* 802A2268 0029DEC8  40 80 00 30 */	bge lbl_802A2298
/* 802A226C 0029DECC  54 80 40 2E */	slwi r0, r4, 8
/* 802A2270 0029DED0  3B 25 00 04 */	addi r25, r5, 4
/* 802A2274 0029DED4  60 04 00 10 */	ori r4, r0, 0x10
/* 802A2278 0029DED8  3B C0 00 04 */	li r30, 4
/* 802A227C 0029DEDC  54 83 42 1E */	rlwinm r3, r4, 8, 8, 0xf
/* 802A2280 0029DEE0  54 80 C4 2E */	rlwinm r0, r4, 0x18, 0x10, 0x17
/* 802A2284 0029DEE4  50 83 C0 C6 */	rlwimi r3, r4, 0x18, 3, 3
/* 802A2288 0029DEE8  50 80 46 3E */	rlwimi r0, r4, 8, 0x18, 0x1f
/* 802A228C 0029DEEC  7C 60 03 78 */	or r0, r3, r0
/* 802A2290 0029DEF0  90 05 00 00 */	stw r0, 0(r5)
/* 802A2294 0029DEF4  48 00 00 2C */	b lbl_802A22C0
lbl_802A2298:
/* 802A2298 0029DEF8  54 83 42 1E */	rlwinm r3, r4, 8, 8, 0xf
/* 802A229C 0029DEFC  54 80 C4 2E */	rlwinm r0, r4, 0x18, 0x10, 0x17
/* 802A22A0 0029DF00  3C E0 10 00 */	lis r7, 0x1000
/* 802A22A4 0029DF04  3B 25 00 08 */	addi r25, r5, 8
/* 802A22A8 0029DF08  50 83 C0 0E */	rlwimi r3, r4, 0x18, 0, 7
/* 802A22AC 0029DF0C  50 80 46 3E */	rlwimi r0, r4, 8, 0x18, 0x1f
/* 802A22B0 0029DF10  7C 60 03 78 */	or r0, r3, r0
/* 802A22B4 0029DF14  90 E5 00 00 */	stw r7, 0(r5)
/* 802A22B8 0029DF18  3B C0 00 08 */	li r30, 8
/* 802A22BC 0029DF1C  90 05 00 04 */	stw r0, 4(r5)
lbl_802A22C0:
/* 802A22C0 0029DF20  38 E6 20 00 */	addi r7, r6, 0x2000
/* 802A22C4 0029DF24  38 A6 22 00 */	addi r5, r6, 0x2200
/* 802A22C8 0029DF28  38 80 00 20 */	li r4, 0x20
/* 802A22CC 0029DF2C  7F 1A C3 78 */	mr r26, r24
/* 802A22D0 0029DF30  90 C1 00 14 */	stw r6, 0x14(r1)
/* 802A22D4 0029DF34  38 60 00 00 */	li r3, 0
/* 802A22D8 0029DF38  38 00 FF FF */	li r0, -1
/* 802A22DC 0029DF3C  90 E1 00 18 */	stw r7, 0x18(r1)
/* 802A22E0 0029DF40  90 A1 00 1C */	stw r5, 0x1c(r1)
/* 802A22E4 0029DF44  7C 89 03 A6 */	mtctr r4
lbl_802A22E8:
/* 802A22E8 0029DF48  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A22EC 0029DF4C  54 64 0B FC */	rlwinm r4, r3, 1, 0xf, 0x1e
/* 802A22F0 0029DF50  38 63 00 08 */	addi r3, r3, 8
/* 802A22F4 0029DF54  7C 05 23 2E */	sthx r0, r5, r4
/* 802A22F8 0029DF58  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A22FC 0029DF5C  7C 05 23 2E */	sthx r0, r5, r4
/* 802A2300 0029DF60  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A2304 0029DF64  7C A5 22 14 */	add r5, r5, r4
/* 802A2308 0029DF68  B0 05 00 02 */	sth r0, 2(r5)
/* 802A230C 0029DF6C  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A2310 0029DF70  7C A5 22 14 */	add r5, r5, r4
/* 802A2314 0029DF74  B0 05 00 02 */	sth r0, 2(r5)
/* 802A2318 0029DF78  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A231C 0029DF7C  7C A5 22 14 */	add r5, r5, r4
/* 802A2320 0029DF80  B0 05 00 04 */	sth r0, 4(r5)
/* 802A2324 0029DF84  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A2328 0029DF88  7C A5 22 14 */	add r5, r5, r4
/* 802A232C 0029DF8C  B0 05 00 04 */	sth r0, 4(r5)
/* 802A2330 0029DF90  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A2334 0029DF94  7C A5 22 14 */	add r5, r5, r4
/* 802A2338 0029DF98  B0 05 00 06 */	sth r0, 6(r5)
/* 802A233C 0029DF9C  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A2340 0029DFA0  7C A5 22 14 */	add r5, r5, r4
/* 802A2344 0029DFA4  B0 05 00 06 */	sth r0, 6(r5)
/* 802A2348 0029DFA8  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A234C 0029DFAC  7C A5 22 14 */	add r5, r5, r4
/* 802A2350 0029DFB0  B0 05 00 08 */	sth r0, 8(r5)
/* 802A2354 0029DFB4  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A2358 0029DFB8  7C A5 22 14 */	add r5, r5, r4
/* 802A235C 0029DFBC  B0 05 00 08 */	sth r0, 8(r5)
/* 802A2360 0029DFC0  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A2364 0029DFC4  7C A5 22 14 */	add r5, r5, r4
/* 802A2368 0029DFC8  B0 05 00 0A */	sth r0, 0xa(r5)
/* 802A236C 0029DFCC  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A2370 0029DFD0  7C A5 22 14 */	add r5, r5, r4
/* 802A2374 0029DFD4  B0 05 00 0A */	sth r0, 0xa(r5)
/* 802A2378 0029DFD8  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A237C 0029DFDC  7C A5 22 14 */	add r5, r5, r4
/* 802A2380 0029DFE0  B0 05 00 0C */	sth r0, 0xc(r5)
/* 802A2384 0029DFE4  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A2388 0029DFE8  7C A5 22 14 */	add r5, r5, r4
/* 802A238C 0029DFEC  B0 05 00 0C */	sth r0, 0xc(r5)
/* 802A2390 0029DFF0  80 A1 00 18 */	lwz r5, 0x18(r1)
/* 802A2394 0029DFF4  7C A5 22 14 */	add r5, r5, r4
/* 802A2398 0029DFF8  B0 05 00 0E */	sth r0, 0xe(r5)
/* 802A239C 0029DFFC  80 A1 00 1C */	lwz r5, 0x1c(r1)
/* 802A23A0 0029E000  7C 85 22 14 */	add r4, r5, r4
/* 802A23A4 0029E004  B0 04 00 0E */	sth r0, 0xe(r4)
/* 802A23A8 0029E008  42 00 FF 40 */	bdnz lbl_802A22E8
/* 802A23AC 0029E00C  38 00 00 00 */	li r0, 0
/* 802A23B0 0029E010  B0 01 00 10 */	sth r0, 0x10(r1)
/* 802A23B4 0029E014  B0 01 00 12 */	sth r0, 0x12(r1)
/* 802A23B8 0029E018  48 00 01 04 */	b lbl_802A24BC
lbl_802A23BC:
/* 802A23BC 0029E01C  7F 3C CB 78 */	mr r28, r25
/* 802A23C0 0029E020  3B A0 00 00 */	li r29, 0
/* 802A23C4 0029E024  3B 60 00 00 */	li r27, 0
/* 802A23C8 0029E028  3B 39 00 01 */	addi r25, r25, 1
/* 802A23CC 0029E02C  3B DE 00 01 */	addi r30, r30, 1
lbl_802A23D0:
/* 802A23D0 0029E030  2C 18 00 00 */	cmpwi r24, 0
/* 802A23D4 0029E034  57 BD 0E 3C */	rlwinm r29, r29, 1, 0x18, 0x1e
/* 802A23D8 0029E038  41 82 00 D4 */	beq lbl_802A24AC
/* 802A23DC 0029E03C  7E E4 BB 78 */	mr r4, r23
/* 802A23E0 0029E040  7F 05 C3 78 */	mr r5, r24
/* 802A23E4 0029E044  38 61 00 10 */	addi r3, r1, 0x10
/* 802A23E8 0029E048  38 C1 00 08 */	addi r6, r1, 8
/* 802A23EC 0029E04C  48 00 01 1D */	bl SearchLZ
/* 802A23F0 0029E050  54 7F 06 3F */	clrlwi. r31, r3, 0x18
/* 802A23F4 0029E054  41 82 00 80 */	beq lbl_802A2474
/* 802A23F8 0029E058  38 1E 00 02 */	addi r0, r30, 2
/* 802A23FC 0029E05C  63 BD 00 01 */	ori r29, r29, 1
/* 802A2400 0029E060  7C 00 D0 40 */	cmplw r0, r26
/* 802A2404 0029E064  41 80 00 0C */	blt lbl_802A2410
/* 802A2408 0029E068  38 60 00 00 */	li r3, 0
/* 802A240C 0029E06C  48 00 00 E4 */	b lbl_802A24F0
lbl_802A2410:
/* 802A2410 0029E070  A0 61 00 08 */	lhz r3, 8(r1)
/* 802A2414 0029E074  38 1F FF FD */	addi r0, r31, -3
/* 802A2418 0029E078  54 04 20 36 */	slwi r4, r0, 4
/* 802A241C 0029E07C  7E F6 BB 78 */	mr r22, r23
/* 802A2420 0029E080  38 03 FF FF */	addi r0, r3, -1
/* 802A2424 0029E084  3A A0 00 00 */	li r21, 0
/* 802A2428 0029E088  7C 00 46 70 */	srawi r0, r0, 8
/* 802A242C 0029E08C  3B DE 00 02 */	addi r30, r30, 2
/* 802A2430 0029E090  7C 80 03 78 */	or r0, r4, r0
/* 802A2434 0029E094  98 19 00 00 */	stb r0, 0(r25)
/* 802A2438 0029E098  A0 61 00 08 */	lhz r3, 8(r1)
/* 802A243C 0029E09C  38 03 FF FF */	addi r0, r3, -1
/* 802A2440 0029E0A0  98 19 00 01 */	stb r0, 1(r25)
/* 802A2444 0029E0A4  3B 39 00 02 */	addi r25, r25, 2
/* 802A2448 0029E0A8  48 00 00 18 */	b lbl_802A2460
lbl_802A244C:
/* 802A244C 0029E0AC  7E C4 B3 78 */	mr r4, r22
/* 802A2450 0029E0B0  38 61 00 10 */	addi r3, r1, 0x10
/* 802A2454 0029E0B4  3A D6 00 01 */	addi r22, r22, 1
/* 802A2458 0029E0B8  48 00 01 F9 */	bl SlideByte
/* 802A245C 0029E0BC  3A B5 00 01 */	addi r21, r21, 1
lbl_802A2460:
/* 802A2460 0029E0C0  7C 15 F8 40 */	cmplw r21, r31
/* 802A2464 0029E0C4  41 80 FF E8 */	blt lbl_802A244C
/* 802A2468 0029E0C8  7E F7 FA 14 */	add r23, r23, r31
/* 802A246C 0029E0CC  7F 1F C0 50 */	subf r24, r31, r24
/* 802A2470 0029E0D0  48 00 00 3C */	b lbl_802A24AC
lbl_802A2474:
/* 802A2474 0029E0D4  38 1E 00 01 */	addi r0, r30, 1
/* 802A2478 0029E0D8  7C 00 D0 40 */	cmplw r0, r26
/* 802A247C 0029E0DC  41 80 00 0C */	blt lbl_802A2488
/* 802A2480 0029E0E0  38 60 00 00 */	li r3, 0
/* 802A2484 0029E0E4  48 00 00 6C */	b lbl_802A24F0
lbl_802A2488:
/* 802A2488 0029E0E8  7E E4 BB 78 */	mr r4, r23
/* 802A248C 0029E0EC  38 61 00 10 */	addi r3, r1, 0x10
/* 802A2490 0029E0F0  48 00 01 C1 */	bl SlideByte
/* 802A2494 0029E0F4  88 17 00 00 */	lbz r0, 0(r23)
/* 802A2498 0029E0F8  3B 18 FF FF */	addi r24, r24, -1
/* 802A249C 0029E0FC  3B DE 00 01 */	addi r30, r30, 1
/* 802A24A0 0029E100  3A F7 00 01 */	addi r23, r23, 1
/* 802A24A4 0029E104  98 19 00 00 */	stb r0, 0(r25)
/* 802A24A8 0029E108  3B 39 00 01 */	addi r25, r25, 1
lbl_802A24AC:
/* 802A24AC 0029E10C  3B 7B 00 01 */	addi r27, r27, 1
/* 802A24B0 0029E110  28 1B 00 08 */	cmplwi r27, 8
/* 802A24B4 0029E114  41 80 FF 1C */	blt lbl_802A23D0
/* 802A24B8 0029E118  9B BC 00 00 */	stb r29, 0(r28)
lbl_802A24BC:
/* 802A24BC 0029E11C  2C 18 00 00 */	cmpwi r24, 0
/* 802A24C0 0029E120  40 82 FE FC */	bne lbl_802A23BC
/* 802A24C4 0029E124  38 80 00 00 */	li r4, 0
/* 802A24C8 0029E128  38 60 00 00 */	li r3, 0
/* 802A24CC 0029E12C  48 00 00 10 */	b lbl_802A24DC
lbl_802A24D0:
/* 802A24D0 0029E130  98 79 00 00 */	stb r3, 0(r25)
/* 802A24D4 0029E134  3B 39 00 01 */	addi r25, r25, 1
/* 802A24D8 0029E138  38 84 00 01 */	addi r4, r4, 1
lbl_802A24DC:
/* 802A24DC 0029E13C  54 80 06 3E */	clrlwi r0, r4, 0x18
/* 802A24E0 0029E140  7C 1E 02 14 */	add r0, r30, r0
/* 802A24E4 0029E144  54 00 07 BF */	clrlwi. r0, r0, 0x1e
/* 802A24E8 0029E148  40 82 FF E8 */	bne lbl_802A24D0
/* 802A24EC 0029E14C  7F C3 F3 78 */	mr r3, r30
lbl_802A24F0:
/* 802A24F0 0029E150  39 61 00 50 */	addi r11, r1, 0x50
/* 802A24F4 0029E154  4B F2 4C 69 */	bl _restgpr_21
/* 802A24F8 0029E158  80 01 00 54 */	lwz r0, 0x54(r1)
/* 802A24FC 0029E15C  7C 08 03 A6 */	mtlr r0
/* 802A2500 0029E160  38 21 00 50 */	addi r1, r1, 0x50
/* 802A2504 0029E164  4E 80 00 20 */	blr

SearchLZ:
/* 802A2508 0029E168  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802A250C 0029E16C  7C 08 02 A6 */	mflr r0
/* 802A2510 0029E170  90 01 00 24 */	stw r0, 0x24(r1)
/* 802A2514 0029E174  39 61 00 20 */	addi r11, r1, 0x20
/* 802A2518 0029E178  4B F2 4C 11 */	bl _savegpr_27
/* 802A251C 0029E17C  28 05 00 03 */	cmplwi r5, 3
/* 802A2520 0029E180  80 E3 00 04 */	lwz r7, 4(r3)
/* 802A2524 0029E184  A1 63 00 00 */	lhz r11, 0(r3)
/* 802A2528 0029E188  38 00 00 02 */	li r0, 2
/* 802A252C 0029E18C  A1 03 00 02 */	lhz r8, 2(r3)
/* 802A2530 0029E190  40 80 00 0C */	bge lbl_802A253C
/* 802A2534 0029E194  38 60 00 00 */	li r3, 0
/* 802A2538 0029E198  48 00 01 00 */	b lbl_802A2638
lbl_802A253C:
/* 802A253C 0029E19C  89 24 00 00 */	lbz r9, 0(r4)
/* 802A2540 0029E1A0  7D 08 20 50 */	subf r8, r8, r4
/* 802A2544 0029E1A4  81 43 00 08 */	lwz r10, 8(r3)
/* 802A2548 0029E1A8  7D 8B 20 50 */	subf r12, r11, r4
/* 802A254C 0029E1AC  55 23 08 3C */	slwi r3, r9, 1
/* 802A2550 0029E1B0  7D 2B 40 50 */	subf r9, r11, r8
/* 802A2554 0029E1B4  7F 6A 1A AE */	lhax r27, r10, r3
/* 802A2558 0029E1B8  48 00 00 BC */	b lbl_802A2614
lbl_802A255C:
/* 802A255C 0029E1BC  7C 1B 58 00 */	cmpw r27, r11
/* 802A2560 0029E1C0  40 80 00 0C */	bge lbl_802A256C
/* 802A2564 0029E1C4  7F EC DA 14 */	add r31, r12, r27
/* 802A2568 0029E1C8  48 00 00 08 */	b lbl_802A2570
lbl_802A256C:
/* 802A256C 0029E1CC  7F E9 DA 14 */	add r31, r9, r27
lbl_802A2570:
/* 802A2570 0029E1D0  89 1F 00 01 */	lbz r8, 1(r31)
/* 802A2574 0029E1D4  88 64 00 01 */	lbz r3, 1(r4)
/* 802A2578 0029E1D8  7C 08 18 40 */	cmplw r8, r3
/* 802A257C 0029E1DC  40 82 00 14 */	bne lbl_802A2590
/* 802A2580 0029E1E0  89 1F 00 02 */	lbz r8, 2(r31)
/* 802A2584 0029E1E4  88 64 00 02 */	lbz r3, 2(r4)
/* 802A2588 0029E1E8  7C 08 18 40 */	cmplw r8, r3
/* 802A258C 0029E1EC  41 82 00 10 */	beq lbl_802A259C
lbl_802A2590:
/* 802A2590 0029E1F0  57 63 08 3C */	slwi r3, r27, 1
/* 802A2594 0029E1F4  7F 67 1A AE */	lhax r27, r7, r3
/* 802A2598 0029E1F8  48 00 00 7C */	b lbl_802A2614
lbl_802A259C:
/* 802A259C 0029E1FC  7D 5F 20 50 */	subf r10, r31, r4
/* 802A25A0 0029E200  2C 0A 00 02 */	cmpwi r10, 2
/* 802A25A4 0029E204  41 80 00 78 */	blt lbl_802A261C
/* 802A25A8 0029E208  3B DF 00 03 */	addi r30, r31, 3
/* 802A25AC 0029E20C  3B E4 00 03 */	addi r31, r4, 3
/* 802A25B0 0029E210  3B 80 00 03 */	li r28, 3
/* 802A25B4 0029E214  48 00 00 1C */	b lbl_802A25D0
lbl_802A25B8:
/* 802A25B8 0029E218  3B 9C 00 01 */	addi r28, r28, 1
/* 802A25BC 0029E21C  3B FF 00 01 */	addi r31, r31, 1
/* 802A25C0 0029E220  57 83 06 3E */	clrlwi r3, r28, 0x18
/* 802A25C4 0029E224  3B DE 00 01 */	addi r30, r30, 1
/* 802A25C8 0029E228  28 03 00 12 */	cmplwi r3, 0x12
/* 802A25CC 0029E22C  41 82 00 20 */	beq lbl_802A25EC
lbl_802A25D0:
/* 802A25D0 0029E230  7C 64 F8 50 */	subf r3, r4, r31
/* 802A25D4 0029E234  7C 03 28 40 */	cmplw r3, r5
/* 802A25D8 0029E238  40 80 00 14 */	bge lbl_802A25EC
/* 802A25DC 0029E23C  89 1F 00 00 */	lbz r8, 0(r31)
/* 802A25E0 0029E240  88 7E 00 00 */	lbz r3, 0(r30)
/* 802A25E4 0029E244  7C 08 18 40 */	cmplw r8, r3
/* 802A25E8 0029E248  41 82 FF D0 */	beq lbl_802A25B8
lbl_802A25EC:
/* 802A25EC 0029E24C  57 88 06 3E */	clrlwi r8, r28, 0x18
/* 802A25F0 0029E250  54 03 06 3E */	clrlwi r3, r0, 0x18
/* 802A25F4 0029E254  7C 08 18 40 */	cmplw r8, r3
/* 802A25F8 0029E258  40 81 00 14 */	ble lbl_802A260C
/* 802A25FC 0029E25C  28 08 00 12 */	cmplwi r8, 0x12
/* 802A2600 0029E260  7F 80 E3 78 */	mr r0, r28
/* 802A2604 0029E264  55 5D 04 3E */	clrlwi r29, r10, 0x10
/* 802A2608 0029E268  41 82 00 14 */	beq lbl_802A261C
lbl_802A260C:
/* 802A260C 0029E26C  57 63 08 3C */	slwi r3, r27, 1
/* 802A2610 0029E270  7F 67 1A AE */	lhax r27, r7, r3
lbl_802A2614:
/* 802A2614 0029E274  2C 1B FF FF */	cmpwi r27, -1
/* 802A2618 0029E278  40 82 FF 44 */	bne lbl_802A255C
lbl_802A261C:
/* 802A261C 0029E27C  54 03 06 3E */	clrlwi r3, r0, 0x18
/* 802A2620 0029E280  28 03 00 03 */	cmplwi r3, 3
/* 802A2624 0029E284  40 80 00 0C */	bge lbl_802A2630
/* 802A2628 0029E288  38 60 00 00 */	li r3, 0
/* 802A262C 0029E28C  48 00 00 0C */	b lbl_802A2638
lbl_802A2630:
/* 802A2630 0029E290  B3 A6 00 00 */	sth r29, 0(r6)
/* 802A2634 0029E294  7C 03 03 78 */	mr r3, r0
lbl_802A2638:
/* 802A2638 0029E298  39 61 00 20 */	addi r11, r1, 0x20
/* 802A263C 0029E29C  4B F2 4B 39 */	bl _restgpr_27
/* 802A2640 0029E2A0  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802A2644 0029E2A4  7C 08 03 A6 */	mtlr r0
/* 802A2648 0029E2A8  38 21 00 20 */	addi r1, r1, 0x20
/* 802A264C 0029E2AC  4E 80 00 20 */	blr

SlideByte:
/* 802A2650 0029E2B0  A0 A3 00 02 */	lhz r5, 2(r3)
/* 802A2654 0029E2B4  88 E4 00 00 */	lbz r7, 0(r4)
/* 802A2658 0029E2B8  28 05 10 00 */	cmplwi r5, 0x1000
/* 802A265C 0029E2BC  81 23 00 08 */	lwz r9, 8(r3)
/* 802A2660 0029E2C0  81 43 00 04 */	lwz r10, 4(r3)
/* 802A2664 0029E2C4  81 63 00 0C */	lwz r11, 0xc(r3)
/* 802A2668 0029E2C8  A0 C3 00 00 */	lhz r6, 0(r3)
/* 802A266C 0029E2CC  40 82 00 34 */	bne lbl_802A26A0
/* 802A2670 0029E2D0  88 04 F0 00 */	lbz r0, -0x1000(r4)
/* 802A2674 0029E2D4  54 04 08 3C */	slwi r4, r0, 1
/* 802A2678 0029E2D8  7C 09 22 AE */	lhax r0, r9, r4
/* 802A267C 0029E2DC  54 00 08 3C */	slwi r0, r0, 1
/* 802A2680 0029E2E0  7C 0A 02 AE */	lhax r0, r10, r0
/* 802A2684 0029E2E4  2C 00 FF FF */	cmpwi r0, -1
/* 802A2688 0029E2E8  7C 09 23 2E */	sthx r0, r9, r4
/* 802A268C 0029E2EC  40 82 00 0C */	bne lbl_802A2698
/* 802A2690 0029E2F0  38 00 FF FF */	li r0, -1
/* 802A2694 0029E2F4  7C 0B 23 2E */	sthx r0, r11, r4
lbl_802A2698:
/* 802A2698 0029E2F8  7C C8 33 78 */	mr r8, r6
/* 802A269C 0029E2FC  48 00 00 08 */	b lbl_802A26A4
lbl_802A26A0:
/* 802A26A0 0029E300  7C A8 2B 78 */	mr r8, r5
lbl_802A26A4:
/* 802A26A4 0029E304  54 E4 0D FC */	rlwinm r4, r7, 1, 0x17, 0x1e
/* 802A26A8 0029E308  7C 0B 22 AE */	lhax r0, r11, r4
/* 802A26AC 0029E30C  2C 00 FF FF */	cmpwi r0, -1
/* 802A26B0 0029E310  40 82 00 0C */	bne lbl_802A26BC
/* 802A26B4 0029E314  7D 09 23 2E */	sthx r8, r9, r4
/* 802A26B8 0029E318  48 00 00 0C */	b lbl_802A26C4
lbl_802A26BC:
/* 802A26BC 0029E31C  54 00 08 3C */	slwi r0, r0, 1
/* 802A26C0 0029E320  7D 0A 03 2E */	sthx r8, r10, r0
lbl_802A26C4:
/* 802A26C4 0029E324  7D 0B 23 2E */	sthx r8, r11, r4
/* 802A26C8 0029E328  28 05 10 00 */	cmplwi r5, 0x1000
/* 802A26CC 0029E32C  55 00 0B FC */	rlwinm r0, r8, 1, 0xf, 0x1e
/* 802A26D0 0029E330  38 80 FF FF */	li r4, -1
/* 802A26D4 0029E334  7C 8A 03 2E */	sthx r4, r10, r0
/* 802A26D8 0029E338  40 82 00 24 */	bne lbl_802A26FC
/* 802A26DC 0029E33C  38 86 00 01 */	addi r4, r6, 1
/* 802A26E0 0029E340  54 80 A0 16 */	slwi r0, r4, 0x14
/* 802A26E4 0029E344  54 84 0F FE */	srwi r4, r4, 0x1f
/* 802A26E8 0029E348  7C 04 00 50 */	subf r0, r4, r0
/* 802A26EC 0029E34C  54 00 60 3E */	rotlwi r0, r0, 0xc
/* 802A26F0 0029E350  7C 00 22 14 */	add r0, r0, r4
/* 802A26F4 0029E354  B0 03 00 00 */	sth r0, 0(r3)
/* 802A26F8 0029E358  4E 80 00 20 */	blr
lbl_802A26FC:
/* 802A26FC 0029E35C  A0 83 00 02 */	lhz r4, 2(r3)
/* 802A2700 0029E360  38 04 00 01 */	addi r0, r4, 1
/* 802A2704 0029E364  B0 03 00 02 */	sth r0, 2(r3)
/* 802A2708 0029E368  4E 80 00 20 */	blr