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

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

.global CXGetUncompressedSize
CXGetUncompressedSize:
/* 802A270C 0029E36C  80 A3 00 00 */	lwz r5, 0(r3)
/* 802A2710 0029E370  54 A4 42 1E */	rlwinm r4, r5, 8, 8, 0xf
/* 802A2714 0029E374  54 A0 C4 2E */	rlwinm r0, r5, 0x18, 0x10, 0x17
/* 802A2718 0029E378  50 A4 C0 0E */	rlwimi r4, r5, 0x18, 0, 7
/* 802A271C 0029E37C  50 A0 46 3E */	rlwimi r0, r5, 8, 0x18, 0x1f
/* 802A2720 0029E380  7C 80 03 78 */	or r0, r4, r0
/* 802A2724 0029E384  54 00 C2 3F */	rlwinm. r0, r0, 0x18, 8, 0x1f
/* 802A2728 0029E388  40 82 00 1C */	bne lbl_802A2744
/* 802A272C 0029E38C  80 83 00 04 */	lwz r4, 4(r3)
/* 802A2730 0029E390  54 83 42 1E */	rlwinm r3, r4, 8, 8, 0xf
/* 802A2734 0029E394  54 80 C4 2E */	rlwinm r0, r4, 0x18, 0x10, 0x17
/* 802A2738 0029E398  50 83 C0 0E */	rlwimi r3, r4, 0x18, 0, 7
/* 802A273C 0029E39C  50 80 46 3E */	rlwimi r0, r4, 8, 0x18, 0x1f
/* 802A2740 0029E3A0  7C 60 03 78 */	or r0, r3, r0
lbl_802A2744:
/* 802A2744 0029E3A4  7C 03 03 78 */	mr r3, r0
/* 802A2748 0029E3A8  4E 80 00 20 */	blr

