summaryrefslogtreecommitdiff
path: root/asm/SDK/NTR/crc.s
blob: fcb5dd8977b181614aa723d93b2e5151a5a5c614 (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
.include "macros.inc"

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

.global MATHi_CRC8InitTable
MATHi_CRC8InitTable:
/* 802EE638 002EA298  38 00 01 00 */	li r0, 0x100
/* 802EE63C 002EA29C  38 C0 00 00 */	li r6, 0
/* 802EE640 002EA2A0  7C 09 03 A6 */	mtctr r0
lbl_802EE644:
/* 802EE644 002EA2A4  54 C0 06 31 */	rlwinm. r0, r6, 0, 0x18, 0x18
/* 802EE648 002EA2A8  54 C5 08 3C */	slwi r5, r6, 1
/* 802EE64C 002EA2AC  41 82 00 08 */	beq lbl_802EE654
/* 802EE650 002EA2B0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE654:
/* 802EE654 002EA2B4  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 802EE658 002EA2B8  54 A5 08 3C */	slwi r5, r5, 1
/* 802EE65C 002EA2BC  41 82 00 08 */	beq lbl_802EE664
/* 802EE660 002EA2C0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE664:
/* 802EE664 002EA2C4  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 802EE668 002EA2C8  54 A5 08 3C */	slwi r5, r5, 1
/* 802EE66C 002EA2CC  41 82 00 08 */	beq lbl_802EE674
/* 802EE670 002EA2D0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE674:
/* 802EE674 002EA2D4  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 802EE678 002EA2D8  54 A5 08 3C */	slwi r5, r5, 1
/* 802EE67C 002EA2DC  41 82 00 08 */	beq lbl_802EE684
/* 802EE680 002EA2E0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE684:
/* 802EE684 002EA2E4  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 802EE688 002EA2E8  54 A5 08 3C */	slwi r5, r5, 1
/* 802EE68C 002EA2EC  41 82 00 08 */	beq lbl_802EE694
/* 802EE690 002EA2F0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE694:
/* 802EE694 002EA2F4  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 802EE698 002EA2F8  54 A5 08 3C */	slwi r5, r5, 1
/* 802EE69C 002EA2FC  41 82 00 08 */	beq lbl_802EE6A4
/* 802EE6A0 002EA300  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE6A4:
/* 802EE6A4 002EA304  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 802EE6A8 002EA308  54 A5 08 3C */	slwi r5, r5, 1
/* 802EE6AC 002EA30C  41 82 00 08 */	beq lbl_802EE6B4
/* 802EE6B0 002EA310  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE6B4:
/* 802EE6B4 002EA314  54 A0 06 31 */	rlwinm. r0, r5, 0, 0x18, 0x18
/* 802EE6B8 002EA318  54 A5 08 3C */	slwi r5, r5, 1
/* 802EE6BC 002EA31C  41 82 00 08 */	beq lbl_802EE6C4
/* 802EE6C0 002EA320  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE6C4:
/* 802EE6C4 002EA324  98 A3 00 00 */	stb r5, 0(r3)
/* 802EE6C8 002EA328  38 C6 00 01 */	addi r6, r6, 1
/* 802EE6CC 002EA32C  38 63 00 01 */	addi r3, r3, 1
/* 802EE6D0 002EA330  42 00 FF 74 */	bdnz lbl_802EE644
/* 802EE6D4 002EA334  4E 80 00 20 */	blr

.global MATHi_CRC32InitTableRev
MATHi_CRC32InitTableRev:
/* 802EE6D8 002EA338  38 00 01 00 */	li r0, 0x100
/* 802EE6DC 002EA33C  38 C0 00 00 */	li r6, 0
/* 802EE6E0 002EA340  7C 09 03 A6 */	mtctr r0
lbl_802EE6E4:
/* 802EE6E4 002EA344  54 C0 07 FF */	clrlwi. r0, r6, 0x1f
/* 802EE6E8 002EA348  54 C5 F8 7E */	srwi r5, r6, 1
/* 802EE6EC 002EA34C  41 82 00 08 */	beq lbl_802EE6F4
/* 802EE6F0 002EA350  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE6F4:
/* 802EE6F4 002EA354  54 A0 07 FF */	clrlwi. r0, r5, 0x1f
/* 802EE6F8 002EA358  54 A5 F8 7E */	srwi r5, r5, 1
/* 802EE6FC 002EA35C  41 82 00 08 */	beq lbl_802EE704
/* 802EE700 002EA360  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE704:
/* 802EE704 002EA364  54 A0 07 FF */	clrlwi. r0, r5, 0x1f
/* 802EE708 002EA368  54 A5 F8 7E */	srwi r5, r5, 1
/* 802EE70C 002EA36C  41 82 00 08 */	beq lbl_802EE714
/* 802EE710 002EA370  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE714:
/* 802EE714 002EA374  54 A0 07 FF */	clrlwi. r0, r5, 0x1f
/* 802EE718 002EA378  54 A5 F8 7E */	srwi r5, r5, 1
/* 802EE71C 002EA37C  41 82 00 08 */	beq lbl_802EE724
/* 802EE720 002EA380  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE724:
/* 802EE724 002EA384  54 A0 07 FF */	clrlwi. r0, r5, 0x1f
/* 802EE728 002EA388  54 A5 F8 7E */	srwi r5, r5, 1
/* 802EE72C 002EA38C  41 82 00 08 */	beq lbl_802EE734
/* 802EE730 002EA390  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE734:
/* 802EE734 002EA394  54 A0 07 FF */	clrlwi. r0, r5, 0x1f
/* 802EE738 002EA398  54 A5 F8 7E */	srwi r5, r5, 1
/* 802EE73C 002EA39C  41 82 00 08 */	beq lbl_802EE744
/* 802EE740 002EA3A0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE744:
/* 802EE744 002EA3A4  54 A0 07 FF */	clrlwi. r0, r5, 0x1f
/* 802EE748 002EA3A8  54 A5 F8 7E */	srwi r5, r5, 1
/* 802EE74C 002EA3AC  41 82 00 08 */	beq lbl_802EE754
/* 802EE750 002EA3B0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE754:
/* 802EE754 002EA3B4  54 A0 07 FF */	clrlwi. r0, r5, 0x1f
/* 802EE758 002EA3B8  54 A5 F8 7E */	srwi r5, r5, 1
/* 802EE75C 002EA3BC  41 82 00 08 */	beq lbl_802EE764
/* 802EE760 002EA3C0  7C A5 22 78 */	xor r5, r5, r4
lbl_802EE764:
/* 802EE764 002EA3C4  90 A3 00 00 */	stw r5, 0(r3)
/* 802EE768 002EA3C8  38 63 00 04 */	addi r3, r3, 4
/* 802EE76C 002EA3CC  38 C6 00 01 */	addi r6, r6, 1
/* 802EE770 002EA3D0  42 00 FF 74 */	bdnz lbl_802EE6E4
/* 802EE774 002EA3D4  4E 80 00 20 */	blr

.global MATH_CalcCRC8
MATH_CalcCRC8:
/* 802EE778 002EA3D8  2C 05 00 00 */	cmpwi r5, 0
/* 802EE77C 002EA3DC  38 E0 00 00 */	li r7, 0
/* 802EE780 002EA3E0  39 60 00 00 */	li r11, 0
/* 802EE784 002EA3E4  41 82 00 BC */	beq lbl_802EE840
/* 802EE788 002EA3E8  28 05 00 08 */	cmplwi r5, 8
/* 802EE78C 002EA3EC  38 C5 FF F8 */	addi r6, r5, -8
/* 802EE790 002EA3F0  40 81 00 88 */	ble lbl_802EE818
/* 802EE794 002EA3F4  38 06 00 07 */	addi r0, r6, 7
/* 802EE798 002EA3F8  54 00 E8 FE */	srwi r0, r0, 3
/* 802EE79C 002EA3FC  7C 09 03 A6 */	mtctr r0
/* 802EE7A0 002EA400  28 06 00 00 */	cmplwi r6, 0
/* 802EE7A4 002EA404  40 81 00 74 */	ble lbl_802EE818
lbl_802EE7A8:
/* 802EE7A8 002EA408  88 04 00 00 */	lbz r0, 0(r4)
/* 802EE7AC 002EA40C  39 6B 00 08 */	addi r11, r11, 8
/* 802EE7B0 002EA410  88 C4 00 01 */	lbz r6, 1(r4)
/* 802EE7B4 002EA414  7C E7 02 78 */	xor r7, r7, r0
/* 802EE7B8 002EA418  88 04 00 02 */	lbz r0, 2(r4)
/* 802EE7BC 002EA41C  54 E7 06 3E */	clrlwi r7, r7, 0x18
/* 802EE7C0 002EA420  89 24 00 03 */	lbz r9, 3(r4)
/* 802EE7C4 002EA424  7C E3 38 AE */	lbzx r7, r3, r7
/* 802EE7C8 002EA428  89 04 00 04 */	lbz r8, 4(r4)
/* 802EE7CC 002EA42C  7C E6 32 78 */	xor r6, r7, r6
/* 802EE7D0 002EA430  88 E4 00 05 */	lbz r7, 5(r4)
/* 802EE7D4 002EA434  7D 43 30 AE */	lbzx r10, r3, r6
/* 802EE7D8 002EA438  88 C4 00 06 */	lbz r6, 6(r4)
/* 802EE7DC 002EA43C  7D 4A 02 78 */	xor r10, r10, r0
/* 802EE7E0 002EA440  88 04 00 07 */	lbz r0, 7(r4)
/* 802EE7E4 002EA444  7D 43 50 AE */	lbzx r10, r3, r10
/* 802EE7E8 002EA448  38 84 00 08 */	addi r4, r4, 8
/* 802EE7EC 002EA44C  7D 49 4A 78 */	xor r9, r10, r9
/* 802EE7F0 002EA450  7D 23 48 AE */	lbzx r9, r3, r9
/* 802EE7F4 002EA454  7D 28 42 78 */	xor r8, r9, r8
/* 802EE7F8 002EA458  7D 03 40 AE */	lbzx r8, r3, r8
/* 802EE7FC 002EA45C  7D 07 3A 78 */	xor r7, r8, r7
/* 802EE800 002EA460  7C E3 38 AE */	lbzx r7, r3, r7
/* 802EE804 002EA464  7C E6 32 78 */	xor r6, r7, r6
/* 802EE808 002EA468  7C C3 30 AE */	lbzx r6, r3, r6
/* 802EE80C 002EA46C  7C C0 02 78 */	xor r0, r6, r0
/* 802EE810 002EA470  7C E3 00 AE */	lbzx r7, r3, r0
/* 802EE814 002EA474  42 00 FF 94 */	bdnz lbl_802EE7A8
lbl_802EE818:
/* 802EE818 002EA478  7C 0B 28 50 */	subf r0, r11, r5
/* 802EE81C 002EA47C  7C 09 03 A6 */	mtctr r0
/* 802EE820 002EA480  7C 0B 28 40 */	cmplw r11, r5
/* 802EE824 002EA484  40 80 00 1C */	bge lbl_802EE840
lbl_802EE828:
/* 802EE828 002EA488  88 04 00 00 */	lbz r0, 0(r4)
/* 802EE82C 002EA48C  38 84 00 01 */	addi r4, r4, 1
/* 802EE830 002EA490  7C E0 02 78 */	xor r0, r7, r0
/* 802EE834 002EA494  54 00 06 3E */	clrlwi r0, r0, 0x18
/* 802EE838 002EA498  7C E3 00 AE */	lbzx r7, r3, r0
/* 802EE83C 002EA49C  42 00 FF EC */	bdnz lbl_802EE828
lbl_802EE840:
/* 802EE840 002EA4A0  7C E3 3B 78 */	mr r3, r7
/* 802EE844 002EA4A4  4E 80 00 20 */	blr

.global MATH_CalcCRC32
MATH_CalcCRC32:
/* 802EE848 002EA4A8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802EE84C 002EA4AC  2C 05 00 00 */	cmpwi r5, 0
/* 802EE850 002EA4B0  39 20 FF FF */	li r9, -1
/* 802EE854 002EA4B4  38 C0 00 00 */	li r6, 0
/* 802EE858 002EA4B8  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802EE85C 002EA4BC  41 82 01 20 */	beq lbl_802EE97C
/* 802EE860 002EA4C0  28 05 00 08 */	cmplwi r5, 8
/* 802EE864 002EA4C4  38 E5 FF F8 */	addi r7, r5, -8
/* 802EE868 002EA4C8  40 81 00 E4 */	ble lbl_802EE94C
/* 802EE86C 002EA4CC  38 07 00 07 */	addi r0, r7, 7
/* 802EE870 002EA4D0  54 00 E8 FE */	srwi r0, r0, 3
/* 802EE874 002EA4D4  7C 09 03 A6 */	mtctr r0
/* 802EE878 002EA4D8  28 07 00 00 */	cmplwi r7, 0
/* 802EE87C 002EA4DC  40 81 00 D0 */	ble lbl_802EE94C
lbl_802EE880:
/* 802EE880 002EA4E0  88 E4 00 00 */	lbz r7, 0(r4)
/* 802EE884 002EA4E4  55 28 C2 3E */	srwi r8, r9, 8
/* 802EE888 002EA4E8  88 04 00 01 */	lbz r0, 1(r4)
/* 802EE88C 002EA4EC  38 C6 00 08 */	addi r6, r6, 8
/* 802EE890 002EA4F0  7D 27 3A 78 */	xor r7, r9, r7
/* 802EE894 002EA4F4  89 64 00 02 */	lbz r11, 2(r4)
/* 802EE898 002EA4F8  54 E7 15 BA */	rlwinm r7, r7, 2, 0x16, 0x1d
/* 802EE89C 002EA4FC  89 44 00 03 */	lbz r10, 3(r4)
/* 802EE8A0 002EA500  7C E3 38 2E */	lwzx r7, r3, r7
/* 802EE8A4 002EA504  89 24 00 04 */	lbz r9, 4(r4)
/* 802EE8A8 002EA508  7D 1F 3A 78 */	xor r31, r8, r7
/* 802EE8AC 002EA50C  89 04 00 05 */	lbz r8, 5(r4)
/* 802EE8B0 002EA510  7F E0 02 78 */	xor r0, r31, r0
/* 802EE8B4 002EA514  88 E4 00 06 */	lbz r7, 6(r4)
/* 802EE8B8 002EA518  54 0C 15 BA */	rlwinm r12, r0, 2, 0x16, 0x1d
/* 802EE8BC 002EA51C  88 04 00 07 */	lbz r0, 7(r4)
/* 802EE8C0 002EA520  7D 83 60 2E */	lwzx r12, r3, r12
/* 802EE8C4 002EA524  57 FF C2 3E */	srwi r31, r31, 8
/* 802EE8C8 002EA528  38 84 00 08 */	addi r4, r4, 8
/* 802EE8CC 002EA52C  7F EC 62 78 */	xor r12, r31, r12
/* 802EE8D0 002EA530  7D 8B 5A 78 */	xor r11, r12, r11
/* 802EE8D4 002EA534  55 6B 15 BA */	rlwinm r11, r11, 2, 0x16, 0x1d
/* 802EE8D8 002EA538  55 8C C2 3E */	srwi r12, r12, 8
/* 802EE8DC 002EA53C  7D 63 58 2E */	lwzx r11, r3, r11
/* 802EE8E0 002EA540  7D 8B 5A 78 */	xor r11, r12, r11
/* 802EE8E4 002EA544  7D 6A 52 78 */	xor r10, r11, r10
/* 802EE8E8 002EA548  55 4A 15 BA */	rlwinm r10, r10, 2, 0x16, 0x1d
/* 802EE8EC 002EA54C  55 6B C2 3E */	srwi r11, r11, 8
/* 802EE8F0 002EA550  7D 43 50 2E */	lwzx r10, r3, r10
/* 802EE8F4 002EA554  7D 6A 52 78 */	xor r10, r11, r10
/* 802EE8F8 002EA558  7D 49 4A 78 */	xor r9, r10, r9
/* 802EE8FC 002EA55C  55 29 15 BA */	rlwinm r9, r9, 2, 0x16, 0x1d
/* 802EE900 002EA560  55 4A C2 3E */	srwi r10, r10, 8
/* 802EE904 002EA564  7D 23 48 2E */	lwzx r9, r3, r9
/* 802EE908 002EA568  7D 49 4A 78 */	xor r9, r10, r9
/* 802EE90C 002EA56C  7D 28 42 78 */	xor r8, r9, r8
/* 802EE910 002EA570  55 08 15 BA */	rlwinm r8, r8, 2, 0x16, 0x1d
/* 802EE914 002EA574  55 29 C2 3E */	srwi r9, r9, 8
/* 802EE918 002EA578  7D 03 40 2E */	lwzx r8, r3, r8
/* 802EE91C 002EA57C  7D 28 42 78 */	xor r8, r9, r8
/* 802EE920 002EA580  7D 07 3A 78 */	xor r7, r8, r7
/* 802EE924 002EA584  54 E7 15 BA */	rlwinm r7, r7, 2, 0x16, 0x1d
/* 802EE928 002EA588  55 08 C2 3E */	srwi r8, r8, 8
/* 802EE92C 002EA58C  7C E3 38 2E */	lwzx r7, r3, r7
/* 802EE930 002EA590  7D 07 3A 78 */	xor r7, r8, r7
/* 802EE934 002EA594  7C E0 02 78 */	xor r0, r7, r0
/* 802EE938 002EA598  54 00 15 BA */	rlwinm r0, r0, 2, 0x16, 0x1d
/* 802EE93C 002EA59C  54 E7 C2 3E */	srwi r7, r7, 8
/* 802EE940 002EA5A0  7C 03 00 2E */	lwzx r0, r3, r0
/* 802EE944 002EA5A4  7C E9 02 78 */	xor r9, r7, r0
/* 802EE948 002EA5A8  42 00 FF 38 */	bdnz lbl_802EE880
lbl_802EE94C:
/* 802EE94C 002EA5AC  7C 06 28 50 */	subf r0, r6, r5
/* 802EE950 002EA5B0  7C 09 03 A6 */	mtctr r0
/* 802EE954 002EA5B4  7C 06 28 40 */	cmplw r6, r5
/* 802EE958 002EA5B8  40 80 00 24 */	bge lbl_802EE97C
lbl_802EE95C:
/* 802EE95C 002EA5BC  88 04 00 00 */	lbz r0, 0(r4)
/* 802EE960 002EA5C0  55 25 C2 3E */	srwi r5, r9, 8
/* 802EE964 002EA5C4  38 84 00 01 */	addi r4, r4, 1
/* 802EE968 002EA5C8  7D 20 02 78 */	xor r0, r9, r0
/* 802EE96C 002EA5CC  54 00 15 BA */	rlwinm r0, r0, 2, 0x16, 0x1d
/* 802EE970 002EA5D0  7C 03 00 2E */	lwzx r0, r3, r0
/* 802EE974 002EA5D4  7C A9 02 78 */	xor r9, r5, r0
/* 802EE978 002EA5D8  42 00 FF E4 */	bdnz lbl_802EE95C
lbl_802EE97C:
/* 802EE97C 002EA5DC  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802EE980 002EA5E0  7D 23 48 F8 */	nor r3, r9, r9
/* 802EE984 002EA5E4  38 21 00 10 */	addi r1, r1, 0x10
/* 802EE988 002EA5E8  4E 80 00 20 */	blr