summaryrefslogtreecommitdiff
path: root/asm/SDK/GX/GXLight.s
blob: 4c45792a9419217ac74ed07ca5a2ebc5f9f2bb8f (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
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
.include "macros.inc"

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

.global GXInitLightAttn
GXInitLightAttn:
/* 80281F38 0027DB98  D0 23 00 10 */	stfs f1, 0x10(r3)
/* 80281F3C 0027DB9C  D0 43 00 14 */	stfs f2, 0x14(r3)
/* 80281F40 0027DBA0  D0 63 00 18 */	stfs f3, 0x18(r3)
/* 80281F44 0027DBA4  D0 83 00 1C */	stfs f4, 0x1c(r3)
/* 80281F48 0027DBA8  D0 A3 00 20 */	stfs f5, 0x20(r3)
/* 80281F4C 0027DBAC  D0 C3 00 24 */	stfs f6, 0x24(r3)
/* 80281F50 0027DBB0  4E 80 00 20 */	blr

.global GXInitLightSpot
GXInitLightSpot:
/* 80281F54 0027DBB4  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80281F58 0027DBB8  7C 08 02 A6 */	mflr r0
/* 80281F5C 0027DBBC  C0 02 A1 08 */	lfs f0, lbl_80642708-_SDA2_BASE_(r2)
/* 80281F60 0027DBC0  90 01 00 14 */	stw r0, 0x14(r1)
/* 80281F64 0027DBC4  FC 01 00 40 */	fcmpo cr0, f1, f0
/* 80281F68 0027DBC8  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80281F6C 0027DBCC  7C 9F 23 78 */	mr r31, r4
/* 80281F70 0027DBD0  93 C1 00 08 */	stw r30, 8(r1)
/* 80281F74 0027DBD4  7C 7E 1B 78 */	mr r30, r3
/* 80281F78 0027DBD8  4C 40 13 82 */	cror 2, 0, 2
/* 80281F7C 0027DBDC  41 82 00 10 */	beq lbl_80281F8C
/* 80281F80 0027DBE0  C0 02 A1 0C */	lfs f0, lbl_8064270C-_SDA2_BASE_(r2)
/* 80281F84 0027DBE4  FC 01 00 40 */	fcmpo cr0, f1, f0
/* 80281F88 0027DBE8  40 81 00 08 */	ble lbl_80281F90
lbl_80281F8C:
/* 80281F8C 0027DBEC  3B E0 00 00 */	li r31, 0
lbl_80281F90:
/* 80281F90 0027DBF0  C0 42 A1 10 */	lfs f2, lbl_80642710-_SDA2_BASE_(r2)
/* 80281F94 0027DBF4  C0 02 A1 14 */	lfs f0, lbl_80642714-_SDA2_BASE_(r2)
/* 80281F98 0027DBF8  EC 22 00 72 */	fmuls f1, f2, f1
/* 80281F9C 0027DBFC  EC 21 00 24 */	fdivs f1, f1, f0
/* 80281FA0 0027DC00  4B F5 20 D9 */	bl cos
/* 80281FA4 0027DC04  28 1F 00 06 */	cmplwi r31, 6
/* 80281FA8 0027DC08  FC A0 08 18 */	frsp f5, f1
/* 80281FAC 0027DC0C  41 81 01 00 */	bgt lbl_802820AC
/* 80281FB0 0027DC10  3C 60 80 43 */	lis r3, lbl_80435780@ha
/* 80281FB4 0027DC14  57 E0 10 3A */	slwi r0, r31, 2
/* 80281FB8 0027DC18  38 63 57 80 */	addi r3, r3, lbl_80435780@l
/* 80281FBC 0027DC1C  7C 63 00 2E */	lwzx r3, r3, r0
/* 80281FC0 0027DC20  7C 69 03 A6 */	mtctr r3
/* 80281FC4 0027DC24  4E 80 04 20 */	bctr
/* 80281FC8 0027DC28  C0 02 A1 18 */	lfs f0, lbl_80642718-_SDA2_BASE_(r2)
/* 80281FCC 0027DC2C  C0 22 A1 1C */	lfs f1, lbl_8064271C-_SDA2_BASE_(r2)
/* 80281FD0 0027DC30  EC 60 01 72 */	fmuls f3, f0, f5
/* 80281FD4 0027DC34  C0 C2 A1 08 */	lfs f6, lbl_80642708-_SDA2_BASE_(r2)
/* 80281FD8 0027DC38  48 00 00 E0 */	b lbl_802820B8
/* 80281FDC 0027DC3C  C0 42 A1 20 */	lfs f2, lbl_80642720-_SDA2_BASE_(r2)
/* 80281FE0 0027DC40  FC 00 28 50 */	fneg f0, f5
/* 80281FE4 0027DC44  C0 C2 A1 08 */	lfs f6, lbl_80642708-_SDA2_BASE_(r2)
/* 80281FE8 0027DC48  EC 22 28 28 */	fsubs f1, f2, f5
/* 80281FEC 0027DC4C  EC 22 08 24 */	fdivs f1, f2, f1
/* 80281FF0 0027DC50  EC 60 00 72 */	fmuls f3, f0, f1
/* 80281FF4 0027DC54  48 00 00 C4 */	b lbl_802820B8
/* 80281FF8 0027DC58  C0 42 A1 20 */	lfs f2, lbl_80642720-_SDA2_BASE_(r2)
/* 80281FFC 0027DC5C  FC 00 28 50 */	fneg f0, f5
/* 80282000 0027DC60  C0 62 A1 08 */	lfs f3, lbl_80642708-_SDA2_BASE_(r2)
/* 80282004 0027DC64  EC 22 28 28 */	fsubs f1, f2, f5
/* 80282008 0027DC68  EC C2 08 24 */	fdivs f6, f2, f1
/* 8028200C 0027DC6C  EC 20 01 B2 */	fmuls f1, f0, f6
/* 80282010 0027DC70  48 00 00 A8 */	b lbl_802820B8
/* 80282014 0027DC74  C0 62 A1 20 */	lfs f3, lbl_80642720-_SDA2_BASE_(r2)
/* 80282018 0027DC78  C0 22 A1 24 */	lfs f1, lbl_80642724-_SDA2_BASE_(r2)
/* 8028201C 0027DC7C  EC 43 28 28 */	fsubs f2, f3, f5
/* 80282020 0027DC80  EC 05 08 28 */	fsubs f0, f5, f1
/* 80282024 0027DC84  EC 42 00 B2 */	fmuls f2, f2, f2
/* 80282028 0027DC88  EC 05 00 32 */	fmuls f0, f5, f0
/* 8028202C 0027DC8C  EC 43 10 24 */	fdivs f2, f3, f2
/* 80282030 0027DC90  EC 62 00 32 */	fmuls f3, f2, f0
/* 80282034 0027DC94  EC 21 00 B2 */	fmuls f1, f1, f2
/* 80282038 0027DC98  FC C0 10 50 */	fneg f6, f2
/* 8028203C 0027DC9C  48 00 00 7C */	b lbl_802820B8
/* 80282040 0027DCA0  C0 82 A1 20 */	lfs f4, lbl_80642720-_SDA2_BASE_(r2)
/* 80282044 0027DCA4  C0 02 A1 2C */	lfs f0, lbl_8064272C-_SDA2_BASE_(r2)
/* 80282048 0027DCA8  EC 64 28 28 */	fsubs f3, f4, f5
/* 8028204C 0027DCAC  C0 42 A1 28 */	lfs f2, lbl_80642728-_SDA2_BASE_(r2)
/* 80282050 0027DCB0  EC 24 28 2A */	fadds f1, f4, f5
/* 80282054 0027DCB4  EC 63 00 F2 */	fmuls f3, f3, f3
/* 80282058 0027DCB8  EC 00 00 72 */	fmuls f0, f0, f1
/* 8028205C 0027DCBC  EC 24 18 24 */	fdivs f1, f4, f3
/* 80282060 0027DCC0  EC C2 00 72 */	fmuls f6, f2, f1
/* 80282064 0027DCC4  EC 20 00 72 */	fmuls f1, f0, f1
/* 80282068 0027DCC8  EC 66 01 72 */	fmuls f3, f6, f5
/* 8028206C 0027DCCC  48 00 00 4C */	b lbl_802820B8
/* 80282070 0027DCD0  C0 82 A1 20 */	lfs f4, lbl_80642720-_SDA2_BASE_(r2)
/* 80282074 0027DCD4  C0 02 A1 24 */	lfs f0, lbl_80642724-_SDA2_BASE_(r2)
/* 80282078 0027DCD8  EC 64 28 28 */	fsubs f3, f4, f5
/* 8028207C 0027DCDC  C0 22 A1 2C */	lfs f1, lbl_8064272C-_SDA2_BASE_(r2)
/* 80282080 0027DCE0  EC 40 01 72 */	fmuls f2, f0, f5
/* 80282084 0027DCE4  C0 02 A1 30 */	lfs f0, lbl_80642730-_SDA2_BASE_(r2)
/* 80282088 0027DCE8  EC 21 01 72 */	fmuls f1, f1, f5
/* 8028208C 0027DCEC  EC 63 00 F2 */	fmuls f3, f3, f3
/* 80282090 0027DCF0  EC 42 01 72 */	fmuls f2, f2, f5
/* 80282094 0027DCF4  EC 64 18 24 */	fdivs f3, f4, f3
/* 80282098 0027DCF8  EC 43 00 B2 */	fmuls f2, f3, f2
/* 8028209C 0027DCFC  EC 21 00 F2 */	fmuls f1, f1, f3
/* 802820A0 0027DD00  EC C0 00 F2 */	fmuls f6, f0, f3
/* 802820A4 0027DD04  EC 64 10 28 */	fsubs f3, f4, f2
/* 802820A8 0027DD08  48 00 00 10 */	b lbl_802820B8
lbl_802820AC:
/* 802820AC 0027DD0C  C0 22 A1 08 */	lfs f1, lbl_80642708-_SDA2_BASE_(r2)
/* 802820B0 0027DD10  C0 62 A1 20 */	lfs f3, lbl_80642720-_SDA2_BASE_(r2)
/* 802820B4 0027DD14  FC C0 08 90 */	fmr f6, f1
lbl_802820B8:
/* 802820B8 0027DD18  D0 7E 00 10 */	stfs f3, 0x10(r30)
/* 802820BC 0027DD1C  D0 3E 00 14 */	stfs f1, 0x14(r30)
/* 802820C0 0027DD20  D0 DE 00 18 */	stfs f6, 0x18(r30)
/* 802820C4 0027DD24  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802820C8 0027DD28  83 C1 00 08 */	lwz r30, 8(r1)
/* 802820CC 0027DD2C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802820D0 0027DD30  7C 08 03 A6 */	mtlr r0
/* 802820D4 0027DD34  38 21 00 10 */	addi r1, r1, 0x10
/* 802820D8 0027DD38  4E 80 00 20 */	blr

.global GXInitLightDistAttn
GXInitLightDistAttn:
/* 802820DC 0027DD3C  C0 02 A1 08 */	lfs f0, lbl_80642708-_SDA2_BASE_(r2)
/* 802820E0 0027DD40  FC 01 00 40 */	fcmpo cr0, f1, f0
/* 802820E4 0027DD44  40 80 00 08 */	bge lbl_802820EC
/* 802820E8 0027DD48  38 80 00 00 */	li r4, 0
lbl_802820EC:
/* 802820EC 0027DD4C  C0 02 A1 08 */	lfs f0, lbl_80642708-_SDA2_BASE_(r2)
/* 802820F0 0027DD50  FC 02 00 40 */	fcmpo cr0, f2, f0
/* 802820F4 0027DD54  4C 40 13 82 */	cror 2, 0, 2
/* 802820F8 0027DD58  41 82 00 14 */	beq lbl_8028210C
/* 802820FC 0027DD5C  C0 02 A1 20 */	lfs f0, lbl_80642720-_SDA2_BASE_(r2)
/* 80282100 0027DD60  FC 02 00 40 */	fcmpo cr0, f2, f0
/* 80282104 0027DD64  4C 41 13 82 */	cror 2, 1, 2
/* 80282108 0027DD68  40 82 00 08 */	bne lbl_80282110
lbl_8028210C:
/* 8028210C 0027DD6C  38 80 00 00 */	li r4, 0
lbl_80282110:
/* 80282110 0027DD70  2C 04 00 02 */	cmpwi r4, 2
/* 80282114 0027DD74  41 82 00 3C */	beq lbl_80282150
/* 80282118 0027DD78  40 80 00 14 */	bge lbl_8028212C
/* 8028211C 0027DD7C  2C 04 00 00 */	cmpwi r4, 0
/* 80282120 0027DD80  41 82 00 70 */	beq lbl_80282190
/* 80282124 0027DD84  40 80 00 14 */	bge lbl_80282138
/* 80282128 0027DD88  48 00 00 68 */	b lbl_80282190
lbl_8028212C:
/* 8028212C 0027DD8C  2C 04 00 04 */	cmpwi r4, 4
/* 80282130 0027DD90  40 80 00 60 */	bge lbl_80282190
/* 80282134 0027DD94  48 00 00 40 */	b lbl_80282174
lbl_80282138:
/* 80282138 0027DD98  C0 A2 A1 20 */	lfs f5, lbl_80642720-_SDA2_BASE_(r2)
/* 8028213C 0027DD9C  EC 02 00 72 */	fmuls f0, f2, f1
/* 80282140 0027DDA0  C0 82 A1 08 */	lfs f4, lbl_80642708-_SDA2_BASE_(r2)
/* 80282144 0027DDA4  EC 25 10 28 */	fsubs f1, f5, f2
/* 80282148 0027DDA8  EC 61 00 24 */	fdivs f3, f1, f0
/* 8028214C 0027DDAC  48 00 00 50 */	b lbl_8028219C
lbl_80282150:
/* 80282150 0027DDB0  C0 A2 A1 20 */	lfs f5, lbl_80642720-_SDA2_BASE_(r2)
/* 80282154 0027DDB4  EC 62 00 72 */	fmuls f3, f2, f1
/* 80282158 0027DDB8  C0 82 A1 34 */	lfs f4, lbl_80642734-_SDA2_BASE_(r2)
/* 8028215C 0027DDBC  EC 45 10 28 */	fsubs f2, f5, f2
/* 80282160 0027DDC0  EC 01 00 F2 */	fmuls f0, f1, f3
/* 80282164 0027DDC4  EC 24 00 B2 */	fmuls f1, f4, f2
/* 80282168 0027DDC8  EC 61 18 24 */	fdivs f3, f1, f3
/* 8028216C 0027DDCC  EC 81 00 24 */	fdivs f4, f1, f0
/* 80282170 0027DDD0  48 00 00 2C */	b lbl_8028219C
lbl_80282174:
/* 80282174 0027DDD4  EC 02 00 72 */	fmuls f0, f2, f1
/* 80282178 0027DDD8  C0 A2 A1 20 */	lfs f5, lbl_80642720-_SDA2_BASE_(r2)
/* 8028217C 0027DDDC  C0 62 A1 08 */	lfs f3, lbl_80642708-_SDA2_BASE_(r2)
/* 80282180 0027DDE0  EC 45 10 28 */	fsubs f2, f5, f2
/* 80282184 0027DDE4  EC 01 00 32 */	fmuls f0, f1, f0
/* 80282188 0027DDE8  EC 82 00 24 */	fdivs f4, f2, f0
/* 8028218C 0027DDEC  48 00 00 10 */	b lbl_8028219C
lbl_80282190:
/* 80282190 0027DDF0  C0 62 A1 08 */	lfs f3, lbl_80642708-_SDA2_BASE_(r2)
/* 80282194 0027DDF4  C0 A2 A1 20 */	lfs f5, lbl_80642720-_SDA2_BASE_(r2)
/* 80282198 0027DDF8  FC 80 18 90 */	fmr f4, f3
lbl_8028219C:
/* 8028219C 0027DDFC  D0 A3 00 1C */	stfs f5, 0x1c(r3)
/* 802821A0 0027DE00  D0 63 00 20 */	stfs f3, 0x20(r3)
/* 802821A4 0027DE04  D0 83 00 24 */	stfs f4, 0x24(r3)
/* 802821A8 0027DE08  4E 80 00 20 */	blr

.global GXInitLightPos
GXInitLightPos:
/* 802821AC 0027DE0C  D0 23 00 28 */	stfs f1, 0x28(r3)
/* 802821B0 0027DE10  D0 43 00 2C */	stfs f2, 0x2c(r3)
/* 802821B4 0027DE14  D0 63 00 30 */	stfs f3, 0x30(r3)
/* 802821B8 0027DE18  4E 80 00 20 */	blr

.global GXInitLightDir
GXInitLightDir:
/* 802821BC 0027DE1C  FC 80 08 50 */	fneg f4, f1
/* 802821C0 0027DE20  FC 20 10 50 */	fneg f1, f2
/* 802821C4 0027DE24  FC 00 18 50 */	fneg f0, f3
/* 802821C8 0027DE28  D0 83 00 34 */	stfs f4, 0x34(r3)
/* 802821CC 0027DE2C  D0 23 00 38 */	stfs f1, 0x38(r3)
/* 802821D0 0027DE30  D0 03 00 3C */	stfs f0, 0x3c(r3)
/* 802821D4 0027DE34  4E 80 00 20 */	blr

.global GXInitSpecularDir
GXInitSpecularDir:
/* 802821D8 0027DE38  94 21 FF 90 */	stwu r1, -0x70(r1)
/* 802821DC 0027DE3C  7C 08 02 A6 */	mflr r0
/* 802821E0 0027DE40  90 01 00 74 */	stw r0, 0x74(r1)
/* 802821E4 0027DE44  DB E1 00 60 */	stfd f31, 0x60(r1)
/* 802821E8 0027DE48  F3 E1 00 68 */	psq_st f31, 104(r1), 0, qr0
/* 802821EC 0027DE4C  DB C1 00 50 */	stfd f30, 0x50(r1)
/* 802821F0 0027DE50  F3 C1 00 58 */	psq_st f30, 88(r1), 0, qr0
/* 802821F4 0027DE54  DB A1 00 40 */	stfd f29, 0x40(r1)
/* 802821F8 0027DE58  F3 A1 00 48 */	psq_st f29, 72(r1), 0, qr0
/* 802821FC 0027DE5C  DB 81 00 30 */	stfd f28, 0x30(r1)
/* 80282200 0027DE60  F3 81 00 38 */	psq_st f28, 56(r1), 0, qr0
/* 80282204 0027DE64  DB 61 00 20 */	stfd f27, 0x20(r1)
/* 80282208 0027DE68  F3 61 00 28 */	psq_st f27, 40(r1), 0, qr0
/* 8028220C 0027DE6C  DB 41 00 10 */	stfd f26, 0x10(r1)
/* 80282210 0027DE70  F3 41 00 18 */	psq_st f26, 24(r1), 0, qr0
/* 80282214 0027DE74  FF E0 08 50 */	fneg f31, f1
/* 80282218 0027DE78  FF C0 10 50 */	fneg f30, f2
/* 8028221C 0027DE7C  C0 82 A1 20 */	lfs f4, lbl_80642720-_SDA2_BASE_(r2)
/* 80282220 0027DE80  FC C0 18 50 */	fneg f6, f3
/* 80282224 0027DE84  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80282228 0027DE88  EC BF 07 F2 */	fmuls f5, f31, f31
/* 8028222C 0027DE8C  FF 40 08 90 */	fmr f26, f1
/* 80282230 0027DE90  EF A4 30 2A */	fadds f29, f4, f6
/* 80282234 0027DE94  C0 02 A1 08 */	lfs f0, lbl_80642708-_SDA2_BASE_(r2)
/* 80282238 0027DE98  EC 9E 07 B2 */	fmuls f4, f30, f30
/* 8028223C 0027DE9C  7C 7F 1B 78 */	mr r31, r3
/* 80282240 0027DEA0  FF 60 10 90 */	fmr f27, f2
/* 80282244 0027DEA4  EC DD 07 72 */	fmuls f6, f29, f29
/* 80282248 0027DEA8  EC 25 20 2A */	fadds f1, f5, f4
/* 8028224C 0027DEAC  FF 80 18 90 */	fmr f28, f3
/* 80282250 0027DEB0  EC 26 08 2A */	fadds f1, f6, f1
/* 80282254 0027DEB4  FC 00 08 00 */	fcmpu cr0, f0, f1
/* 80282258 0027DEB8  41 82 00 14 */	beq lbl_8028226C
/* 8028225C 0027DEBC  4B F5 25 D9 */	bl sqrt
/* 80282260 0027DEC0  FC 20 08 18 */	frsp f1, f1
/* 80282264 0027DEC4  C0 02 A1 20 */	lfs f0, lbl_80642720-_SDA2_BASE_(r2)
/* 80282268 0027DEC8  EC 20 08 24 */	fdivs f1, f0, f1
lbl_8028226C:
/* 8028226C 0027DECC  C0 02 A1 38 */	lfs f0, lbl_80642738-_SDA2_BASE_(r2)
/* 80282270 0027DED0  EC BF 00 72 */	fmuls f5, f31, f1
/* 80282274 0027DED4  EC 9E 00 72 */	fmuls f4, f30, f1
/* 80282278 0027DED8  EC 7D 00 72 */	fmuls f3, f29, f1
/* 8028227C 0027DEDC  EC 40 06 B2 */	fmuls f2, f0, f26
/* 80282280 0027DEE0  D0 BF 00 34 */	stfs f5, 0x34(r31)
/* 80282284 0027DEE4  EC 20 06 F2 */	fmuls f1, f0, f27
/* 80282288 0027DEE8  EC 00 07 32 */	fmuls f0, f0, f28
/* 8028228C 0027DEEC  D0 9F 00 38 */	stfs f4, 0x38(r31)
/* 80282290 0027DEF0  D0 7F 00 3C */	stfs f3, 0x3c(r31)
/* 80282294 0027DEF4  D0 5F 00 28 */	stfs f2, 0x28(r31)
/* 80282298 0027DEF8  D0 3F 00 2C */	stfs f1, 0x2c(r31)
/* 8028229C 0027DEFC  D0 1F 00 30 */	stfs f0, 0x30(r31)
/* 802822A0 0027DF00  E3 E1 00 68 */	psq_l f31, 104(r1), 0, qr0
/* 802822A4 0027DF04  CB E1 00 60 */	lfd f31, 0x60(r1)
/* 802822A8 0027DF08  E3 C1 00 58 */	psq_l f30, 88(r1), 0, qr0
/* 802822AC 0027DF0C  CB C1 00 50 */	lfd f30, 0x50(r1)
/* 802822B0 0027DF10  E3 A1 00 48 */	psq_l f29, 72(r1), 0, qr0
/* 802822B4 0027DF14  CB A1 00 40 */	lfd f29, 0x40(r1)
/* 802822B8 0027DF18  E3 81 00 38 */	psq_l f28, 56(r1), 0, qr0
/* 802822BC 0027DF1C  CB 81 00 30 */	lfd f28, 0x30(r1)
/* 802822C0 0027DF20  E3 61 00 28 */	psq_l f27, 40(r1), 0, qr0
/* 802822C4 0027DF24  CB 61 00 20 */	lfd f27, 0x20(r1)
/* 802822C8 0027DF28  E3 41 00 18 */	psq_l f26, 24(r1), 0, qr0
/* 802822CC 0027DF2C  CB 41 00 10 */	lfd f26, 0x10(r1)
/* 802822D0 0027DF30  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802822D4 0027DF34  80 01 00 74 */	lwz r0, 0x74(r1)
/* 802822D8 0027DF38  7C 08 03 A6 */	mtlr r0
/* 802822DC 0027DF3C  38 21 00 70 */	addi r1, r1, 0x70
/* 802822E0 0027DF40  4E 80 00 20 */	blr

.global GXInitSpecularDirHA
GXInitSpecularDirHA:
/* 802822E4 0027DF44  C0 02 A1 38 */	lfs f0, lbl_80642738-_SDA2_BASE_(r2)
/* 802822E8 0027DF48  D0 83 00 34 */	stfs f4, 0x34(r3)
/* 802822EC 0027DF4C  EC 80 00 72 */	fmuls f4, f0, f1
/* 802822F0 0027DF50  EC 20 00 B2 */	fmuls f1, f0, f2
/* 802822F4 0027DF54  D0 A3 00 38 */	stfs f5, 0x38(r3)
/* 802822F8 0027DF58  EC 00 00 F2 */	fmuls f0, f0, f3
/* 802822FC 0027DF5C  D0 C3 00 3C */	stfs f6, 0x3c(r3)
/* 80282300 0027DF60  D0 83 00 28 */	stfs f4, 0x28(r3)
/* 80282304 0027DF64  D0 23 00 2C */	stfs f1, 0x2c(r3)
/* 80282308 0027DF68  D0 03 00 30 */	stfs f0, 0x30(r3)
/* 8028230C 0027DF6C  4E 80 00 20 */	blr

.global GXInitLightColor
GXInitLightColor:
/* 80282310 0027DF70  80 04 00 00 */	lwz r0, 0(r4)
/* 80282314 0027DF74  90 03 00 0C */	stw r0, 0xc(r3)
/* 80282318 0027DF78  4E 80 00 20 */	blr

.global GXLoadLightObjImm
GXLoadLightObjImm:
/* 8028231C 0027DF7C  7C 80 00 34 */	cntlzw r0, r4
/* 80282320 0027DF80  3C 80 CC 01 */	lis r4, 0xCC008000@ha
/* 80282324 0027DF84  20 A0 00 1F */	subfic r5, r0, 0x1f
/* 80282328 0027DF88  38 00 00 10 */	li r0, 0x10
/* 8028232C 0027DF8C  54 A5 26 76 */	rlwinm r5, r5, 4, 0x19, 0x1b
/* 80282330 0027DF90  98 04 80 00 */	stb r0, 0xCC008000@l(r4)
/* 80282334 0027DF94  38 05 06 00 */	addi r0, r5, 0x600
/* 80282338 0027DF98  64 00 00 0F */	oris r0, r0, 0xf
/* 8028233C 0027DF9C  90 04 80 00 */	stw r0, -0x8000(r4)
/* 80282340 0027DFA0  80 03 00 0C */	lwz r0, 0xc(r3)
/* 80282344 0027DFA4  7C C6 32 78 */	xor r6, r6, r6
/* 80282348 0027DFA8  E0 A3 00 10 */	psq_l f5, 16(r3), 0, qr0
/* 8028234C 0027DFAC  E0 83 00 18 */	psq_l f4, 24(r3), 0, qr0
/* 80282350 0027DFB0  E0 63 00 20 */	psq_l f3, 32(r3), 0, qr0
/* 80282354 0027DFB4  E0 43 00 28 */	psq_l f2, 40(r3), 0, qr0
/* 80282358 0027DFB8  E0 23 00 30 */	psq_l f1, 48(r3), 0, qr0
/* 8028235C 0027DFBC  E0 03 00 38 */	psq_l f0, 56(r3), 0, qr0
/* 80282360 0027DFC0  94 C4 80 00 */	stwu r6, -0x8000(r4)
/* 80282364 0027DFC4  90 C4 00 00 */	stw r6, 0(r4)
/* 80282368 0027DFC8  90 C4 00 00 */	stw r6, 0(r4)
/* 8028236C 0027DFCC  90 04 00 00 */	stw r0, 0(r4)
/* 80282370 0027DFD0  F0 A4 00 00 */	psq_st f5, 0(r4), 0, qr0
/* 80282374 0027DFD4  F0 84 00 00 */	psq_st f4, 0(r4), 0, qr0
/* 80282378 0027DFD8  F0 64 00 00 */	psq_st f3, 0(r4), 0, qr0
/* 8028237C 0027DFDC  F0 44 00 00 */	psq_st f2, 0(r4), 0, qr0
/* 80282380 0027DFE0  F0 24 00 00 */	psq_st f1, 0(r4), 0, qr0
/* 80282384 0027DFE4  F0 04 00 00 */	psq_st f0, 0(r4), 0, qr0
/* 80282388 0027DFE8  38 00 00 01 */	li r0, 1
/* 8028238C 0027DFEC  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 80282390 0027DFF0  B0 03 00 02 */	sth r0, 2(r3)
/* 80282394 0027DFF4  4E 80 00 20 */	blr

.global GXSetChanAmbColor
GXSetChanAmbColor:
/* 80282398 0027DFF8  2C 03 00 03 */	cmpwi r3, 3
/* 8028239C 0027DFFC  41 82 00 78 */	beq lbl_80282414
/* 802823A0 0027E000  40 80 00 1C */	bge lbl_802823BC
/* 802823A4 0027E004  2C 03 00 01 */	cmpwi r3, 1
/* 802823A8 0027E008  41 82 00 3C */	beq lbl_802823E4
/* 802823AC 0027E00C  40 80 00 50 */	bge lbl_802823FC
/* 802823B0 0027E010  2C 03 00 00 */	cmpwi r3, 0
/* 802823B4 0027E014  40 80 00 18 */	bge lbl_802823CC
/* 802823B8 0027E018  4E 80 00 20 */	blr
lbl_802823BC:
/* 802823BC 0027E01C  2C 03 00 05 */	cmpwi r3, 5
/* 802823C0 0027E020  41 82 00 78 */	beq lbl_80282438
/* 802823C4 0027E024  4C 80 00 20 */	bgelr
/* 802823C8 0027E028  48 00 00 64 */	b lbl_8028242C
lbl_802823CC:
/* 802823CC 0027E02C  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 802823D0 0027E030  39 00 00 00 */	li r8, 0
/* 802823D4 0027E034  80 04 00 00 */	lwz r0, 0(r4)
/* 802823D8 0027E038  80 E3 00 A8 */	lwz r7, 0xa8(r3)
/* 802823DC 0027E03C  50 07 00 2E */	rlwimi r7, r0, 0, 0, 0x17
/* 802823E0 0027E040  48 00 00 68 */	b lbl_80282448
lbl_802823E4:
/* 802823E4 0027E044  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 802823E8 0027E048  39 00 00 01 */	li r8, 1
/* 802823EC 0027E04C  80 04 00 00 */	lwz r0, 0(r4)
/* 802823F0 0027E050  80 E3 00 AC */	lwz r7, 0xac(r3)
/* 802823F4 0027E054  50 07 00 2E */	rlwimi r7, r0, 0, 0, 0x17
/* 802823F8 0027E058  48 00 00 50 */	b lbl_80282448
lbl_802823FC:
/* 802823FC 0027E05C  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 80282400 0027E060  39 00 00 00 */	li r8, 0
/* 80282404 0027E064  88 04 00 03 */	lbz r0, 3(r4)
/* 80282408 0027E068  80 E3 00 A8 */	lwz r7, 0xa8(r3)
/* 8028240C 0027E06C  50 07 06 3E */	rlwimi r7, r0, 0, 0x18, 0x1f
/* 80282410 0027E070  48 00 00 38 */	b lbl_80282448
lbl_80282414:
/* 80282414 0027E074  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 80282418 0027E078  39 00 00 01 */	li r8, 1
/* 8028241C 0027E07C  88 04 00 03 */	lbz r0, 3(r4)
/* 80282420 0027E080  80 E3 00 AC */	lwz r7, 0xac(r3)
/* 80282424 0027E084  50 07 06 3E */	rlwimi r7, r0, 0, 0x18, 0x1f
/* 80282428 0027E088  48 00 00 20 */	b lbl_80282448
lbl_8028242C:
/* 8028242C 0027E08C  80 E4 00 00 */	lwz r7, 0(r4)
/* 80282430 0027E090  39 00 00 00 */	li r8, 0
/* 80282434 0027E094  48 00 00 14 */	b lbl_80282448
lbl_80282438:
/* 80282438 0027E098  80 E4 00 00 */	lwz r7, 0(r4)
/* 8028243C 0027E09C  39 00 00 01 */	li r8, 1
/* 80282440 0027E0A0  48 00 00 08 */	b lbl_80282448
/* 80282444 0027E0A4  4E 80 00 20 */	blr
lbl_80282448:
/* 80282448 0027E0A8  80 C2 A0 D0 */	lwz r6, lbl_806426D0-_SDA2_BASE_(r2)
/* 8028244C 0027E0AC  38 60 01 00 */	li r3, 0x100
/* 80282450 0027E0B0  55 00 10 3A */	slwi r0, r8, 2
/* 80282454 0027E0B4  80 A6 05 FC */	lwz r5, 0x5fc(r6)
/* 80282458 0027E0B8  7C 64 40 30 */	slw r4, r3, r8
/* 8028245C 0027E0BC  7C 66 02 14 */	add r3, r6, r0
/* 80282460 0027E0C0  7C A0 23 78 */	or r0, r5, r4
/* 80282464 0027E0C4  90 06 05 FC */	stw r0, 0x5fc(r6)
/* 80282468 0027E0C8  90 E3 00 A8 */	stw r7, 0xa8(r3)
/* 8028246C 0027E0CC  4E 80 00 20 */	blr

.global GXSetChanMatColor
GXSetChanMatColor:
/* 80282470 0027E0D0  2C 03 00 03 */	cmpwi r3, 3
/* 80282474 0027E0D4  41 82 00 78 */	beq lbl_802824EC
/* 80282478 0027E0D8  40 80 00 1C */	bge lbl_80282494
/* 8028247C 0027E0DC  2C 03 00 01 */	cmpwi r3, 1
/* 80282480 0027E0E0  41 82 00 3C */	beq lbl_802824BC
/* 80282484 0027E0E4  40 80 00 50 */	bge lbl_802824D4
/* 80282488 0027E0E8  2C 03 00 00 */	cmpwi r3, 0
/* 8028248C 0027E0EC  40 80 00 18 */	bge lbl_802824A4
/* 80282490 0027E0F0  4E 80 00 20 */	blr
lbl_80282494:
/* 80282494 0027E0F4  2C 03 00 05 */	cmpwi r3, 5
/* 80282498 0027E0F8  41 82 00 78 */	beq lbl_80282510
/* 8028249C 0027E0FC  4C 80 00 20 */	bgelr
/* 802824A0 0027E100  48 00 00 64 */	b lbl_80282504
lbl_802824A4:
/* 802824A4 0027E104  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 802824A8 0027E108  39 00 00 00 */	li r8, 0
/* 802824AC 0027E10C  80 04 00 00 */	lwz r0, 0(r4)
/* 802824B0 0027E110  80 E3 00 B0 */	lwz r7, 0xb0(r3)
/* 802824B4 0027E114  50 07 00 2E */	rlwimi r7, r0, 0, 0, 0x17
/* 802824B8 0027E118  48 00 00 68 */	b lbl_80282520
lbl_802824BC:
/* 802824BC 0027E11C  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 802824C0 0027E120  39 00 00 01 */	li r8, 1
/* 802824C4 0027E124  80 04 00 00 */	lwz r0, 0(r4)
/* 802824C8 0027E128  80 E3 00 B4 */	lwz r7, 0xb4(r3)
/* 802824CC 0027E12C  50 07 00 2E */	rlwimi r7, r0, 0, 0, 0x17
/* 802824D0 0027E130  48 00 00 50 */	b lbl_80282520
lbl_802824D4:
/* 802824D4 0027E134  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 802824D8 0027E138  39 00 00 00 */	li r8, 0
/* 802824DC 0027E13C  88 04 00 03 */	lbz r0, 3(r4)
/* 802824E0 0027E140  80 E3 00 B0 */	lwz r7, 0xb0(r3)
/* 802824E4 0027E144  50 07 06 3E */	rlwimi r7, r0, 0, 0x18, 0x1f
/* 802824E8 0027E148  48 00 00 38 */	b lbl_80282520
lbl_802824EC:
/* 802824EC 0027E14C  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 802824F0 0027E150  39 00 00 01 */	li r8, 1
/* 802824F4 0027E154  88 04 00 03 */	lbz r0, 3(r4)
/* 802824F8 0027E158  80 E3 00 B4 */	lwz r7, 0xb4(r3)
/* 802824FC 0027E15C  50 07 06 3E */	rlwimi r7, r0, 0, 0x18, 0x1f
/* 80282500 0027E160  48 00 00 20 */	b lbl_80282520
lbl_80282504:
/* 80282504 0027E164  80 E4 00 00 */	lwz r7, 0(r4)
/* 80282508 0027E168  39 00 00 00 */	li r8, 0
/* 8028250C 0027E16C  48 00 00 14 */	b lbl_80282520
lbl_80282510:
/* 80282510 0027E170  80 E4 00 00 */	lwz r7, 0(r4)
/* 80282514 0027E174  39 00 00 01 */	li r8, 1
/* 80282518 0027E178  48 00 00 08 */	b lbl_80282520
/* 8028251C 0027E17C  4E 80 00 20 */	blr
lbl_80282520:
/* 80282520 0027E180  80 C2 A0 D0 */	lwz r6, lbl_806426D0-_SDA2_BASE_(r2)
/* 80282524 0027E184  38 60 04 00 */	li r3, 0x400
/* 80282528 0027E188  55 00 10 3A */	slwi r0, r8, 2
/* 8028252C 0027E18C  80 A6 05 FC */	lwz r5, 0x5fc(r6)
/* 80282530 0027E190  7C 64 40 30 */	slw r4, r3, r8
/* 80282534 0027E194  7C 66 02 14 */	add r3, r6, r0
/* 80282538 0027E198  7C A0 23 78 */	or r0, r5, r4
/* 8028253C 0027E19C  90 06 05 FC */	stw r0, 0x5fc(r6)
/* 80282540 0027E1A0  90 E3 00 B0 */	stw r7, 0xb0(r3)
/* 80282544 0027E1A4  4E 80 00 20 */	blr

.global GXSetNumChans
GXSetNumChans:
/* 80282548 0027E1A8  80 82 A0 D0 */	lwz r4, lbl_806426D0-_SDA2_BASE_(r2)
/* 8028254C 0027E1AC  80 04 02 54 */	lwz r0, 0x254(r4)
/* 80282550 0027E1B0  50 60 26 76 */	rlwimi r0, r3, 4, 0x19, 0x1b
/* 80282554 0027E1B4  90 04 02 54 */	stw r0, 0x254(r4)
/* 80282558 0027E1B8  80 04 05 FC */	lwz r0, 0x5fc(r4)
/* 8028255C 0027E1BC  64 00 01 00 */	oris r0, r0, 0x100
/* 80282560 0027E1C0  60 00 00 04 */	ori r0, r0, 4
/* 80282564 0027E1C4  90 04 05 FC */	stw r0, 0x5fc(r4)
/* 80282568 0027E1C8  4E 80 00 20 */	blr

.global GXSetChanCtrl
GXSetChanCtrl:
/* 8028256C 0027E1CC  2C 09 00 00 */	cmpwi r9, 0
/* 80282570 0027E1D0  39 40 00 00 */	li r10, 0
/* 80282574 0027E1D4  50 8A 0F BC */	rlwimi r10, r4, 1, 0x1e, 0x1e
/* 80282578 0027E1D8  54 6B 07 BE */	clrlwi r11, r3, 0x1e
/* 8028257C 0027E1DC  50 CA 07 FE */	rlwimi r10, r6, 0, 0x1f, 0x1f
/* 80282580 0027E1E0  50 AA 36 72 */	rlwimi r10, r5, 6, 0x19, 0x19
/* 80282584 0027E1E4  40 82 00 08 */	bne lbl_8028258C
/* 80282588 0027E1E8  39 00 00 00 */	li r8, 0
lbl_8028258C:
/* 8028258C 0027E1EC  20 A9 00 02 */	subfic r5, r9, 2
/* 80282590 0027E1F0  38 89 FF FE */	addi r4, r9, -2
/* 80282594 0027E1F4  7C 09 00 D0 */	neg r0, r9
/* 80282598 0027E1F8  51 0A 3D F0 */	rlwimi r10, r8, 7, 0x17, 0x18
/* 8028259C 0027E1FC  7C A4 23 78 */	or r4, r5, r4
/* 802825A0 0027E200  80 A2 A0 D0 */	lwz r5, lbl_806426D0-_SDA2_BASE_(r2)
/* 802825A4 0027E204  50 8A 55 AC */	rlwimi r10, r4, 0xa, 0x16, 0x16
/* 802825A8 0027E208  7C 00 4B 78 */	or r0, r0, r9
/* 802825AC 0027E20C  50 0A 5D 6A */	rlwimi r10, r0, 0xb, 0x15, 0x15
/* 802825B0 0027E210  55 64 10 3A */	slwi r4, r11, 2
/* 802825B4 0027E214  50 EA 16 BA */	rlwimi r10, r7, 2, 0x1a, 0x1d
/* 802825B8 0027E218  38 00 10 00 */	li r0, 0x1000
/* 802825BC 0027E21C  7C 85 22 14 */	add r4, r5, r4
/* 802825C0 0027E220  2C 03 00 04 */	cmpwi r3, 4
/* 802825C4 0027E224  50 EA 3C 68 */	rlwimi r10, r7, 7, 0x11, 0x14
/* 802825C8 0027E228  7C 00 58 30 */	slw r0, r0, r11
/* 802825CC 0027E22C  91 44 00 B8 */	stw r10, 0xb8(r4)
/* 802825D0 0027E230  80 85 05 FC */	lwz r4, 0x5fc(r5)
/* 802825D4 0027E234  7C 80 03 78 */	or r0, r4, r0
/* 802825D8 0027E238  90 05 05 FC */	stw r0, 0x5fc(r5)
/* 802825DC 0027E23C  40 82 00 18 */	bne lbl_802825F4
/* 802825E0 0027E240  91 45 00 C0 */	stw r10, 0xc0(r5)
/* 802825E4 0027E244  80 05 05 FC */	lwz r0, 0x5fc(r5)
/* 802825E8 0027E248  60 00 50 00 */	ori r0, r0, 0x5000
/* 802825EC 0027E24C  90 05 05 FC */	stw r0, 0x5fc(r5)
/* 802825F0 0027E250  4E 80 00 20 */	blr
lbl_802825F4:
/* 802825F4 0027E254  2C 03 00 05 */	cmpwi r3, 5
/* 802825F8 0027E258  4C 82 00 20 */	bnelr
/* 802825FC 0027E25C  91 45 00 C4 */	stw r10, 0xc4(r5)
/* 80282600 0027E260  80 05 05 FC */	lwz r0, 0x5fc(r5)
/* 80282604 0027E264  60 00 A0 00 */	ori r0, r0, 0xa000
/* 80282608 0027E268  90 05 05 FC */	stw r0, 0x5fc(r5)
/* 8028260C 0027E26C  4E 80 00 20 */	blr