summaryrefslogtreecommitdiff
path: root/asm/SDK/GX/GXTransform.s
blob: 31d902960d8850368e5f26983813095453681c09 (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
.include "macros.inc"

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

.global GXProject
GXProject:
/* 8028680C 0028246C  C0 A3 00 00 */	lfs f5, 0(r3)
/* 80286810 00282470  C0 83 00 04 */	lfs f4, 4(r3)
/* 80286814 00282474  C0 03 00 10 */	lfs f0, 0x10(r3)
/* 80286818 00282478  ED 85 00 72 */	fmuls f12, f5, f1
/* 8028681C 0028247C  C0 A3 00 14 */	lfs f5, 0x14(r3)
/* 80286820 00282480  EC E4 00 B2 */	fmuls f7, f4, f2
/* 80286824 00282484  ED 20 00 72 */	fmuls f9, f0, f1
/* 80286828 00282488  C0 83 00 20 */	lfs f4, 0x20(r3)
/* 8028682C 0028248C  ED 05 00 B2 */	fmuls f8, f5, f2
/* 80286830 00282490  EC A4 00 72 */	fmuls f5, f4, f1
/* 80286834 00282494  C0 03 00 24 */	lfs f0, 0x24(r3)
/* 80286838 00282498  C1 63 00 08 */	lfs f11, 8(r3)
/* 8028683C 0028249C  EC 80 00 B2 */	fmuls f4, f0, f2
/* 80286840 002824A0  C1 43 00 18 */	lfs f10, 0x18(r3)
/* 80286844 002824A4  C0 C3 00 28 */	lfs f6, 0x28(r3)
/* 80286848 002824A8  ED AB 00 F2 */	fmuls f13, f11, f3
/* 8028684C 002824AC  C1 63 00 0C */	lfs f11, 0xc(r3)
/* 80286850 002824B0  EC 0C 38 2A */	fadds f0, f12, f7
/* 80286854 002824B4  ED 09 40 2A */	fadds f8, f9, f8
/* 80286858 002824B8  C0 E3 00 1C */	lfs f7, 0x1c(r3)
/* 8028685C 002824BC  ED 4A 00 F2 */	fmuls f10, f10, f3
/* 80286860 002824C0  ED 2D 00 2A */	fadds f9, f13, f0
/* 80286864 002824C4  C0 43 00 2C */	lfs f2, 0x2c(r3)
/* 80286868 002824C8  EC C6 00 F2 */	fmuls f6, f6, f3
/* 8028686C 002824CC  EC 65 20 2A */	fadds f3, f5, f4
/* 80286870 002824D0  C0 22 A2 00 */	lfs f1, lbl_80642800-_SDA2_BASE_(r2)
/* 80286874 002824D4  EC 8A 40 2A */	fadds f4, f10, f8
/* 80286878 002824D8  C0 04 00 00 */	lfs f0, 0(r4)
/* 8028687C 002824DC  ED 2B 48 2A */	fadds f9, f11, f9
/* 80286880 002824E0  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80286884 002824E4  ED 07 20 2A */	fadds f8, f7, f4
/* 80286888 002824E8  EC 66 18 2A */	fadds f3, f6, f3
/* 8028688C 002824EC  D1 21 00 08 */	stfs f9, 8(r1)
/* 80286890 002824F0  FC 01 00 00 */	fcmpu cr0, f1, f0
/* 80286894 002824F4  D1 01 00 0C */	stfs f8, 0xc(r1)
/* 80286898 002824F8  EC E2 18 2A */	fadds f7, f2, f3
/* 8028689C 002824FC  D0 E1 00 10 */	stfs f7, 0x10(r1)
/* 802868A0 00282500  40 82 00 4C */	bne lbl_802868EC
/* 802868A4 00282504  FC 20 38 50 */	fneg f1, f7
/* 802868A8 00282508  C0 02 A2 04 */	lfs f0, lbl_80642804-_SDA2_BASE_(r2)
/* 802868AC 0028250C  C0 C4 00 04 */	lfs f6, 4(r4)
/* 802868B0 00282510  C0 A4 00 08 */	lfs f5, 8(r4)
/* 802868B4 00282514  EC 00 08 24 */	fdivs f0, f0, f1
/* 802868B8 00282518  C0 84 00 0C */	lfs f4, 0xc(r4)
/* 802868BC 0028251C  C0 64 00 10 */	lfs f3, 0x10(r4)
/* 802868C0 00282520  C0 44 00 14 */	lfs f2, 0x14(r4)
/* 802868C4 00282524  C0 24 00 18 */	lfs f1, 0x18(r4)
/* 802868C8 00282528  EC 47 00 B2 */	fmuls f2, f7, f2
/* 802868CC 0028252C  EC C9 01 B2 */	fmuls f6, f9, f6
/* 802868D0 00282530  EC A7 01 72 */	fmuls f5, f7, f5
/* 802868D4 00282534  EC 67 00 F2 */	fmuls f3, f7, f3
/* 802868D8 00282538  EC 88 01 32 */	fmuls f4, f8, f4
/* 802868DC 0028253C  EC E6 28 2A */	fadds f7, f6, f5
/* 802868E0 00282540  ED 41 10 2A */	fadds f10, f1, f2
/* 802868E4 00282544  EC 64 18 2A */	fadds f3, f4, f3
/* 802868E8 00282548  48 00 00 38 */	b lbl_80286920
lbl_802868EC:
/* 802868EC 0028254C  C0 44 00 04 */	lfs f2, 4(r4)
/* 802868F0 00282550  C0 24 00 0C */	lfs f1, 0xc(r4)
/* 802868F4 00282554  C0 04 00 14 */	lfs f0, 0x14(r4)
/* 802868F8 00282558  EC C9 00 B2 */	fmuls f6, f9, f2
/* 802868FC 0028255C  EC 88 00 72 */	fmuls f4, f8, f1
/* 80286900 00282560  C0 64 00 10 */	lfs f3, 0x10(r4)
/* 80286904 00282564  EC 47 00 32 */	fmuls f2, f7, f0
/* 80286908 00282568  C0 A4 00 08 */	lfs f5, 8(r4)
/* 8028690C 0028256C  C0 24 00 18 */	lfs f1, 0x18(r4)
/* 80286910 00282570  EC E5 30 2A */	fadds f7, f5, f6
/* 80286914 00282574  EC 63 20 2A */	fadds f3, f3, f4
/* 80286918 00282578  C0 02 A2 04 */	lfs f0, lbl_80642804-_SDA2_BASE_(r2)
/* 8028691C 0028257C  ED 41 10 2A */	fadds f10, f1, f2
lbl_80286920:
/* 80286920 00282580  C0 C5 00 08 */	lfs f6, 8(r5)
/* 80286924 00282584  FC 20 18 50 */	fneg f1, f3
/* 80286928 00282588  C0 A5 00 0C */	lfs f5, 0xc(r5)
/* 8028692C 0028258C  EC 87 01 B2 */	fmuls f4, f7, f6
/* 80286930 00282590  C1 22 A2 08 */	lfs f9, lbl_80642808-_SDA2_BASE_(r2)
/* 80286934 00282594  EC 61 01 72 */	fmuls f3, f1, f5
/* 80286938 00282598  C0 45 00 14 */	lfs f2, 0x14(r5)
/* 8028693C 0028259C  C0 25 00 10 */	lfs f1, 0x10(r5)
/* 80286940 002825A0  ED 06 02 72 */	fmuls f8, f6, f9
/* 80286944 002825A4  EC E4 02 72 */	fmuls f7, f4, f9
/* 80286948 002825A8  C0 C5 00 00 */	lfs f6, 0(r5)
/* 8028694C 002825AC  EC 83 02 72 */	fmuls f4, f3, f9
/* 80286950 002825B0  C0 65 00 04 */	lfs f3, 4(r5)
/* 80286954 002825B4  EC 22 08 28 */	fsubs f1, f2, f1
/* 80286958 002825B8  EC E0 01 F2 */	fmuls f7, f0, f7
/* 8028695C 002825BC  EC 80 01 32 */	fmuls f4, f0, f4
/* 80286960 002825C0  EC 2A 00 72 */	fmuls f1, f10, f1
/* 80286964 002825C4  EC C6 38 2A */	fadds f6, f6, f7
/* 80286968 002825C8  EC 63 20 2A */	fadds f3, f3, f4
/* 8028696C 002825CC  EC A5 02 72 */	fmuls f5, f5, f9
/* 80286970 002825D0  EC 00 00 72 */	fmuls f0, f0, f1
/* 80286974 002825D4  EC 88 30 2A */	fadds f4, f8, f6
/* 80286978 002825D8  EC 25 18 2A */	fadds f1, f5, f3
/* 8028697C 002825DC  EC 02 00 2A */	fadds f0, f2, f0
/* 80286980 002825E0  D0 86 00 00 */	stfs f4, 0(r6)
/* 80286984 002825E4  D0 27 00 00 */	stfs f1, 0(r7)
/* 80286988 002825E8  D0 08 00 00 */	stfs f0, 0(r8)
/* 8028698C 002825EC  38 21 00 20 */	addi r1, r1, 0x20
/* 80286990 002825F0  4E 80 00 20 */	blr

.global __GXSetProjection
__GXSetProjection:
/* 80286994 002825F4  3C 80 CC 01 */	lis r4, 0xCC008000@ha
/* 80286998 002825F8  38 00 00 10 */	li r0, 0x10
/* 8028699C 002825FC  3C 60 00 06 */	lis r3, 0x00061020@ha
/* 802869A0 00282600  98 04 80 00 */	stb r0, 0xCC008000@l(r4)
/* 802869A4 00282604  38 03 10 20 */	addi r0, r3, 0x00061020@l
/* 802869A8 00282608  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 802869AC 0028260C  90 04 80 00 */	stw r0, -0x8000(r4)
/* 802869B0 00282610  38 A4 80 00 */	addi r5, r4, -32768
/* 802869B4 00282614  E0 43 05 2C */	psq_l f2, 1324(r3), 0, qr0
/* 802869B8 00282618  E0 23 05 34 */	psq_l f1, 1332(r3), 0, qr0
/* 802869BC 0028261C  E0 03 05 3C */	psq_l f0, 1340(r3), 0, qr0
/* 802869C0 00282620  F0 45 00 00 */	psq_st f2, 0(r5), 0, qr0
/* 802869C4 00282624  F0 25 00 00 */	psq_st f1, 0(r5), 0, qr0
/* 802869C8 00282628  F0 05 00 00 */	psq_st f0, 0(r5), 0, qr0
/* 802869CC 0028262C  80 03 05 28 */	lwz r0, 0x528(r3)
/* 802869D0 00282630  90 04 80 00 */	stw r0, -0x8000(r4)
/* 802869D4 00282634  4E 80 00 20 */	blr

.global GXSetProjection
GXSetProjection:
/* 802869D8 00282638  80 A2 A0 D0 */	lwz r5, lbl_806426D0-_SDA2_BASE_(r2)
/* 802869DC 0028263C  2C 04 00 01 */	cmpwi r4, 1
/* 802869E0 00282640  C0 23 00 00 */	lfs f1, 0(r3)
/* 802869E4 00282644  90 85 05 28 */	stw r4, 0x528(r5)
/* 802869E8 00282648  C0 03 00 14 */	lfs f0, 0x14(r3)
/* 802869EC 0028264C  D0 25 05 2C */	stfs f1, 0x52c(r5)
/* 802869F0 00282650  C0 23 00 28 */	lfs f1, 0x28(r3)
/* 802869F4 00282654  D0 05 05 34 */	stfs f0, 0x534(r5)
/* 802869F8 00282658  C0 03 00 2C */	lfs f0, 0x2c(r3)
/* 802869FC 0028265C  D0 25 05 3C */	stfs f1, 0x53c(r5)
/* 80286A00 00282660  D0 05 05 40 */	stfs f0, 0x540(r5)
/* 80286A04 00282664  40 82 00 18 */	bne lbl_80286A1C
/* 80286A08 00282668  C0 23 00 0C */	lfs f1, 0xc(r3)
/* 80286A0C 0028266C  C0 03 00 1C */	lfs f0, 0x1c(r3)
/* 80286A10 00282670  D0 25 05 30 */	stfs f1, 0x530(r5)
/* 80286A14 00282674  D0 05 05 38 */	stfs f0, 0x538(r5)
/* 80286A18 00282678  48 00 00 14 */	b lbl_80286A2C
lbl_80286A1C:
/* 80286A1C 0028267C  C0 23 00 08 */	lfs f1, 8(r3)
/* 80286A20 00282680  C0 03 00 18 */	lfs f0, 0x18(r3)
/* 80286A24 00282684  D0 25 05 30 */	stfs f1, 0x530(r5)
/* 80286A28 00282688  D0 05 05 38 */	stfs f0, 0x538(r5)
lbl_80286A2C:
/* 80286A2C 0028268C  80 05 05 FC */	lwz r0, 0x5fc(r5)
/* 80286A30 00282690  64 00 08 00 */	oris r0, r0, 0x800
/* 80286A34 00282694  90 05 05 FC */	stw r0, 0x5fc(r5)
/* 80286A38 00282698  4E 80 00 20 */	blr

.global GXSetProjectionv
GXSetProjectionv:
/* 80286A3C 0028269C  C0 22 A2 00 */	lfs f1, lbl_80642800-_SDA2_BASE_(r2)
/* 80286A40 002826A0  C0 03 00 00 */	lfs f0, 0(r3)
/* 80286A44 002826A4  FC 01 00 00 */	fcmpu cr0, f1, f0
/* 80286A48 002826A8  40 82 00 0C */	bne lbl_80286A54
/* 80286A4C 002826AC  38 00 00 00 */	li r0, 0
/* 80286A50 002826B0  48 00 00 08 */	b lbl_80286A58
lbl_80286A54:
/* 80286A54 002826B4  38 00 00 01 */	li r0, 1
lbl_80286A58:
/* 80286A58 002826B8  80 82 A0 D0 */	lwz r4, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286A5C 002826BC  90 04 05 28 */	stw r0, 0x528(r4)
/* 80286A60 002826C0  E0 43 00 04 */	psq_l f2, 4(r3), 0, qr0
/* 80286A64 002826C4  E0 23 00 0C */	psq_l f1, 12(r3), 0, qr0
/* 80286A68 002826C8  E0 03 00 14 */	psq_l f0, 20(r3), 0, qr0
/* 80286A6C 002826CC  F0 44 05 2C */	psq_st f2, 1324(r4), 0, qr0
/* 80286A70 002826D0  F0 24 05 34 */	psq_st f1, 1332(r4), 0, qr0
/* 80286A74 002826D4  F0 04 05 3C */	psq_st f0, 1340(r4), 0, qr0
/* 80286A78 002826D8  80 04 05 FC */	lwz r0, 0x5fc(r4)
/* 80286A7C 002826DC  64 00 08 00 */	oris r0, r0, 0x800
/* 80286A80 002826E0  90 04 05 FC */	stw r0, 0x5fc(r4)
/* 80286A84 002826E4  4E 80 00 20 */	blr

.global GXLoadPosMtxImm
GXLoadPosMtxImm:
/* 80286A88 002826E8  3C A0 CC 01 */	lis r5, 0xCC008000@ha
/* 80286A8C 002826EC  38 00 00 10 */	li r0, 0x10
/* 80286A90 002826F0  54 84 10 3A */	slwi r4, r4, 2
/* 80286A94 002826F4  98 05 80 00 */	stb r0, 0xCC008000@l(r5)
/* 80286A98 002826F8  64 80 00 0B */	oris r0, r4, 0xb
/* 80286A9C 002826FC  90 05 80 00 */	stw r0, -0x8000(r5)
/* 80286AA0 00282700  38 85 80 00 */	addi r4, r5, -32768
/* 80286AA4 00282704  E0 A3 00 00 */	psq_l f5, 0(r3), 0, qr0
/* 80286AA8 00282708  E0 83 00 08 */	psq_l f4, 8(r3), 0, qr0
/* 80286AAC 0028270C  E0 63 00 10 */	psq_l f3, 16(r3), 0, qr0
/* 80286AB0 00282710  E0 43 00 18 */	psq_l f2, 24(r3), 0, qr0
/* 80286AB4 00282714  E0 23 00 20 */	psq_l f1, 32(r3), 0, qr0
/* 80286AB8 00282718  E0 03 00 28 */	psq_l f0, 40(r3), 0, qr0
/* 80286ABC 0028271C  F0 A4 00 00 */	psq_st f5, 0(r4), 0, qr0
/* 80286AC0 00282720  F0 84 00 00 */	psq_st f4, 0(r4), 0, qr0
/* 80286AC4 00282724  F0 64 00 00 */	psq_st f3, 0(r4), 0, qr0
/* 80286AC8 00282728  F0 44 00 00 */	psq_st f2, 0(r4), 0, qr0
/* 80286ACC 0028272C  F0 24 00 00 */	psq_st f1, 0(r4), 0, qr0
/* 80286AD0 00282730  F0 04 00 00 */	psq_st f0, 0(r4), 0, qr0
/* 80286AD4 00282734  4E 80 00 20 */	blr

.global GXLoadNrmMtxImm
GXLoadNrmMtxImm:
/* 80286AD8 00282738  54 80 10 3A */	slwi r0, r4, 2
/* 80286ADC 0028273C  3C A0 CC 01 */	lis r5, 0xCC008000@ha
/* 80286AE0 00282740  7C 84 00 50 */	subf r4, r4, r0
/* 80286AE4 00282744  38 00 00 10 */	li r0, 0x10
/* 80286AE8 00282748  38 84 04 00 */	addi r4, r4, 0x400
/* 80286AEC 0028274C  98 05 80 00 */	stb r0, 0xCC008000@l(r5)
/* 80286AF0 00282750  64 80 00 08 */	oris r0, r4, 8
/* 80286AF4 00282754  90 05 80 00 */	stw r0, -0x8000(r5)
/* 80286AF8 00282758  38 85 80 00 */	addi r4, r5, -32768
/* 80286AFC 0028275C  E0 A3 00 00 */	psq_l f5, 0(r3), 0, qr0
/* 80286B00 00282760  C0 83 00 08 */	lfs f4, 8(r3)
/* 80286B04 00282764  E0 63 00 10 */	psq_l f3, 16(r3), 0, qr0
/* 80286B08 00282768  C0 43 00 18 */	lfs f2, 0x18(r3)
/* 80286B0C 0028276C  E0 23 00 20 */	psq_l f1, 32(r3), 0, qr0
/* 80286B10 00282770  C0 03 00 28 */	lfs f0, 0x28(r3)
/* 80286B14 00282774  F0 A4 00 00 */	psq_st f5, 0(r4), 0, qr0
/* 80286B18 00282778  D0 85 80 00 */	stfs f4, -0x8000(r5)
/* 80286B1C 0028277C  F0 64 00 00 */	psq_st f3, 0(r4), 0, qr0
/* 80286B20 00282780  D0 45 80 00 */	stfs f2, -0x8000(r5)
/* 80286B24 00282784  F0 24 00 00 */	psq_st f1, 0(r4), 0, qr0
/* 80286B28 00282788  D0 05 80 00 */	stfs f0, -0x8000(r5)
/* 80286B2C 0028278C  4E 80 00 20 */	blr

.global GXSetCurrentMtx
GXSetCurrentMtx:
/* 80286B30 00282790  80 82 A0 D0 */	lwz r4, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286B34 00282794  80 04 00 80 */	lwz r0, 0x80(r4)
/* 80286B38 00282798  50 60 06 BE */	rlwimi r0, r3, 0, 0x1a, 0x1f
/* 80286B3C 0028279C  90 04 00 80 */	stw r0, 0x80(r4)
/* 80286B40 002827A0  80 04 05 FC */	lwz r0, 0x5fc(r4)
/* 80286B44 002827A4  64 00 04 00 */	oris r0, r0, 0x400
/* 80286B48 002827A8  90 04 05 FC */	stw r0, 0x5fc(r4)
/* 80286B4C 002827AC  4E 80 00 20 */	blr

.global GXLoadTexMtxImm
GXLoadTexMtxImm:
/* 80286B50 002827B0  28 04 00 40 */	cmplwi r4, 0x40
/* 80286B54 002827B4  41 80 00 14 */	blt lbl_80286B68
/* 80286B58 002827B8  38 04 FF C0 */	addi r0, r4, -64
/* 80286B5C 002827BC  54 04 10 3A */	slwi r4, r0, 2
/* 80286B60 002827C0  38 E4 05 00 */	addi r7, r4, 0x500
/* 80286B64 002827C4  48 00 00 08 */	b lbl_80286B6C
lbl_80286B68:
/* 80286B68 002827C8  54 87 10 3A */	slwi r7, r4, 2
lbl_80286B6C:
/* 80286B6C 002827CC  2C 05 00 01 */	cmpwi r5, 1
/* 80286B70 002827D0  40 82 00 0C */	bne lbl_80286B7C
/* 80286B74 002827D4  38 80 00 08 */	li r4, 8
/* 80286B78 002827D8  48 00 00 08 */	b lbl_80286B80
lbl_80286B7C:
/* 80286B7C 002827DC  38 80 00 0C */	li r4, 0xc
lbl_80286B80:
/* 80286B80 002827E0  38 C4 FF FF */	addi r6, r4, -1
/* 80286B84 002827E4  3C 80 CC 01 */	lis r4, 0xCC008000@ha
/* 80286B88 002827E8  38 00 00 10 */	li r0, 0x10
/* 80286B8C 002827EC  2C 05 00 00 */	cmpwi r5, 0
/* 80286B90 002827F0  54 C5 80 1E */	slwi r5, r6, 0x10
/* 80286B94 002827F4  98 04 80 00 */	stb r0, 0xCC008000@l(r4)
/* 80286B98 002827F8  7C E0 2B 78 */	or r0, r7, r5
/* 80286B9C 002827FC  90 04 80 00 */	stw r0, -0x8000(r4)
/* 80286BA0 00282800  40 82 00 3C */	bne lbl_80286BDC
/* 80286BA4 00282804  38 84 80 00 */	addi r4, r4, -32768
/* 80286BA8 00282808  E0 A3 00 00 */	psq_l f5, 0(r3), 0, qr0
/* 80286BAC 0028280C  E0 83 00 08 */	psq_l f4, 8(r3), 0, qr0
/* 80286BB0 00282810  E0 63 00 10 */	psq_l f3, 16(r3), 0, qr0
/* 80286BB4 00282814  E0 43 00 18 */	psq_l f2, 24(r3), 0, qr0
/* 80286BB8 00282818  E0 23 00 20 */	psq_l f1, 32(r3), 0, qr0
/* 80286BBC 0028281C  E0 03 00 28 */	psq_l f0, 40(r3), 0, qr0
/* 80286BC0 00282820  F0 A4 00 00 */	psq_st f5, 0(r4), 0, qr0
/* 80286BC4 00282824  F0 84 00 00 */	psq_st f4, 0(r4), 0, qr0
/* 80286BC8 00282828  F0 64 00 00 */	psq_st f3, 0(r4), 0, qr0
/* 80286BCC 0028282C  F0 44 00 00 */	psq_st f2, 0(r4), 0, qr0
/* 80286BD0 00282830  F0 24 00 00 */	psq_st f1, 0(r4), 0, qr0
/* 80286BD4 00282834  F0 04 00 00 */	psq_st f0, 0(r4), 0, qr0
/* 80286BD8 00282838  4E 80 00 20 */	blr
lbl_80286BDC:
/* 80286BDC 0028283C  38 84 80 00 */	addi r4, r4, -32768
/* 80286BE0 00282840  E0 63 00 00 */	psq_l f3, 0(r3), 0, qr0
/* 80286BE4 00282844  E0 43 00 08 */	psq_l f2, 8(r3), 0, qr0
/* 80286BE8 00282848  E0 23 00 10 */	psq_l f1, 16(r3), 0, qr0
/* 80286BEC 0028284C  E0 03 00 18 */	psq_l f0, 24(r3), 0, qr0
/* 80286BF0 00282850  F0 64 00 00 */	psq_st f3, 0(r4), 0, qr0
/* 80286BF4 00282854  F0 44 00 00 */	psq_st f2, 0(r4), 0, qr0
/* 80286BF8 00282858  F0 24 00 00 */	psq_st f1, 0(r4), 0, qr0
/* 80286BFC 0028285C  F0 04 00 00 */	psq_st f0, 0(r4), 0, qr0
/* 80286C00 00282860  4E 80 00 20 */	blr

.global __GXSetViewport
__GXSetViewport:
/* 80286C04 00282864  80 C2 A0 D0 */	lwz r6, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286C08 00282868  3C 60 00 05 */	lis r3, 0x0005101A@ha
/* 80286C0C 0028286C  C0 C2 A2 08 */	lfs f6, lbl_80642808-_SDA2_BASE_(r2)
/* 80286C10 00282870  3C 80 CC 01 */	lis r4, 0xCC008000@ha
/* 80286C14 00282874  C0 46 05 50 */	lfs f2, 0x550(r6)
/* 80286C18 00282878  38 A0 00 10 */	li r5, 0x10
/* 80286C1C 0028287C  C0 66 05 4C */	lfs f3, 0x54c(r6)
/* 80286C20 00282880  38 03 10 1A */	addi r0, r3, 0x0005101A@l
/* 80286C24 00282884  FC 20 10 50 */	fneg f1, f2
/* 80286C28 00282888  C0 06 05 44 */	lfs f0, 0x544(r6)
/* 80286C2C 0028288C  EC E3 01 B2 */	fmuls f7, f3, f6
/* 80286C30 00282890  C0 86 05 48 */	lfs f4, 0x548(r6)
/* 80286C34 00282894  EC A2 01 B2 */	fmuls f5, f2, f6
/* 80286C38 00282898  C0 66 05 54 */	lfs f3, 0x554(r6)
/* 80286C3C 0028289C  ED 01 01 B2 */	fmuls f8, f1, f6
/* 80286C40 002828A0  C0 46 05 60 */	lfs f2, 0x560(r6)
/* 80286C44 002828A4  C0 26 05 58 */	lfs f1, 0x558(r6)
/* 80286C48 002828A8  EC C0 38 2A */	fadds f6, f0, f7
/* 80286C4C 002828AC  C0 06 05 5C */	lfs f0, 0x55c(r6)
/* 80286C50 002828B0  EC 63 00 B2 */	fmuls f3, f3, f2
/* 80286C54 002828B4  ED 21 00 B2 */	fmuls f9, f1, f2
/* 80286C58 002828B8  98 A4 80 00 */	stb r5, 0xCC008000@l(r4)
/* 80286C5C 002828BC  C0 42 A2 0C */	lfs f2, lbl_8064280C-_SDA2_BASE_(r2)
/* 80286C60 002828C0  EC 24 28 2A */	fadds f1, f4, f5
/* 80286C64 002828C4  90 04 80 00 */	stw r0, -0x8000(r4)
/* 80286C68 002828C8  EC 69 18 28 */	fsubs f3, f9, f3
/* 80286C6C 002828CC  D0 E4 80 00 */	stfs f7, -0x8000(r4)
/* 80286C70 002828D0  EC 82 30 2A */	fadds f4, f2, f6
/* 80286C74 002828D4  EC 22 08 2A */	fadds f1, f2, f1
/* 80286C78 002828D8  D1 04 80 00 */	stfs f8, -0x8000(r4)
/* 80286C7C 002828DC  EC 09 00 2A */	fadds f0, f9, f0
/* 80286C80 002828E0  D0 64 80 00 */	stfs f3, -0x8000(r4)
/* 80286C84 002828E4  D0 84 80 00 */	stfs f4, -0x8000(r4)
/* 80286C88 002828E8  D0 24 80 00 */	stfs f1, -0x8000(r4)
/* 80286C8C 002828EC  D0 04 80 00 */	stfs f0, -0x8000(r4)
/* 80286C90 002828F0  4E 80 00 20 */	blr

.global GXSetViewportJitter
GXSetViewportJitter:
/* 80286C94 002828F4  2C 03 00 00 */	cmpwi r3, 0
/* 80286C98 002828F8  40 82 00 0C */	bne lbl_80286CA4
/* 80286C9C 002828FC  C0 02 A2 08 */	lfs f0, lbl_80642808-_SDA2_BASE_(r2)
/* 80286CA0 00282900  EC 42 00 28 */	fsubs f2, f2, f0
lbl_80286CA4:
/* 80286CA4 00282904  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286CA8 00282908  D0 23 05 44 */	stfs f1, 0x544(r3)
/* 80286CAC 0028290C  D0 43 05 48 */	stfs f2, 0x548(r3)
/* 80286CB0 00282910  D0 63 05 4C */	stfs f3, 0x54c(r3)
/* 80286CB4 00282914  D0 83 05 50 */	stfs f4, 0x550(r3)
/* 80286CB8 00282918  D0 A3 05 54 */	stfs f5, 0x554(r3)
/* 80286CBC 0028291C  D0 C3 05 58 */	stfs f6, 0x558(r3)
/* 80286CC0 00282920  80 03 05 FC */	lwz r0, 0x5fc(r3)
/* 80286CC4 00282924  64 00 10 00 */	oris r0, r0, 0x1000
/* 80286CC8 00282928  90 03 05 FC */	stw r0, 0x5fc(r3)
/* 80286CCC 0028292C  4E 80 00 20 */	blr

.global GXSetViewport
GXSetViewport:
/* 80286CD0 00282930  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286CD4 00282934  D0 23 05 44 */	stfs f1, 0x544(r3)
/* 80286CD8 00282938  D0 43 05 48 */	stfs f2, 0x548(r3)
/* 80286CDC 0028293C  D0 63 05 4C */	stfs f3, 0x54c(r3)
/* 80286CE0 00282940  D0 83 05 50 */	stfs f4, 0x550(r3)
/* 80286CE4 00282944  D0 A3 05 54 */	stfs f5, 0x554(r3)
/* 80286CE8 00282948  D0 C3 05 58 */	stfs f6, 0x558(r3)
/* 80286CEC 0028294C  80 03 05 FC */	lwz r0, 0x5fc(r3)
/* 80286CF0 00282950  64 00 10 00 */	oris r0, r0, 0x1000
/* 80286CF4 00282954  90 03 05 FC */	stw r0, 0x5fc(r3)
/* 80286CF8 00282958  4E 80 00 20 */	blr

.global GXSetScissor
GXSetScissor:
/* 80286CFC 0028295C  81 02 A0 D0 */	lwz r8, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286D00 00282960  38 84 01 56 */	addi r4, r4, 0x156
/* 80286D04 00282964  39 23 01 56 */	addi r9, r3, 0x156
/* 80286D08 00282968  3C E0 CC 01 */	lis r7, 0xCC008000@ha
/* 80286D0C 0028296C  80 08 01 48 */	lwz r0, 0x148(r8)
/* 80286D10 00282970  50 80 05 7E */	rlwimi r0, r4, 0, 0x15, 0x1f
/* 80286D14 00282974  51 20 62 66 */	rlwimi r0, r9, 0xc, 9, 0x13
/* 80286D18 00282978  7C C4 32 14 */	add r6, r4, r6
/* 80286D1C 0028297C  90 08 01 48 */	stw r0, 0x148(r8)
/* 80286D20 00282980  7C 69 2A 14 */	add r3, r9, r5
/* 80286D24 00282984  38 A6 FF FF */	addi r5, r6, -1
/* 80286D28 00282988  38 80 00 61 */	li r4, 0x61
/* 80286D2C 0028298C  80 C8 01 4C */	lwz r6, 0x14c(r8)
/* 80286D30 00282990  38 63 FF FF */	addi r3, r3, -1
/* 80286D34 00282994  50 A6 05 7E */	rlwimi r6, r5, 0, 0x15, 0x1f
/* 80286D38 00282998  38 00 00 00 */	li r0, 0
/* 80286D3C 0028299C  50 66 62 66 */	rlwimi r6, r3, 0xc, 9, 0x13
/* 80286D40 002829A0  90 C8 01 4C */	stw r6, 0x14c(r8)
/* 80286D44 002829A4  98 87 80 00 */	stb r4, 0xCC008000@l(r7)
/* 80286D48 002829A8  80 68 01 48 */	lwz r3, 0x148(r8)
/* 80286D4C 002829AC  90 67 80 00 */	stw r3, -0x8000(r7)
/* 80286D50 002829B0  98 87 80 00 */	stb r4, -0x8000(r7)
/* 80286D54 002829B4  80 68 01 4C */	lwz r3, 0x14c(r8)
/* 80286D58 002829B8  90 67 80 00 */	stw r3, -0x8000(r7)
/* 80286D5C 002829BC  B0 08 00 02 */	sth r0, 2(r8)
/* 80286D60 002829C0  4E 80 00 20 */	blr

.global GXSetScissorBoxOffset
GXSetScissorBoxOffset:
/* 80286D64 002829C4  38 03 01 56 */	addi r0, r3, 0x156
/* 80286D68 002829C8  38 C0 00 00 */	li r6, 0
/* 80286D6C 002829CC  50 06 FD BE */	rlwimi r6, r0, 0x1f, 0x16, 0x1f
/* 80286D70 002829D0  3C A0 CC 01 */	lis r5, 0xCC008000@ha
/* 80286D74 002829D4  38 00 00 61 */	li r0, 0x61
/* 80286D78 002829D8  38 64 01 56 */	addi r3, r4, 0x156
/* 80286D7C 002829DC  98 05 80 00 */	stb r0, 0xCC008000@l(r5)
/* 80286D80 002829E0  50 66 4B 2A */	rlwimi r6, r3, 9, 0xc, 0x15
/* 80286D84 002829E4  38 00 00 59 */	li r0, 0x59
/* 80286D88 002829E8  80 62 A0 D0 */	lwz r3, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286D8C 002829EC  50 06 C0 0E */	rlwimi r6, r0, 0x18, 0, 7
/* 80286D90 002829F0  90 C5 80 00 */	stw r6, -0x8000(r5)
/* 80286D94 002829F4  38 00 00 00 */	li r0, 0
/* 80286D98 002829F8  B0 03 00 02 */	sth r0, 2(r3)
/* 80286D9C 002829FC  4E 80 00 20 */	blr

.global GXSetClipMode
GXSetClipMode:
/* 80286DA0 00282A00  3C C0 CC 01 */	lis r6, 0xCC008000@ha
/* 80286DA4 00282A04  38 00 00 10 */	li r0, 0x10
/* 80286DA8 00282A08  98 06 80 00 */	stb r0, 0xCC008000@l(r6)
/* 80286DAC 00282A0C  38 A0 10 05 */	li r5, 0x1005
/* 80286DB0 00282A10  80 82 A0 D0 */	lwz r4, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286DB4 00282A14  38 00 00 01 */	li r0, 1
/* 80286DB8 00282A18  90 A6 80 00 */	stw r5, -0x8000(r6)
/* 80286DBC 00282A1C  90 66 80 00 */	stw r3, -0x8000(r6)
/* 80286DC0 00282A20  B0 04 00 02 */	sth r0, 2(r4)
/* 80286DC4 00282A24  4E 80 00 20 */	blr

.global __GXSetMatrixIndex
__GXSetMatrixIndex:
/* 80286DC8 00282A28  2C 03 00 05 */	cmpwi r3, 5
/* 80286DCC 00282A2C  40 80 00 40 */	bge lbl_80286E0C
/* 80286DD0 00282A30  3C A0 CC 01 */	lis r5, 0xCC008000@ha
/* 80286DD4 00282A34  38 00 00 08 */	li r0, 8
/* 80286DD8 00282A38  98 05 80 00 */	stb r0, 0xCC008000@l(r5)
/* 80286DDC 00282A3C  38 00 00 30 */	li r0, 0x30
/* 80286DE0 00282A40  80 C2 A0 D0 */	lwz r6, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286DE4 00282A44  38 60 00 10 */	li r3, 0x10
/* 80286DE8 00282A48  98 05 80 00 */	stb r0, -0x8000(r5)
/* 80286DEC 00282A4C  38 00 10 18 */	li r0, 0x1018
/* 80286DF0 00282A50  80 86 00 80 */	lwz r4, 0x80(r6)
/* 80286DF4 00282A54  90 85 80 00 */	stw r4, -0x8000(r5)
/* 80286DF8 00282A58  98 65 80 00 */	stb r3, -0x8000(r5)
/* 80286DFC 00282A5C  90 05 80 00 */	stw r0, -0x8000(r5)
/* 80286E00 00282A60  80 06 00 80 */	lwz r0, 0x80(r6)
/* 80286E04 00282A64  90 05 80 00 */	stw r0, -0x8000(r5)
/* 80286E08 00282A68  48 00 00 3C */	b lbl_80286E44
lbl_80286E0C:
/* 80286E0C 00282A6C  3C A0 CC 01 */	lis r5, 0xCC008000@ha
/* 80286E10 00282A70  38 00 00 08 */	li r0, 8
/* 80286E14 00282A74  98 05 80 00 */	stb r0, 0xCC008000@l(r5)
/* 80286E18 00282A78  38 00 00 40 */	li r0, 0x40
/* 80286E1C 00282A7C  80 C2 A0 D0 */	lwz r6, lbl_806426D0-_SDA2_BASE_(r2)
/* 80286E20 00282A80  38 60 00 10 */	li r3, 0x10
/* 80286E24 00282A84  98 05 80 00 */	stb r0, -0x8000(r5)
/* 80286E28 00282A88  38 00 10 19 */	li r0, 0x1019
/* 80286E2C 00282A8C  80 86 00 84 */	lwz r4, 0x84(r6)
/* 80286E30 00282A90  90 85 80 00 */	stw r4, -0x8000(r5)
/* 80286E34 00282A94  98 65 80 00 */	stb r3, -0x8000(r5)
/* 80286E38 00282A98  90 05 80 00 */	stw r0, -0x8000(r5)
/* 80286E3C 00282A9C  80 06 00 84 */	lwz r0, 0x84(r6)
/* 80286E40 00282AA0  90 05 80 00 */	stw r0, -0x8000(r5)
lbl_80286E44:
/* 80286E44 00282AA4  38 00 00 01 */	li r0, 1
/* 80286E48 00282AA8  B0 06 00 02 */	sth r0, 2(r6)
/* 80286E4C 00282AAC  4E 80 00 20 */	blr