summaryrefslogtreecommitdiff
path: root/asm/Dolphin/os/OSInterrupt.s
blob: 45785868a76fbd7842207cfb08fd1dfb364b5a29 (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
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
.include "macros.inc"

.section .text

.global func_8036ead4
.type func_8036ead4, @function
func_8036ead4:
/* 8036EAD4 7C6000A6 */ mfmsr       r3
/* 8036EAD8 5464045E */ rlwinm      r4, r3, 0, 0x11, 0xf
/* 8036EADC 7C800124 */ mtmsr       r4
/* 8036EAE0 54638FFE */ rlwinm      r3, r3, 0x11, 0x1f, 0x1f
.size func_8036ead4, . - func_8036ead4


.global func_8036eae4
.type func_8036eae4, @function
func_8036eae4:
/* 8036EAE4 4E800020 */ blr         
.size func_8036eae4, . - func_8036eae4


.global func_8036eae8
.type func_8036eae8, @function
func_8036eae8:
/* 8036EAE8 7C6000A6 */ mfmsr       r3
/* 8036EAEC 60648000 */ ori         r4, r3, 0x8000
/* 8036EAF0 7C800124 */ mtmsr       r4
/* 8036EAF4 54638FFE */ rlwinm      r3, r3, 0x11, 0x1f, 0x1f
/* 8036EAF8 4E800020 */ blr         
.size func_8036eae8, . - func_8036eae8


.global func_8036eafc
.type func_8036eafc, @function
func_8036eafc:
/* 8036EAFC 2C030000 */ cmpwi       r3, 0x0
/* 8036EB00 7C8000A6 */ mfmsr       r4
/* 8036EB04 4182000C */ beq-        lbl_8036eb10
/* 8036EB08 60858000 */ ori         r5, r4, 0x8000
/* 8036EB0C 48000008 */ b           lbl_8036eb14
lbl_8036eb10:
/* 8036EB10 5485045E */ rlwinm      r5, r4, 0, 0x11, 0xf
lbl_8036eb14:
/* 8036EB14 7CA00124 */ mtmsr       r5
/* 8036EB18 54838FFE */ rlwinm      r3, r4, 0x11, 0x1f, 0x1f
/* 8036EB1C 4E800020 */ blr         
.size func_8036eafc, . - func_8036eafc


.global func_8036eb20
.type func_8036eb20, @function
func_8036eb20:
/* 8036EB20 7C600734 */ extsh       r0, r3
/* 8036EB24 806DCA48 */ lwz         r3, lbl_805c6868@sda21(0)
/* 8036EB28 5400103A */ slwi        r0, r0, 2
/* 8036EB2C 7CA30214 */ add         r5, r3, r0
/* 8036EB30 80650000 */ lwz         r3, 0(r5)
/* 8036EB34 90850000 */ stw         r4, 0(r5)
/* 8036EB38 4E800020 */ blr         
.size func_8036eb20, . - func_8036eb20


.global func_8036eb3c
.type func_8036eb3c, @function
func_8036eb3c:
/* 8036EB3C 7C600734 */ extsh       r0, r3
/* 8036EB40 806DCA48 */ lwz         r3, lbl_805c6868@sda21(0)
/* 8036EB44 5400103A */ slwi        r0, r0, 2
/* 8036EB48 7C63002E */ lwzx        r3, r3, r0
/* 8036EB4C 4E800020 */ blr         
.size func_8036eb3c, . - func_8036eb3c


.global func_8036eb50
.type func_8036eb50, @function
func_8036eb50:
/* 8036EB50 7C0802A6 */ mflr        r0
/* 8036EB54 90010004 */ stw         r0, 4(r1)
/* 8036EB58 9421FFF0 */ stwu        r1, -0x10(r1)
/* 8036EB5C 93E1000C */ stw         r31, 0xc(r1)
/* 8036EB60 3FE08000 */ lis         r31, 0x8000
/* 8036EB64 381F3040 */ addi        r0, r31, 0x3040
/* 8036EB68 900DCA48 */ stw         r0, lbl_805c6868@sda21(0)
/* 8036EB6C 38800000 */ li          r4, 0x0
/* 8036EB70 38A00080 */ li          r5, 0x80
/* 8036EB74 806DCA48 */ lwz         r3, lbl_805c6868@sda21(0)
/* 8036EB78 4BC9F7BD */ bl          func_8000e334
/* 8036EB7C 38000000 */ li          r0, 0x0
/* 8036EB80 901F00C4 */ stw         r0, 0xc4(r31)
/* 8036EB84 3C60CC00 */ lis         r3, 0xcc00
/* 8036EB88 38833000 */ addi        r4, r3, 0x3000
/* 8036EB8C 901F00C8 */ stw         r0, 0xc8(r31)
/* 8036EB90 380000F0 */ li          r0, 0xf0
/* 8036EB94 3860FFE0 */ li          r3, -0x20
/* 8036EB98 90040004 */ stw         r0, 4(r4)
/* 8036EB9C 48000301 */ bl          func_8036ee9c
/* 8036EBA0 3C608037 */ lis         r3, func_8036f2f0@ha
/* 8036EBA4 3883F2F0 */ addi        r4, r3, func_8036f2f0@l
/* 8036EBA8 38600004 */ li          r3, 0x4
/* 8036EBAC 4BFFDF41 */ bl          func_8036caec
/* 8036EBB0 80010014 */ lwz         r0, 0x14(r1)
/* 8036EBB4 83E1000C */ lwz         r31, 0xc(r1)
/* 8036EBB8 38210010 */ addi        r1, r1, 0x10
/* 8036EBBC 7C0803A6 */ mtlr        r0
/* 8036EBC0 4E800020 */ blr         
.size func_8036eb50, . - func_8036eb50


.global func_8036ebc4
.type func_8036ebc4, @function
func_8036ebc4:
/* 8036EBC4 7C600034 */ cntlzw      r0, r3
/* 8036EBC8 2C00000C */ cmpwi       r0, 0xc
/* 8036EBCC 40800024 */ bge-        lbl_8036ebf0
/* 8036EBD0 2C000008 */ cmpwi       r0, 0x8
/* 8036EBD4 418200FC */ beq-        lbl_8036ecd0
/* 8036EBD8 40800128 */ bge-        lbl_8036ed00
/* 8036EBDC 2C000005 */ cmpwi       r0, 0x5
/* 8036EBE0 4080009C */ bge-        lbl_8036ec7c
/* 8036EBE4 2C000000 */ cmpwi       r0, 0x0
/* 8036EBE8 40800028 */ bge-        lbl_8036ec10
/* 8036EBEC 480002AC */ b           lbl_8036ee98
lbl_8036ebf0:
/* 8036EBF0 2C000011 */ cmpwi       r0, 0x11
/* 8036EBF4 40800010 */ bge-        lbl_8036ec04
/* 8036EBF8 2C00000F */ cmpwi       r0, 0xf
/* 8036EBFC 408001A8 */ bge-        lbl_8036eda4
/* 8036EC00 48000150 */ b           lbl_8036ed50
lbl_8036ec04:
/* 8036EC04 2C00001B */ cmpwi       r0, 0x1b
/* 8036EC08 40800290 */ bge-        lbl_8036ee98
/* 8036EC0C 480001D8 */ b           lbl_8036ede4
lbl_8036ec10:
/* 8036EC10 54800000 */ rlwinm      r0, r4, 0, 0, 0
/* 8036EC14 28000000 */ cmplwi      r0, 0
/* 8036EC18 38A00000 */ li          r5, 0x0
/* 8036EC1C 40820008 */ bne-        lbl_8036ec24
/* 8036EC20 60A50001 */ ori         r5, r5, 1
lbl_8036ec24:
/* 8036EC24 54800042 */ rlwinm      r0, r4, 0, 1, 1
/* 8036EC28 28000000 */ cmplwi      r0, 0
/* 8036EC2C 40820008 */ bne-        lbl_8036ec34
/* 8036EC30 60A50002 */ ori         r5, r5, 2
lbl_8036ec34:
/* 8036EC34 54800084 */ rlwinm      r0, r4, 0, 2, 2
/* 8036EC38 28000000 */ cmplwi      r0, 0
/* 8036EC3C 40820008 */ bne-        lbl_8036ec44
/* 8036EC40 60A50004 */ ori         r5, r5, 4
lbl_8036ec44:
/* 8036EC44 548000C6 */ rlwinm      r0, r4, 0, 3, 3
/* 8036EC48 28000000 */ cmplwi      r0, 0
/* 8036EC4C 40820008 */ bne-        lbl_8036ec54
/* 8036EC50 60A50008 */ ori         r5, r5, 8
lbl_8036ec54:
/* 8036EC54 54800108 */ rlwinm      r0, r4, 0, 4, 4
/* 8036EC58 28000000 */ cmplwi      r0, 0
/* 8036EC5C 40820008 */ bne-        lbl_8036ec64
/* 8036EC60 60A50010 */ ori         r5, r5, 0x10
lbl_8036ec64:
/* 8036EC64 3C80CC00 */ lis         r4, 0xcc00
/* 8036EC68 54A0043E */ clrlwi      r0, r5, 0x10
/* 8036EC6C 38844000 */ addi        r4, r4, 0x4000
/* 8036EC70 B004001C */ sth         r0, 0x1c(r4)
/* 8036EC74 5463017E */ clrlwi      r3, r3, 5
/* 8036EC78 48000220 */ b           lbl_8036ee98
lbl_8036ec7c:
/* 8036EC7C 3CA0CC00 */ lis         r5, 0xcc00
/* 8036EC80 38A55000 */ addi        r5, r5, 0x5000
/* 8036EC84 38A5000A */ addi        r5, r5, 0xa
/* 8036EC88 5480014A */ rlwinm      r0, r4, 0, 5, 5
/* 8036EC8C A0C50000 */ lhz         r6, 0(r5)
/* 8036EC90 28000000 */ cmplwi      r0, 0
/* 8036EC94 54C6076C */ rlwinm      r6, r6, 0, 0x1d, 0x16
/* 8036EC98 40820008 */ bne-        lbl_8036eca0
/* 8036EC9C 60C60010 */ ori         r6, r6, 0x10
lbl_8036eca0:
/* 8036ECA0 5480018C */ rlwinm      r0, r4, 0, 6, 6
/* 8036ECA4 28000000 */ cmplwi      r0, 0
/* 8036ECA8 40820008 */ bne-        lbl_8036ecb0
/* 8036ECAC 60C60040 */ ori         r6, r6, 0x40
lbl_8036ecb0:
/* 8036ECB0 548001CE */ rlwinm      r0, r4, 0, 7, 7
/* 8036ECB4 28000000 */ cmplwi      r0, 0
/* 8036ECB8 40820008 */ bne-        lbl_8036ecc0
/* 8036ECBC 60C60100 */ ori         r6, r6, 0x100
lbl_8036ecc0:
/* 8036ECC0 54C0043E */ clrlwi      r0, r6, 0x10
/* 8036ECC4 B0050000 */ sth         r0, 0(r5)
/* 8036ECC8 54630208 */ rlwinm      r3, r3, 0, 8, 4
/* 8036ECCC 480001CC */ b           lbl_8036ee98
lbl_8036ecd0:
/* 8036ECD0 54800210 */ rlwinm      r0, r4, 0, 8, 8
/* 8036ECD4 3C80CC00 */ lis         r4, 0xcc00
/* 8036ECD8 28000000 */ cmplwi      r0, 0
/* 8036ECDC 80A46C00 */ lwz         r5, 0x6c00(r4)
/* 8036ECE0 3800FFD3 */ li          r0, -0x2d
/* 8036ECE4 7CA50038 */ and         r5, r5, r0
/* 8036ECE8 40820008 */ bne-        lbl_8036ecf0
/* 8036ECEC 60A50004 */ ori         r5, r5, 4
lbl_8036ecf0:
/* 8036ECF0 3C80CC00 */ lis         r4, 0xcc00
/* 8036ECF4 90A46C00 */ stw         r5, 0x6c00(r4)
/* 8036ECF8 5463024E */ rlwinm      r3, r3, 0, 9, 7
/* 8036ECFC 4800019C */ b           lbl_8036ee98
lbl_8036ed00:
/* 8036ED00 54800252 */ rlwinm      r0, r4, 0, 9, 9
/* 8036ED04 3CA0CC00 */ lis         r5, 0xcc00
/* 8036ED08 28000000 */ cmplwi      r0, 0
/* 8036ED0C 80A56800 */ lwz         r5, 0x6800(r5)
/* 8036ED10 3800D3F0 */ li          r0, -0x2c10
/* 8036ED14 7CA50038 */ and         r5, r5, r0
/* 8036ED18 40820008 */ bne-        lbl_8036ed20
/* 8036ED1C 60A50001 */ ori         r5, r5, 1
lbl_8036ed20:
/* 8036ED20 54800294 */ rlwinm      r0, r4, 0, 0xa, 0xa
/* 8036ED24 28000000 */ cmplwi      r0, 0
/* 8036ED28 40820008 */ bne-        lbl_8036ed30
/* 8036ED2C 60A50004 */ ori         r5, r5, 4
lbl_8036ed30:
/* 8036ED30 548002D6 */ rlwinm      r0, r4, 0, 0xb, 0xb
/* 8036ED34 28000000 */ cmplwi      r0, 0
/* 8036ED38 40820008 */ bne-        lbl_8036ed40
/* 8036ED3C 60A50400 */ ori         r5, r5, 0x400
lbl_8036ed40:
/* 8036ED40 3C80CC00 */ lis         r4, 0xcc00
/* 8036ED44 90A46800 */ stw         r5, 0x6800(r4)
/* 8036ED48 54630310 */ rlwinm      r3, r3, 0, 0xc, 8
/* 8036ED4C 4800014C */ b           lbl_8036ee98
lbl_8036ed50:
/* 8036ED50 3CA0CC00 */ lis         r5, 0xcc00
/* 8036ED54 38C56800 */ addi        r6, r5, 0x6800
/* 8036ED58 38C60014 */ addi        r6, r6, 0x14
/* 8036ED5C 54800318 */ rlwinm      r0, r4, 0, 0xc, 0xc
/* 8036ED60 80E60000 */ lwz         r7, 0(r6)
/* 8036ED64 38A0F3F0 */ li          r5, -0xc10
/* 8036ED68 28000000 */ cmplwi      r0, 0
/* 8036ED6C 7CE72838 */ and         r7, r7, r5
/* 8036ED70 40820008 */ bne-        lbl_8036ed78
/* 8036ED74 60E70001 */ ori         r7, r7, 1
lbl_8036ed78:
/* 8036ED78 5480035A */ rlwinm      r0, r4, 0, 0xd, 0xd
/* 8036ED7C 28000000 */ cmplwi      r0, 0
/* 8036ED80 40820008 */ bne-        lbl_8036ed88
/* 8036ED84 60E70004 */ ori         r7, r7, 4
lbl_8036ed88:
/* 8036ED88 5480039C */ rlwinm      r0, r4, 0, 0xe, 0xe
/* 8036ED8C 28000000 */ cmplwi      r0, 0
/* 8036ED90 40820008 */ bne-        lbl_8036ed98
/* 8036ED94 60E70400 */ ori         r7, r7, 0x400
lbl_8036ed98:
/* 8036ED98 90E60000 */ stw         r7, 0(r6)
/* 8036ED9C 546303D6 */ rlwinm      r3, r3, 0, 0xf, 0xb
/* 8036EDA0 480000F8 */ b           lbl_8036ee98
lbl_8036eda4:
/* 8036EDA4 3CA0CC00 */ lis         r5, 0xcc00
/* 8036EDA8 38A56800 */ addi        r5, r5, 0x6800
/* 8036EDAC 38A50028 */ addi        r5, r5, 0x28
/* 8036EDB0 548003DE */ rlwinm      r0, r4, 0, 0xf, 0xf
/* 8036EDB4 80C50000 */ lwz         r6, 0(r5)
/* 8036EDB8 28000000 */ cmplwi      r0, 0
/* 8036EDBC 54C60036 */ rlwinm      r6, r6, 0, 0, 0x1b
/* 8036EDC0 40820008 */ bne-        lbl_8036edc8
/* 8036EDC4 60C60001 */ ori         r6, r6, 1
lbl_8036edc8:
/* 8036EDC8 54800420 */ rlwinm      r0, r4, 0, 0x10, 0x10
/* 8036EDCC 28000000 */ cmplwi      r0, 0
/* 8036EDD0 40820008 */ bne-        lbl_8036edd8
/* 8036EDD4 60C60004 */ ori         r6, r6, 4
lbl_8036edd8:
/* 8036EDD8 90C50000 */ stw         r6, 0(r5)
/* 8036EDDC 5463045C */ rlwinm      r3, r3, 0, 0x11, 0xe
/* 8036EDE0 480000B8 */ b           lbl_8036ee98
lbl_8036ede4:
/* 8036EDE4 54800462 */ rlwinm      r0, r4, 0, 0x11, 0x11
/* 8036EDE8 28000000 */ cmplwi      r0, 0
/* 8036EDEC 38A000F0 */ li          r5, 0xf0
/* 8036EDF0 40820008 */ bne-        lbl_8036edf8
/* 8036EDF4 60A50800 */ ori         r5, r5, 0x800
lbl_8036edf8:
/* 8036EDF8 54800528 */ rlwinm      r0, r4, 0, 0x14, 0x14
/* 8036EDFC 28000000 */ cmplwi      r0, 0
/* 8036EE00 40820008 */ bne-        lbl_8036ee08
/* 8036EE04 60A50008 */ ori         r5, r5, 8
lbl_8036ee08:
/* 8036EE08 5480056A */ rlwinm      r0, r4, 0, 0x15, 0x15
/* 8036EE0C 28000000 */ cmplwi      r0, 0
/* 8036EE10 40820008 */ bne-        lbl_8036ee18
/* 8036EE14 60A50004 */ ori         r5, r5, 4
lbl_8036ee18:
/* 8036EE18 548005AC */ rlwinm      r0, r4, 0, 0x16, 0x16
/* 8036EE1C 28000000 */ cmplwi      r0, 0
/* 8036EE20 40820008 */ bne-        lbl_8036ee28
/* 8036EE24 60A50002 */ ori         r5, r5, 2
lbl_8036ee28:
/* 8036EE28 548005EE */ rlwinm      r0, r4, 0, 0x17, 0x17
/* 8036EE2C 28000000 */ cmplwi      r0, 0
/* 8036EE30 40820008 */ bne-        lbl_8036ee38
/* 8036EE34 60A50001 */ ori         r5, r5, 1
lbl_8036ee38:
/* 8036EE38 54800630 */ rlwinm      r0, r4, 0, 0x18, 0x18
/* 8036EE3C 28000000 */ cmplwi      r0, 0
/* 8036EE40 40820008 */ bne-        lbl_8036ee48
/* 8036EE44 60A50100 */ ori         r5, r5, 0x100
lbl_8036ee48:
/* 8036EE48 54800672 */ rlwinm      r0, r4, 0, 0x19, 0x19
/* 8036EE4C 28000000 */ cmplwi      r0, 0
/* 8036EE50 40820008 */ bne-        lbl_8036ee58
/* 8036EE54 60A51000 */ ori         r5, r5, 0x1000
lbl_8036ee58:
/* 8036EE58 548004A4 */ rlwinm      r0, r4, 0, 0x12, 0x12
/* 8036EE5C 28000000 */ cmplwi      r0, 0
/* 8036EE60 40820008 */ bne-        lbl_8036ee68
/* 8036EE64 60A50200 */ ori         r5, r5, 0x200
lbl_8036ee68:
/* 8036EE68 548004E6 */ rlwinm      r0, r4, 0, 0x13, 0x13
/* 8036EE6C 28000000 */ cmplwi      r0, 0
/* 8036EE70 40820008 */ bne-        lbl_8036ee78
/* 8036EE74 60A50400 */ ori         r5, r5, 0x400
lbl_8036ee78:
/* 8036EE78 548006B4 */ rlwinm      r0, r4, 0, 0x1a, 0x1a
/* 8036EE7C 28000000 */ cmplwi      r0, 0
/* 8036EE80 40820008 */ bne-        lbl_8036ee88
/* 8036EE84 60A52000 */ ori         r5, r5, 0x2000
lbl_8036ee88:
/* 8036EE88 3C80CC00 */ lis         r4, 0xcc00
/* 8036EE8C 38843000 */ addi        r4, r4, 0x3000
/* 8036EE90 90A40004 */ stw         r5, 4(r4)
/* 8036EE94 546306E0 */ rlwinm      r3, r3, 0, 0x1b, 0x10
lbl_8036ee98:
/* 8036EE98 4E800020 */ blr         
.size func_8036ebc4, . - func_8036ebc4


.global func_8036ee9c
.type func_8036ee9c, @function
func_8036ee9c:
/* 8036EE9C 7C0802A6 */ mflr        r0
/* 8036EEA0 90010004 */ stw         r0, 4(r1)
/* 8036EEA4 9421FFE0 */ stwu        r1, -0x20(r1)
/* 8036EEA8 93E1001C */ stw         r31, 0x1c(r1)
/* 8036EEAC 93C10018 */ stw         r30, 0x18(r1)
/* 8036EEB0 93A10014 */ stw         r29, 0x14(r1)
/* 8036EEB4 7C7F1B78 */ mr          r31, r3
/* 8036EEB8 4BFFFC1D */ bl          func_8036ead4
/* 8036EEBC 3C808000 */ lis         r4, 0x8000
/* 8036EEC0 83A400C4 */ lwz         r29, 0xc4(r4)
/* 8036EEC4 7C7E1B78 */ mr          r30, r3
/* 8036EEC8 80A400C8 */ lwz         r5, 0xc8(r4)
/* 8036EECC 7FA02B78 */ or          r0, r29, r5
/* 8036EED0 7FE30078 */ andc        r3, r31, r0
/* 8036EED4 7FFFEB78 */ or          r31, r31, r29
/* 8036EED8 93E400C4 */ stw         r31, 0xc4(r4)
/* 8036EEDC 7FFF2B78 */ or          r31, r31, r5
/* 8036EEE0 48000004 */ b           lbl_8036eee4
lbl_8036eee4:
/* 8036EEE4 48000004 */ b           lbl_8036eee8
lbl_8036eee8:
/* 8036EEE8 4800000C */ b           lbl_8036eef4
lbl_8036eeec:
/* 8036EEEC 7FE4FB78 */ mr          r4, r31
/* 8036EEF0 4BFFFCD5 */ bl          func_8036ebc4
lbl_8036eef4:
/* 8036EEF4 28030000 */ cmplwi      r3, 0
/* 8036EEF8 4082FFF4 */ bne+        lbl_8036eeec
/* 8036EEFC 7FC3F378 */ mr          r3, r30
/* 8036EF00 4BFFFBFD */ bl          func_8036eafc
/* 8036EF04 7FA3EB78 */ mr          r3, r29
/* 8036EF08 80010024 */ lwz         r0, 0x24(r1)
/* 8036EF0C 83E1001C */ lwz         r31, 0x1c(r1)
/* 8036EF10 83C10018 */ lwz         r30, 0x18(r1)
/* 8036EF14 83A10014 */ lwz         r29, 0x14(r1)
/* 8036EF18 38210020 */ addi        r1, r1, 0x20
/* 8036EF1C 7C0803A6 */ mtlr        r0
/* 8036EF20 4E800020 */ blr         
.size func_8036ee9c, . - func_8036ee9c


.global func_8036ef24
.type func_8036ef24, @function
func_8036ef24:
/* 8036EF24 7C0802A6 */ mflr        r0
/* 8036EF28 90010004 */ stw         r0, 4(r1)
/* 8036EF2C 9421FFE0 */ stwu        r1, -0x20(r1)
/* 8036EF30 93E1001C */ stw         r31, 0x1c(r1)
/* 8036EF34 93C10018 */ stw         r30, 0x18(r1)
/* 8036EF38 93A10014 */ stw         r29, 0x14(r1)
/* 8036EF3C 7C7F1B78 */ mr          r31, r3
/* 8036EF40 4BFFFB95 */ bl          func_8036ead4
/* 8036EF44 3C808000 */ lis         r4, 0x8000
/* 8036EF48 83A400C4 */ lwz         r29, 0xc4(r4)
/* 8036EF4C 7C7E1B78 */ mr          r30, r3
/* 8036EF50 80A400C8 */ lwz         r5, 0xc8(r4)
/* 8036EF54 7FA02B78 */ or          r0, r29, r5
/* 8036EF58 7FE30038 */ and         r3, r31, r0
/* 8036EF5C 7FBFF878 */ andc        r31, r29, r31
/* 8036EF60 93E400C4 */ stw         r31, 0xc4(r4)
/* 8036EF64 7FFF2B78 */ or          r31, r31, r5
/* 8036EF68 48000004 */ b           lbl_8036ef6c
lbl_8036ef6c:
/* 8036EF6C 48000004 */ b           lbl_8036ef70
lbl_8036ef70:
/* 8036EF70 4800000C */ b           lbl_8036ef7c
lbl_8036ef74:
/* 8036EF74 7FE4FB78 */ mr          r4, r31
/* 8036EF78 4BFFFC4D */ bl          func_8036ebc4
lbl_8036ef7c:
/* 8036EF7C 28030000 */ cmplwi      r3, 0
/* 8036EF80 4082FFF4 */ bne+        lbl_8036ef74
/* 8036EF84 7FC3F378 */ mr          r3, r30
/* 8036EF88 4BFFFB75 */ bl          func_8036eafc
/* 8036EF8C 7FA3EB78 */ mr          r3, r29
/* 8036EF90 80010024 */ lwz         r0, 0x24(r1)
/* 8036EF94 83E1001C */ lwz         r31, 0x1c(r1)
/* 8036EF98 83C10018 */ lwz         r30, 0x18(r1)
/* 8036EF9C 83A10014 */ lwz         r29, 0x14(r1)
/* 8036EFA0 38210020 */ addi        r1, r1, 0x20
/* 8036EFA4 7C0803A6 */ mtlr        r0
/* 8036EFA8 4E800020 */ blr         
.size func_8036ef24, . - func_8036ef24


.global func_8036efac
.type func_8036efac, @function
func_8036efac:
/* 8036EFAC 7C0802A6 */ mflr        r0
/* 8036EFB0 90010004 */ stw         r0, 4(r1)
/* 8036EFB4 9421FFD8 */ stwu        r1, -0x28(r1)
/* 8036EFB8 93E10024 */ stw         r31, 0x24(r1)
/* 8036EFBC 93C10020 */ stw         r30, 0x20(r1)
/* 8036EFC0 93A1001C */ stw         r29, 0x1c(r1)
/* 8036EFC4 7C9E2378 */ mr          r30, r4
/* 8036EFC8 3C60CC00 */ lis         r3, 0xcc00
/* 8036EFCC 83E33000 */ lwz         r31, 0x3000(r3)
/* 8036EFD0 57FF041C */ rlwinm      r31, r31, 0, 0x10, 0xe
/* 8036EFD4 281F0000 */ cmplwi      r31, 0
/* 8036EFD8 41820018 */ beq-        lbl_8036eff0
/* 8036EFDC 38633000 */ addi        r3, r3, 0x3000
/* 8036EFE0 80030004 */ lwz         r0, 4(r3)
/* 8036EFE4 7FE00038 */ and         r0, r31, r0
/* 8036EFE8 28000000 */ cmplwi      r0, 0
/* 8036EFEC 4082000C */ bne-        lbl_8036eff8
lbl_8036eff0:
/* 8036EFF0 7FC3F378 */ mr          r3, r30
/* 8036EFF4 4BFFF18D */ bl          func_8036e180
lbl_8036eff8:
/* 8036EFF8 57E00630 */ rlwinm      r0, r31, 0, 0x18, 0x18
/* 8036EFFC 28000000 */ cmplwi      r0, 0
/* 8036F000 38000000 */ li          r0, 0x0
/* 8036F004 41820060 */ beq-        lbl_8036f064
/* 8036F008 3C60CC00 */ lis         r3, 0xcc00
/* 8036F00C 38634000 */ addi        r3, r3, 0x4000
/* 8036F010 A083001E */ lhz         r4, 0x1e(r3)
/* 8036F014 548307FE */ clrlwi      r3, r4, 0x1f
/* 8036F018 28030000 */ cmplwi      r3, 0
/* 8036F01C 41820008 */ beq-        lbl_8036f024
/* 8036F020 64008000 */ oris        r0, r0, 0x8000
lbl_8036f024:
/* 8036F024 548307BC */ rlwinm      r3, r4, 0, 0x1e, 0x1e
/* 8036F028 28030000 */ cmplwi      r3, 0
/* 8036F02C 41820008 */ beq-        lbl_8036f034
/* 8036F030 64004000 */ oris        r0, r0, 0x4000
lbl_8036f034:
/* 8036F034 5483077A */ rlwinm      r3, r4, 0, 0x1d, 0x1d
/* 8036F038 28030000 */ cmplwi      r3, 0
/* 8036F03C 41820008 */ beq-        lbl_8036f044
/* 8036F040 64002000 */ oris        r0, r0, 0x2000
lbl_8036f044:
/* 8036F044 54830738 */ rlwinm      r3, r4, 0, 0x1c, 0x1c
/* 8036F048 28030000 */ cmplwi      r3, 0
/* 8036F04C 41820008 */ beq-        lbl_8036f054
/* 8036F050 64001000 */ oris        r0, r0, 0x1000
lbl_8036f054:
/* 8036F054 548306F6 */ rlwinm      r3, r4, 0, 0x1b, 0x1b
/* 8036F058 28030000 */ cmplwi      r3, 0
/* 8036F05C 41820008 */ beq-        lbl_8036f064
/* 8036F060 64000800 */ oris        r0, r0, 0x800
lbl_8036f064:
/* 8036F064 57E30672 */ rlwinm      r3, r31, 0, 0x19, 0x19
/* 8036F068 28030000 */ cmplwi      r3, 0
/* 8036F06C 41820040 */ beq-        lbl_8036f0ac
/* 8036F070 3C60CC00 */ lis         r3, 0xcc00
/* 8036F074 38635000 */ addi        r3, r3, 0x5000
/* 8036F078 A083000A */ lhz         r4, 0xa(r3)
/* 8036F07C 54830738 */ rlwinm      r3, r4, 0, 0x1c, 0x1c
/* 8036F080 28030000 */ cmplwi      r3, 0
/* 8036F084 41820008 */ beq-        lbl_8036f08c
/* 8036F088 64000400 */ oris        r0, r0, 0x400
lbl_8036f08c:
/* 8036F08C 548306B4 */ rlwinm      r3, r4, 0, 0x1a, 0x1a
/* 8036F090 28030000 */ cmplwi      r3, 0
/* 8036F094 41820008 */ beq-        lbl_8036f09c
/* 8036F098 64000200 */ oris        r0, r0, 0x200
lbl_8036f09c:
/* 8036F09C 54830630 */ rlwinm      r3, r4, 0, 0x18, 0x18
/* 8036F0A0 28030000 */ cmplwi      r3, 0
/* 8036F0A4 41820008 */ beq-        lbl_8036f0ac
/* 8036F0A8 64000100 */ oris        r0, r0, 0x100
lbl_8036f0ac:
/* 8036F0AC 57E306B4 */ rlwinm      r3, r31, 0, 0x1a, 0x1a
/* 8036F0B0 28030000 */ cmplwi      r3, 0
/* 8036F0B4 4182001C */ beq-        lbl_8036f0d0
/* 8036F0B8 3C60CC00 */ lis         r3, 0xcc00
/* 8036F0BC 80636C00 */ lwz         r3, 0x6c00(r3)
/* 8036F0C0 54630738 */ rlwinm      r3, r3, 0, 0x1c, 0x1c
/* 8036F0C4 28030000 */ cmplwi      r3, 0
/* 8036F0C8 41820008 */ beq-        lbl_8036f0d0
/* 8036F0CC 64000080 */ oris        r0, r0, 0x80
lbl_8036f0d0:
/* 8036F0D0 57E306F6 */ rlwinm      r3, r31, 0, 0x1b, 0x1b
/* 8036F0D4 28030000 */ cmplwi      r3, 0
/* 8036F0D8 418200A4 */ beq-        lbl_8036f17c
/* 8036F0DC 3C60CC00 */ lis         r3, 0xcc00
/* 8036F0E0 80836800 */ lwz         r4, 0x6800(r3)
/* 8036F0E4 548307BC */ rlwinm      r3, r4, 0, 0x1e, 0x1e
/* 8036F0E8 28030000 */ cmplwi      r3, 0
/* 8036F0EC 41820008 */ beq-        lbl_8036f0f4
/* 8036F0F0 64000040 */ oris        r0, r0, 0x40
lbl_8036f0f4:
/* 8036F0F4 54830738 */ rlwinm      r3, r4, 0, 0x1c, 0x1c
/* 8036F0F8 28030000 */ cmplwi      r3, 0
/* 8036F0FC 41820008 */ beq-        lbl_8036f104
/* 8036F100 64000020 */ oris        r0, r0, 0x20
lbl_8036f104:
/* 8036F104 54830528 */ rlwinm      r3, r4, 0, 0x14, 0x14
/* 8036F108 28030000 */ cmplwi      r3, 0
/* 8036F10C 41820008 */ beq-        lbl_8036f114
/* 8036F110 64000010 */ oris        r0, r0, 0x10
lbl_8036f114:
/* 8036F114 3C60CC00 */ lis         r3, 0xcc00
/* 8036F118 38636800 */ addi        r3, r3, 0x6800
/* 8036F11C 80830014 */ lwz         r4, 0x14(r3)
/* 8036F120 548307BC */ rlwinm      r3, r4, 0, 0x1e, 0x1e
/* 8036F124 28030000 */ cmplwi      r3, 0
/* 8036F128 41820008 */ beq-        lbl_8036f130
/* 8036F12C 64000008 */ oris        r0, r0, 8
lbl_8036f130:
/* 8036F130 54830738 */ rlwinm      r3, r4, 0, 0x1c, 0x1c
/* 8036F134 28030000 */ cmplwi      r3, 0
/* 8036F138 41820008 */ beq-        lbl_8036f140
/* 8036F13C 64000004 */ oris        r0, r0, 4
lbl_8036f140:
/* 8036F140 54830528 */ rlwinm      r3, r4, 0, 0x14, 0x14
/* 8036F144 28030000 */ cmplwi      r3, 0
/* 8036F148 41820008 */ beq-        lbl_8036f150
/* 8036F14C 64000002 */ oris        r0, r0, 2
lbl_8036f150:
/* 8036F150 3C60CC00 */ lis         r3, 0xcc00
/* 8036F154 38636800 */ addi        r3, r3, 0x6800
/* 8036F158 80830028 */ lwz         r4, 0x28(r3)
/* 8036F15C 548307BC */ rlwinm      r3, r4, 0, 0x1e, 0x1e
/* 8036F160 28030000 */ cmplwi      r3, 0
/* 8036F164 41820008 */ beq-        lbl_8036f16c
/* 8036F168 64000001 */ oris        r0, r0, 1
lbl_8036f16c:
/* 8036F16C 54830738 */ rlwinm      r3, r4, 0, 0x1c, 0x1c
/* 8036F170 28030000 */ cmplwi      r3, 0
/* 8036F174 41820008 */ beq-        lbl_8036f17c
/* 8036F178 60008000 */ ori         r0, r0, 0x8000
lbl_8036f17c:
/* 8036F17C 57E304A4 */ rlwinm      r3, r31, 0, 0x12, 0x12
/* 8036F180 28030000 */ cmplwi      r3, 0
/* 8036F184 41820008 */ beq-        lbl_8036f18c
/* 8036F188 60000020 */ ori         r0, r0, 0x20
lbl_8036f18c:
/* 8036F18C 57E304E6 */ rlwinm      r3, r31, 0, 0x13, 0x13
/* 8036F190 28030000 */ cmplwi      r3, 0
/* 8036F194 41820008 */ beq-        lbl_8036f19c
/* 8036F198 60000040 */ ori         r0, r0, 0x40
lbl_8036f19c:
/* 8036F19C 57E3056A */ rlwinm      r3, r31, 0, 0x15, 0x15
/* 8036F1A0 28030000 */ cmplwi      r3, 0
/* 8036F1A4 41820008 */ beq-        lbl_8036f1ac
/* 8036F1A8 60001000 */ ori         r0, r0, 0x1000
lbl_8036f1ac:
/* 8036F1AC 57E305AC */ rlwinm      r3, r31, 0, 0x16, 0x16
/* 8036F1B0 28030000 */ cmplwi      r3, 0
/* 8036F1B4 41820008 */ beq-        lbl_8036f1bc
/* 8036F1B8 60002000 */ ori         r0, r0, 0x2000
lbl_8036f1bc:
/* 8036F1BC 57E305EE */ rlwinm      r3, r31, 0, 0x17, 0x17
/* 8036F1C0 28030000 */ cmplwi      r3, 0
/* 8036F1C4 41820008 */ beq-        lbl_8036f1cc
/* 8036F1C8 60000080 */ ori         r0, r0, 0x80
lbl_8036f1cc:
/* 8036F1CC 57E30738 */ rlwinm      r3, r31, 0, 0x1c, 0x1c
/* 8036F1D0 28030000 */ cmplwi      r3, 0
/* 8036F1D4 41820008 */ beq-        lbl_8036f1dc
/* 8036F1D8 60000800 */ ori         r0, r0, 0x800
lbl_8036f1dc:
/* 8036F1DC 57E3077A */ rlwinm      r3, r31, 0, 0x1d, 0x1d
/* 8036F1E0 28030000 */ cmplwi      r3, 0
/* 8036F1E4 41820008 */ beq-        lbl_8036f1ec
/* 8036F1E8 60000400 */ ori         r0, r0, 0x400
lbl_8036f1ec:
/* 8036F1EC 57E307BC */ rlwinm      r3, r31, 0, 0x1e, 0x1e
/* 8036F1F0 28030000 */ cmplwi      r3, 0
/* 8036F1F4 41820008 */ beq-        lbl_8036f1fc
/* 8036F1F8 60000200 */ ori         r0, r0, 0x200
lbl_8036f1fc:
/* 8036F1FC 57E30528 */ rlwinm      r3, r31, 0, 0x14, 0x14
/* 8036F200 28030000 */ cmplwi      r3, 0
/* 8036F204 41820008 */ beq-        lbl_8036f20c
/* 8036F208 60004000 */ ori         r0, r0, 0x4000
lbl_8036f20c:
/* 8036F20C 57E307FE */ clrlwi      r3, r31, 0x1f
/* 8036F210 28030000 */ cmplwi      r3, 0
/* 8036F214 41820008 */ beq-        lbl_8036f21c
/* 8036F218 60000100 */ ori         r0, r0, 0x100
lbl_8036f21c:
/* 8036F21C 3C608000 */ lis         r3, 0x8000
/* 8036F220 808300C4 */ lwz         r4, 0xc4(r3)
/* 8036F224 806300C8 */ lwz         r3, 0xc8(r3)
/* 8036F228 7C831B78 */ or          r3, r4, r3
/* 8036F22C 7C041878 */ andc        r4, r0, r3
/* 8036F230 28040000 */ cmplwi      r4, 0
/* 8036F234 41820098 */ beq-        lbl_8036f2cc
/* 8036F238 3C60804F */ lis         r3, lbl_804ef518@ha
/* 8036F23C 3803F518 */ addi        r0, r3, lbl_804ef518@l
/* 8036F240 7C030378 */ mr          r3, r0
/* 8036F244 48000004 */ b           lbl_8036f248
lbl_8036f248:
/* 8036F248 48000004 */ b           lbl_8036f24c
lbl_8036f24c:
/* 8036F24C 80030000 */ lwz         r0, 0(r3)
/* 8036F250 7C800038 */ and         r0, r4, r0
/* 8036F254 28000000 */ cmplwi      r0, 0
/* 8036F258 41820010 */ beq-        lbl_8036f268
/* 8036F25C 7C000034 */ cntlzw      r0, r0
/* 8036F260 7C1D0734 */ extsh       r29, r0
/* 8036F264 4800000C */ b           lbl_8036f270
lbl_8036f268:
/* 8036F268 38630004 */ addi        r3, r3, 0x4
/* 8036F26C 4BFFFFE0 */ b           lbl_8036f24c
lbl_8036f270:
/* 8036F270 806DCA48 */ lwz         r3, lbl_805c6868@sda21(0)
/* 8036F274 57A0103A */ slwi        r0, r29, 2
/* 8036F278 7FE3002E */ lwzx        r31, r3, r0
/* 8036F27C 281F0000 */ cmplwi      r31, 0
/* 8036F280 4182004C */ beq-        lbl_8036f2cc
/* 8036F284 2C1D0004 */ cmpwi       r29, 0x4
/* 8036F288 4081001C */ ble-        lbl_8036f2a4
/* 8036F28C B3ADCA50 */ sth         r29, lbl_805c6870@sda21(0)
/* 8036F290 48003535 */ bl          func_803727c4
/* 8036F294 908DCA5C */ stw         r4, lbl_805c687c@sda21(0)
/* 8036F298 906DCA58 */ stw         r3, lbl_805c6878@sda21(0)
/* 8036F29C 801E0198 */ lwz         r0, 0x198(r30)
/* 8036F2A0 900DCA4C */ stw         r0, lbl_805c686c@sda21(0)
lbl_8036f2a4:
/* 8036F2A4 48002511 */ bl          func_803717b4
/* 8036F2A8 7FA3EB78 */ mr          r3, r29
/* 8036F2AC 7FC4F378 */ mr          r4, r30
/* 8036F2B0 7FECFB78 */ mr          r12, r31
/* 8036F2B4 7D8803A6 */ mtlr        r12
/* 8036F2B8 4E800021 */ blrl        
/* 8036F2BC 48002539 */ bl          func_803717f4
/* 8036F2C0 48002A29 */ bl          func_80371ce8
/* 8036F2C4 7FC3F378 */ mr          r3, r30
/* 8036F2C8 4BFFEEB9 */ bl          func_8036e180
lbl_8036f2cc:
/* 8036F2CC 7FC3F378 */ mr          r3, r30
/* 8036F2D0 4BFFEEB1 */ bl          func_8036e180
/* 8036F2D4 8001002C */ lwz         r0, 0x2c(r1)
/* 8036F2D8 83E10024 */ lwz         r31, 0x24(r1)
/* 8036F2DC 83C10020 */ lwz         r30, 0x20(r1)
/* 8036F2E0 83A1001C */ lwz         r29, 0x1c(r1)
/* 8036F2E4 38210028 */ addi        r1, r1, 0x28
/* 8036F2E8 7C0803A6 */ mtlr        r0
/* 8036F2EC 4E800020 */ blr         
.size func_8036efac, . - func_8036efac


.global func_8036f2f0
.type func_8036f2f0, @function
func_8036f2f0:
/* 8036F2F0 90040000 */ stw         r0, 0(r4)
/* 8036F2F4 90240004 */ stw         r1, 4(r4)
/* 8036F2F8 90440008 */ stw         r2, 8(r4)
/* 8036F2FC BCC40018 */ stmw        r6, 0x18(r4)
/* 8036F300 7C11E2A6 */ mfspr       r0, 0x391
/* 8036F304 900401A8 */ stw         r0, 0x1a8(r4)
/* 8036F308 7C12E2A6 */ mfspr       r0, 0x392
/* 8036F30C 900401AC */ stw         r0, 0x1ac(r4)
/* 8036F310 7C13E2A6 */ mfspr       r0, 0x393
/* 8036F314 900401B0 */ stw         r0, 0x1b0(r4)
/* 8036F318 7C14E2A6 */ mfspr       r0, 0x394
/* 8036F31C 900401B4 */ stw         r0, 0x1b4(r4)
/* 8036F320 7C15E2A6 */ mfspr       r0, 0x395
/* 8036F324 900401B8 */ stw         r0, 0x1b8(r4)
/* 8036F328 7C16E2A6 */ mfspr       r0, 0x396
/* 8036F32C 900401BC */ stw         r0, 0x1bc(r4)
/* 8036F330 7C17E2A6 */ mfspr       r0, 0x397
/* 8036F334 900401C0 */ stw         r0, 0x1c0(r4)
/* 8036F338 9421FFF8 */ stwu        r1, -8(r1)
/* 8036F33C 4BFFFC70 */ b           func_8036efac
.size func_8036f2f0, . - func_8036f2f0