.global CXUncompressLZ
CXUncompressLZ:
/* 802A274C 0029E3AC  80 A3 00 00 */	lwz r5, 0(r3)
/* 802A2750 0029E3B0  38 E3 00 04 */	addi r7, r3, 4
/* 802A2754 0029E3B4  54 A3 42 1E */	rlwinm r3, r5, 8, 8, 0xf
/* 802A2758 0029E3B8  54 A0 C4 2E */	rlwinm r0, r5, 0x18, 0x10, 0x17
/* 802A275C 0029E3BC  50 A3 C0 0E */	rlwimi r3, r5, 0x18, 0, 7
/* 802A2760 0029E3C0  50 A0 46 3E */	rlwimi r0, r5, 8, 0x18, 0x1f
/* 802A2764 0029E3C4  7C 60 03 78 */	or r0, r3, r0
/* 802A2768 0029E3C8  54 08 C2 3F */	rlwinm. r8, r0, 0x18, 8, 0x1f
/* 802A276C 0029E3CC  40 82 00 20 */	bne lbl_802A278C
/* 802A2770 0029E3D0  80 A7 00 00 */	lwz r5, 0(r7)
/* 802A2774 0029E3D4  38 E7 00 04 */	addi r7, r7, 4
/* 802A2778 0029E3D8  54 A3 42 1E */	rlwinm r3, r5, 8, 8, 0xf
/* 802A277C 0029E3DC  54 A0 C4 2E */	rlwinm r0, r5, 0x18, 0x10, 0x17
/* 802A2780 0029E3E0  50 A3 C0 0E */	rlwimi r3, r5, 0x18, 0, 7
/* 802A2784 0029E3E4  50 A0 46 3E */	rlwimi r0, r5, 8, 0x18, 0x1f
/* 802A2788 0029E3E8  7C 68 03 78 */	or r8, r3, r0
lbl_802A278C:
/* 802A278C 0029E3EC  38 00 00 04 */	li r0, 4
/* 802A2790 0029E3F0  48 00 00 E4 */	b lbl_802A2874
lbl_802A2794:
/* 802A2794 0029E3F4  89 47 00 00 */	lbz r10, 0(r7)
/* 802A2798 0029E3F8  39 20 00 00 */	li r9, 0
/* 802A279C 0029E3FC  7C 09 03 A6 */	mtctr r0
/* 802A27A0 0029E400  38 E7 00 01 */	addi r7, r7, 1
lbl_802A27A4:
/* 802A27A4 0029E404  55 43 06 31 */	rlwinm. r3, r10, 0, 0x18, 0x18
/* 802A27A8 0029E408  40 82 00 1C */	bne lbl_802A27C4
/* 802A27AC 0029E40C  88 67 00 00 */	lbz r3, 0(r7)
/* 802A27B0 0029E410  39 08 FF FF */	addi r8, r8, -1
/* 802A27B4 0029E414  38 E7 00 01 */	addi r7, r7, 1
/* 802A27B8 0029E418  98 64 00 00 */	stb r3, 0(r4)
/* 802A27BC 0029E41C  38 84 00 01 */	addi r4, r4, 1
/* 802A27C0 0029E420  48 00 00 3C */	b lbl_802A27FC
lbl_802A27C4:
/* 802A27C4 0029E424  88 C7 00 00 */	lbz r6, 0(r7)
/* 802A27C8 0029E428  88 67 00 01 */	lbz r3, 1(r7)
/* 802A27CC 0029E42C  38 E7 00 02 */	addi r7, r7, 2
/* 802A27D0 0029E430  7C C5 26 70 */	srawi r5, r6, 4
/* 802A27D4 0029E434  50 C3 45 2E */	rlwimi r3, r6, 8, 0x14, 0x17
/* 802A27D8 0029E438  38 C5 00 03 */	addi r6, r5, 3
/* 802A27DC 0029E43C  38 A3 00 01 */	addi r5, r3, 1
/* 802A27E0 0029E440  7D 06 40 50 */	subf r8, r6, r8
lbl_802A27E4:
/* 802A27E4 0029E444  7C 65 20 50 */	subf r3, r5, r4
/* 802A27E8 0029E448  34 C6 FF FF */	addic. r6, r6, -1
/* 802A27EC 0029E44C  88 63 00 00 */	lbz r3, 0(r3)
/* 802A27F0 0029E450  98 64 00 00 */	stb r3, 0(r4)
/* 802A27F4 0029E454  38 84 00 01 */	addi r4, r4, 1
/* 802A27F8 0029E458  41 81 FF EC */	bgt lbl_802A27E4
lbl_802A27FC:
/* 802A27FC 0029E45C  2C 08 00 00 */	cmpwi r8, 0
/* 802A2800 0029E460  41 82 00 74 */	beq lbl_802A2874
/* 802A2804 0029E464  55 4A 08 3C */	slwi r10, r10, 1
/* 802A2808 0029E468  55 43 06 31 */	rlwinm. r3, r10, 0, 0x18, 0x18
/* 802A280C 0029E46C  40 82 00 1C */	bne lbl_802A2828
/* 802A2810 0029E470  88 67 00 00 */	lbz r3, 0(r7)
/* 802A2814 0029E474  39 08 FF FF */	addi r8, r8, -1
/* 802A2818 0029E478  38 E7 00 01 */	addi r7, r7, 1
/* 802A281C 0029E47C  98 64 00 00 */	stb r3, 0(r4)
/* 802A2820 0029E480  38 84 00 01 */	addi r4, r4, 1
/* 802A2824 0029E484  48 00 00 3C */	b lbl_802A2860
lbl_802A2828:
/* 802A2828 0029E488  88 C7 00 00 */	lbz r6, 0(r7)
/* 802A282C 0029E48C  88 67 00 01 */	lbz r3, 1(r7)
/* 802A2830 0029E490  38 E7 00 02 */	addi r7, r7, 2
/* 802A2834 0029E494  7C C5 26 70 */	srawi r5, r6, 4
/* 802A2838 0029E498  50 C3 45 2E */	rlwimi r3, r6, 8, 0x14, 0x17
/* 802A283C 0029E49C  38 C5 00 03 */	addi r6, r5, 3
/* 802A2840 0029E4A0  38 A3 00 01 */	addi r5, r3, 1
/* 802A2844 0029E4A4  7D 06 40 50 */	subf r8, r6, r8
lbl_802A2848:
/* 802A2848 0029E4A8  7C 65 20 50 */	subf r3, r5, r4
/* 802A284C 0029E4AC  34 C6 FF FF */	addic. r6, r6, -1
/* 802A2850 0029E4B0  88 63 00 00 */	lbz r3, 0(r3)
/* 802A2854 0029E4B4  98 64 00 00 */	stb r3, 0(r4)
/* 802A2858 0029E4B8  38 84 00 01 */	addi r4, r4, 1
/* 802A285C 0029E4BC  41 81 FF EC */	bgt lbl_802A2848
lbl_802A2860:
/* 802A2860 0029E4C0  2C 08 00 00 */	cmpwi r8, 0
/* 802A2864 0029E4C4  41 82 00 10 */	beq lbl_802A2874
/* 802A2868 0029E4C8  55 4A 08 3C */	slwi r10, r10, 1
/* 802A286C 0029E4CC  39 29 00 01 */	addi r9, r9, 1
/* 802A2870 0029E4D0  42 00 FF 34 */	bdnz lbl_802A27A4
lbl_802A2874:
/* 802A2874 0029E4D4  2C 08 00 00 */	cmpwi r8, 0
/* 802A2878 0029E4D8  40 82 FF 1C */	bne lbl_802A2794
/* 802A287C 0029E4DC  4E 80 00 20 */	blr