summaryrefslogtreecommitdiff
path: root/asm/SDK/DWC/dwc_common/dwc_base64.s
blob: 9cfad489ac7aea9755f8bc7692a6b5e98831d2a0 (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
.include "macros.inc"

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

.global DWC_Base64Encode
DWC_Base64Encode:
/* 8031C124 00317D84  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 8031C128 00317D88  7C 08 02 A6 */	mflr r0
/* 8031C12C 00317D8C  90 01 00 34 */	stw r0, 0x34(r1)
/* 8031C130 00317D90  39 61 00 30 */	addi r11, r1, 0x30
/* 8031C134 00317D94  4B EA AF E9 */	bl _savegpr_24
/* 8031C138 00317D98  3C E0 AA AB */	lis r7, 0xAAAAAAAB@ha
/* 8031C13C 00317D9C  2C 05 00 00 */	cmpwi r5, 0
/* 8031C140 00317DA0  3B C7 AA AB */	addi r30, r7, 0xAAAAAAAB@l
/* 8031C144 00317DA4  7C B9 2B 78 */	mr r25, r5
/* 8031C148 00317DA8  7C FE 20 16 */	mulhwu r7, r30, r4
/* 8031C14C 00317DAC  54 E0 F8 7E */	srwi r0, r7, 1
/* 8031C150 00317DB0  54 E7 08 3A */	rlwinm r7, r7, 1, 0, 0x1d
/* 8031C154 00317DB4  1C 00 00 03 */	mulli r0, r0, 3
/* 8031C158 00317DB8  7C A0 20 50 */	subf r5, r0, r4
/* 8031C15C 00317DBC  7C 05 00 D0 */	neg r0, r5
/* 8031C160 00317DC0  7C 00 2B 78 */	or r0, r0, r5
/* 8031C164 00317DC4  7C 00 FE 70 */	srawi r0, r0, 0x1f
/* 8031C168 00317DC8  54 00 07 7A */	rlwinm r0, r0, 0, 0x1d, 0x1d
/* 8031C16C 00317DCC  7C 07 02 14 */	add r0, r7, r0
/* 8031C170 00317DD0  40 82 00 0C */	bne lbl_8031C17C
/* 8031C174 00317DD4  7C 03 03 78 */	mr r3, r0
/* 8031C178 00317DD8  48 00 01 24 */	b lbl_8031C29C
lbl_8031C17C:
/* 8031C17C 00317DDC  7C 06 00 40 */	cmplw r6, r0
/* 8031C180 00317DE0  40 80 00 0C */	bge lbl_8031C18C
/* 8031C184 00317DE4  38 60 FF FF */	li r3, -1
/* 8031C188 00317DE8  48 00 01 14 */	b lbl_8031C29C
lbl_8031C18C:
/* 8031C18C 00317DEC  7C 7C 1B 78 */	mr r28, r3
/* 8031C190 00317DF0  7F 3A CB 78 */	mr r26, r25
/* 8031C194 00317DF4  7F 63 22 14 */	add r27, r3, r4
/* 8031C198 00317DF8  3B 00 00 2A */	li r24, 0x2a
/* 8031C19C 00317DFC  48 00 00 F4 */	b lbl_8031C290
lbl_8031C1A0:
/* 8031C1A0 00317E00  7C BC D8 50 */	subf r5, r28, r27
/* 8031C1A4 00317E04  3B E0 00 03 */	li r31, 3
/* 8031C1A8 00317E08  54 A3 18 38 */	slwi r3, r5, 3
/* 8031C1AC 00317E0C  7C 1E 18 16 */	mulhwu r0, r30, r3
/* 8031C1B0 00317E10  2C 05 00 03 */	cmpwi r5, 3
/* 8031C1B4 00317E14  54 04 F0 BE */	srwi r4, r0, 2
/* 8031C1B8 00317E18  1C 04 00 06 */	mulli r0, r4, 6
/* 8031C1BC 00317E1C  7C 60 18 50 */	subf r3, r0, r3
/* 8031C1C0 00317E20  7C 03 00 D0 */	neg r0, r3
/* 8031C1C4 00317E24  7C 00 1B 78 */	or r0, r0, r3
/* 8031C1C8 00317E28  54 00 0F FE */	srwi r0, r0, 0x1f
/* 8031C1CC 00317E2C  7F A4 02 14 */	add r29, r4, r0
/* 8031C1D0 00317E30  40 80 00 08 */	bge lbl_8031C1D8
/* 8031C1D4 00317E34  7C BF 2B 78 */	mr r31, r5
lbl_8031C1D8:
/* 8031C1D8 00317E38  38 61 00 08 */	addi r3, r1, 8
/* 8031C1DC 00317E3C  38 80 00 00 */	li r4, 0
/* 8031C1E0 00317E40  38 A0 00 03 */	li r5, 3
/* 8031C1E4 00317E44  4B CE 7F 21 */	bl memset
/* 8031C1E8 00317E48  7F 84 E3 78 */	mr r4, r28
/* 8031C1EC 00317E4C  7F E5 FB 78 */	mr r5, r31
/* 8031C1F0 00317E50  38 61 00 08 */	addi r3, r1, 8
/* 8031C1F4 00317E54  4B CE 7E 0D */	bl memcpy
/* 8031C1F8 00317E58  88 01 00 08 */	lbz r0, 8(r1)
/* 8031C1FC 00317E5C  28 1D 00 02 */	cmplwi r29, 2
/* 8031C200 00317E60  80 6D 8D 28 */	lwz r3, lbl_8063DFE8-_SDA_BASE_(r13)
/* 8031C204 00317E64  7C 00 16 70 */	srawi r0, r0, 2
/* 8031C208 00317E68  7C 03 00 AE */	lbzx r0, r3, r0
/* 8031C20C 00317E6C  98 1A 00 00 */	stb r0, 0(r26)
/* 8031C210 00317E70  41 80 00 24 */	blt lbl_8031C234
/* 8031C214 00317E74  88 01 00 09 */	lbz r0, 9(r1)
/* 8031C218 00317E78  88 61 00 08 */	lbz r3, 8(r1)
/* 8031C21C 00317E7C  7C 00 26 70 */	srawi r0, r0, 4
/* 8031C220 00317E80  80 8D 8D 28 */	lwz r4, lbl_8063DFE8-_SDA_BASE_(r13)
/* 8031C224 00317E84  50 60 26 B6 */	rlwimi r0, r3, 4, 0x1a, 0x1b
/* 8031C228 00317E88  7C 04 00 AE */	lbzx r0, r4, r0
/* 8031C22C 00317E8C  98 1A 00 01 */	stb r0, 1(r26)
/* 8031C230 00317E90  48 00 00 08 */	b lbl_8031C238
lbl_8031C234:
/* 8031C234 00317E94  9B 1A 00 01 */	stb r24, 1(r26)
lbl_8031C238:
/* 8031C238 00317E98  28 1D 00 03 */	cmplwi r29, 3
/* 8031C23C 00317E9C  41 80 00 24 */	blt lbl_8031C260
/* 8031C240 00317EA0  88 01 00 0A */	lbz r0, 0xa(r1)
/* 8031C244 00317EA4  88 61 00 09 */	lbz r3, 9(r1)
/* 8031C248 00317EA8  7C 00 36 70 */	srawi r0, r0, 6
/* 8031C24C 00317EAC  80 8D 8D 28 */	lwz r4, lbl_8063DFE8-_SDA_BASE_(r13)
/* 8031C250 00317EB0  50 60 16 BA */	rlwimi r0, r3, 2, 0x1a, 0x1d
/* 8031C254 00317EB4  7C 04 00 AE */	lbzx r0, r4, r0
/* 8031C258 00317EB8  98 1A 00 02 */	stb r0, 2(r26)
/* 8031C25C 00317EBC  48 00 00 08 */	b lbl_8031C264
lbl_8031C260:
/* 8031C260 00317EC0  9B 1A 00 02 */	stb r24, 2(r26)
lbl_8031C264:
/* 8031C264 00317EC4  28 1D 00 04 */	cmplwi r29, 4
/* 8031C268 00317EC8  41 80 00 1C */	blt lbl_8031C284
/* 8031C26C 00317ECC  88 01 00 0A */	lbz r0, 0xa(r1)
/* 8031C270 00317ED0  80 6D 8D 28 */	lwz r3, lbl_8063DFE8-_SDA_BASE_(r13)
/* 8031C274 00317ED4  54 00 06 BE */	clrlwi r0, r0, 0x1a
/* 8031C278 00317ED8  7C 03 00 AE */	lbzx r0, r3, r0
/* 8031C27C 00317EDC  98 1A 00 03 */	stb r0, 3(r26)
/* 8031C280 00317EE0  48 00 00 08 */	b lbl_8031C288
lbl_8031C284:
/* 8031C284 00317EE4  9B 1A 00 03 */	stb r24, 3(r26)
lbl_8031C288:
/* 8031C288 00317EE8  7F 9C FA 14 */	add r28, r28, r31
/* 8031C28C 00317EEC  3B 5A 00 04 */	addi r26, r26, 4
lbl_8031C290:
/* 8031C290 00317EF0  7C 1C D8 40 */	cmplw r28, r27
/* 8031C294 00317EF4  40 82 FF 0C */	bne lbl_8031C1A0
/* 8031C298 00317EF8  7C 79 D0 50 */	subf r3, r25, r26
lbl_8031C29C:
/* 8031C29C 00317EFC  39 61 00 30 */	addi r11, r1, 0x30
/* 8031C2A0 00317F00  4B EA AE C9 */	bl _restgpr_24
/* 8031C2A4 00317F04  80 01 00 34 */	lwz r0, 0x34(r1)
/* 8031C2A8 00317F08  7C 08 03 A6 */	mtlr r0
/* 8031C2AC 00317F0C  38 21 00 30 */	addi r1, r1, 0x30
/* 8031C2B0 00317F10  4E 80 00 20 */	blr

.global DWC_Base64Decode
DWC_Base64Decode:
/* 8031C2B4 00317F14  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8031C2B8 00317F18  54 80 07 BF */	clrlwi. r0, r4, 0x1e
/* 8031C2BC 00317F1C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8031C2C0 00317F20  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8031C2C4 00317F24  41 82 00 0C */	beq lbl_8031C2D0
/* 8031C2C8 00317F28  38 60 FF FF */	li r3, -1
/* 8031C2CC 00317F2C  48 00 01 B0 */	b lbl_8031C47C
lbl_8031C2D0:
/* 8031C2D0 00317F30  7C 68 1B 78 */	mr r8, r3
/* 8031C2D4 00317F34  38 E0 00 00 */	li r7, 0
/* 8031C2D8 00317F38  7C 89 03 A6 */	mtctr r4
/* 8031C2DC 00317F3C  2C 04 00 00 */	cmpwi r4, 0
/* 8031C2E0 00317F40  40 81 00 1C */	ble lbl_8031C2FC
lbl_8031C2E4:
/* 8031C2E4 00317F44  88 08 00 00 */	lbz r0, 0(r8)
/* 8031C2E8 00317F48  2C 00 00 2A */	cmpwi r0, 0x2a
/* 8031C2EC 00317F4C  41 82 00 08 */	beq lbl_8031C2F4
/* 8031C2F0 00317F50  38 E7 00 06 */	addi r7, r7, 6
lbl_8031C2F4:
/* 8031C2F4 00317F54  39 08 00 01 */	addi r8, r8, 1
/* 8031C2F8 00317F58  42 00 FF EC */	bdnz lbl_8031C2E4
lbl_8031C2FC:
/* 8031C2FC 00317F5C  2C 05 00 00 */	cmpwi r5, 0
/* 8031C300 00317F60  7C E0 1E 70 */	srawi r0, r7, 3
/* 8031C304 00317F64  7C E0 01 94 */	addze r7, r0
/* 8031C308 00317F68  40 82 00 0C */	bne lbl_8031C314
/* 8031C30C 00317F6C  7C E3 3B 78 */	mr r3, r7
/* 8031C310 00317F70  48 00 01 6C */	b lbl_8031C47C
lbl_8031C314:
/* 8031C314 00317F74  7C 06 38 40 */	cmplw r6, r7
/* 8031C318 00317F78  40 80 00 0C */	bge lbl_8031C324
/* 8031C31C 00317F7C  38 60 FF FF */	li r3, -1
/* 8031C320 00317F80  48 00 01 5C */	b lbl_8031C47C
lbl_8031C324:
/* 8031C324 00317F84  2C 04 00 00 */	cmpwi r4, 0
/* 8031C328 00317F88  40 82 00 14 */	bne lbl_8031C33C
/* 8031C32C 00317F8C  38 00 00 00 */	li r0, 0
/* 8031C330 00317F90  38 60 00 00 */	li r3, 0
/* 8031C334 00317F94  98 05 00 00 */	stb r0, 0(r5)
/* 8031C338 00317F98  48 00 01 44 */	b lbl_8031C47C
lbl_8031C33C:
/* 8031C33C 00317F9C  7C A4 2B 78 */	mr r4, r5
/* 8031C340 00317FA0  39 40 00 00 */	li r10, 0
/* 8031C344 00317FA4  39 60 00 3F */	li r11, 0x3f
/* 8031C348 00317FA8  39 80 00 3E */	li r12, 0x3e
/* 8031C34C 00317FAC  38 00 00 04 */	li r0, 4
lbl_8031C350:
/* 8031C350 00317FB0  7C 66 1B 78 */	mr r6, r3
/* 8031C354 00317FB4  39 21 00 08 */	addi r9, r1, 8
/* 8031C358 00317FB8  3B C0 00 00 */	li r30, 0
/* 8031C35C 00317FBC  7C 09 03 A6 */	mtctr r0
lbl_8031C360:
/* 8031C360 00317FC0  8B E6 00 00 */	lbz r31, 0(r6)
/* 8031C364 00317FC4  7F E8 07 74 */	extsb r8, r31
/* 8031C368 00317FC8  2C 08 00 41 */	cmpwi r8, 0x41
/* 8031C36C 00317FCC  41 80 00 18 */	blt lbl_8031C384
/* 8031C370 00317FD0  2C 08 00 5A */	cmpwi r8, 0x5a
/* 8031C374 00317FD4  41 81 00 10 */	bgt lbl_8031C384
/* 8031C378 00317FD8  39 1F FF BF */	addi r8, r31, -65
/* 8031C37C 00317FDC  99 09 00 00 */	stb r8, 0(r9)
/* 8031C380 00317FE0  48 00 00 6C */	b lbl_8031C3EC
lbl_8031C384:
/* 8031C384 00317FE4  7F E8 07 74 */	extsb r8, r31
/* 8031C388 00317FE8  2C 08 00 61 */	cmpwi r8, 0x61
/* 8031C38C 00317FEC  41 80 00 18 */	blt lbl_8031C3A4
/* 8031C390 00317FF0  2C 08 00 7A */	cmpwi r8, 0x7a
/* 8031C394 00317FF4  41 81 00 10 */	bgt lbl_8031C3A4
/* 8031C398 00317FF8  39 1F FF B9 */	addi r8, r31, -71
/* 8031C39C 00317FFC  99 09 00 00 */	stb r8, 0(r9)
/* 8031C3A0 00318000  48 00 00 4C */	b lbl_8031C3EC
lbl_8031C3A4:
/* 8031C3A4 00318004  7F E8 07 74 */	extsb r8, r31
/* 8031C3A8 00318008  2C 08 00 30 */	cmpwi r8, 0x30
/* 8031C3AC 0031800C  41 80 00 18 */	blt lbl_8031C3C4
/* 8031C3B0 00318010  2C 08 00 39 */	cmpwi r8, 0x39
/* 8031C3B4 00318014  41 81 00 10 */	bgt lbl_8031C3C4
/* 8031C3B8 00318018  39 1F 00 04 */	addi r8, r31, 4
/* 8031C3BC 0031801C  99 09 00 00 */	stb r8, 0(r9)
/* 8031C3C0 00318020  48 00 00 2C */	b lbl_8031C3EC
lbl_8031C3C4:
/* 8031C3C4 00318024  7F E8 07 74 */	extsb r8, r31
/* 8031C3C8 00318028  2C 08 00 2E */	cmpwi r8, 0x2e
/* 8031C3CC 0031802C  40 82 00 0C */	bne lbl_8031C3D8
/* 8031C3D0 00318030  99 89 00 00 */	stb r12, 0(r9)
/* 8031C3D4 00318034  48 00 00 18 */	b lbl_8031C3EC
lbl_8031C3D8:
/* 8031C3D8 00318038  2C 08 00 2D */	cmpwi r8, 0x2d
/* 8031C3DC 0031803C  40 82 00 0C */	bne lbl_8031C3E8
/* 8031C3E0 00318040  99 69 00 00 */	stb r11, 0(r9)
/* 8031C3E4 00318044  48 00 00 08 */	b lbl_8031C3EC
lbl_8031C3E8:
/* 8031C3E8 00318048  99 49 00 00 */	stb r10, 0(r9)
lbl_8031C3EC:
/* 8031C3EC 0031804C  39 29 00 01 */	addi r9, r9, 1
/* 8031C3F0 00318050  3B DE 00 01 */	addi r30, r30, 1
/* 8031C3F4 00318054  38 C6 00 01 */	addi r6, r6, 1
/* 8031C3F8 00318058  42 00 FF 68 */	bdnz lbl_8031C360
/* 8031C3FC 0031805C  89 21 00 08 */	lbz r9, 8(r1)
/* 8031C400 00318060  38 C4 00 01 */	addi r6, r4, 1
/* 8031C404 00318064  89 01 00 09 */	lbz r8, 9(r1)
/* 8031C408 00318068  7F E5 30 50 */	subf r31, r5, r6
/* 8031C40C 0031806C  7D 26 07 74 */	extsb r6, r9
/* 8031C410 00318070  38 63 00 04 */	addi r3, r3, 4
/* 8031C414 00318074  7D 09 07 74 */	extsb r9, r8
/* 8031C418 00318078  7C 1F 38 00 */	cmpw r31, r7
/* 8031C41C 0031807C  54 C8 10 3A */	slwi r8, r6, 2
/* 8031C420 00318080  7D 26 26 70 */	srawi r6, r9, 4
/* 8031C424 00318084  7D 06 33 78 */	or r6, r8, r6
/* 8031C428 00318088  98 C4 00 00 */	stb r6, 0(r4)
/* 8031C42C 0031808C  40 80 00 4C */	bge lbl_8031C478
/* 8031C430 00318090  89 01 00 0A */	lbz r8, 0xa(r1)
/* 8031C434 00318094  38 C4 00 02 */	addi r6, r4, 2
/* 8031C438 00318098  7F E5 30 50 */	subf r31, r5, r6
/* 8031C43C 0031809C  55 29 20 36 */	slwi r9, r9, 4
/* 8031C440 003180A0  7D 08 07 74 */	extsb r8, r8
/* 8031C444 003180A4  7D 06 16 70 */	srawi r6, r8, 2
/* 8031C448 003180A8  7C 1F 38 00 */	cmpw r31, r7
/* 8031C44C 003180AC  7D 26 33 78 */	or r6, r9, r6
/* 8031C450 003180B0  98 C4 00 01 */	stb r6, 1(r4)
/* 8031C454 003180B4  40 80 00 24 */	bge lbl_8031C478
/* 8031C458 003180B8  88 C1 00 0B */	lbz r6, 0xb(r1)
/* 8031C45C 003180BC  55 08 30 32 */	slwi r8, r8, 6
/* 8031C460 003180C0  7D 06 33 78 */	or r6, r8, r6
/* 8031C464 003180C4  98 C4 00 02 */	stb r6, 2(r4)
/* 8031C468 003180C8  38 84 00 03 */	addi r4, r4, 3
/* 8031C46C 003180CC  7F E5 20 50 */	subf r31, r5, r4
/* 8031C470 003180D0  7C 1F 38 00 */	cmpw r31, r7
/* 8031C474 003180D4  41 80 FE DC */	blt lbl_8031C350
lbl_8031C478:
/* 8031C478 003180D8  7F E3 FB 78 */	mr r3, r31
lbl_8031C47C:
/* 8031C47C 003180DC  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8031C480 003180E0  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8031C484 003180E4  38 21 00 20 */	addi r1, r1, 0x20
/* 8031C488 003180E8  4E 80 00 20 */	blr