Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/lib/asm/__osExceptionPreamble.s
7858 views
1
.set noat // allow manual use of $at
2
.set noreorder // don't insert nops after branches
3
.set gp=64
4
5
#include "macros.inc"
6
7
.section .text, "ax"
8
9
#ifdef AVOID_UB
10
.set D_80334890, D_80334890_fix
11
#endif
12
13
glabel __osExceptionPreamble
14
lui $k0, %hi(__osException)
15
addiu $k0, %lo(__osException)
16
jr $k0
17
nop
18
19
glabel __osException
20
lui $k0, %hi(gInterruptedThread)
21
addiu $k0, %lo(gInterruptedThread)
22
sd $at, 0x20($k0)
23
mfc0 $k1, $12
24
sw $k1, 0x118($k0)
25
li $at, -4
26
and $k1, $k1, $at
27
mtc0 $k1, $12
28
sd $t0, 0x58($k0)
29
sd $t1, 0x60($k0)
30
sd $t2, 0x68($k0)
31
sw $zero, 0x18($k0)
32
mfc0 $t0, $13
33
#if !defined(VERSION_EU) && !defined(VERSION_SH)
34
andi $t1, $t0, 0x7c
35
li $t2, 0
36
bne $t1, $t2, .L80326750
37
nop
38
and $t1, $k1, $t0
39
andi $t2, $t1, 0x4000
40
beqz $t2, .L80326734
41
nop
42
li $t1, 1
43
lui $at, %hi(D_80334934)
44
b .L80326794
45
sw $t1, %lo(D_80334934)($at)
46
.L80326734:
47
andi $t2, $t1, 0x2000
48
beqz $t2, .L80326750
49
nop
50
li $t1, 1
51
lui $at, %hi(D_80334938)
52
b .L80326794
53
sw $t1, %lo(D_80334938)($at)
54
.L80326750:
55
lui $at, %hi(D_80334934)
56
sw $zero, %lo(D_80334934)($at)
57
lui $at, %hi(D_80334938)
58
#endif
59
move $t0, $k0
60
#if !defined(VERSION_EU) && !defined(VERSION_SH)
61
sw $zero, %lo(D_80334938)($at)
62
#endif
63
lui $k0, %hi(D_80334890 + 0x10)
64
lw $k0, %lo(D_80334890 + 0x10)($k0)
65
ld $t1, 0x20($t0)
66
sd $t1, 0x20($k0)
67
ld $t1, 0x118($t0)
68
sd $t1, 0x118($k0)
69
ld $t1, 0x58($t0)
70
sd $t1, 0x58($k0)
71
ld $t1, 0x60($t0)
72
sd $t1, 0x60($k0)
73
ld $t1, 0x68($t0)
74
sd $t1, 0x68($k0)
75
#if defined(VERSION_EU) || defined(VERSION_SH)
76
lw $k1, 0x118($k0)
77
#else
78
.L80326794:
79
#endif
80
mflo $t0
81
sd $t0, 0x108($k0)
82
mfhi $t0
83
#if defined(VERSION_EU) || defined(VERSION_SH)
84
andi $t1, $k1, 0xff00
85
#endif
86
sd $v0, 0x28($k0)
87
sd $v1, 0x30($k0)
88
sd $a0, 0x38($k0)
89
sd $a1, 0x40($k0)
90
sd $a2, 0x48($k0)
91
sd $a3, 0x50($k0)
92
sd $t3, 0x70($k0)
93
sd $t4, 0x78($k0)
94
sd $t5, 0x80($k0)
95
sd $t6, 0x88($k0)
96
sd $t7, 0x90($k0)
97
sd $s0, 0x98($k0)
98
sd $s1, 0xa0($k0)
99
sd $s2, 0xa8($k0)
100
sd $s3, 0xb0($k0)
101
sd $s4, 0xb8($k0)
102
sd $s5, 0xc0($k0)
103
sd $s6, 0xc8($k0)
104
sd $s7, 0xd0($k0)
105
sd $t8, 0xd8($k0)
106
sd $t9, 0xe0($k0)
107
sd $gp, 0xe8($k0)
108
sd $sp, 0xf0($k0)
109
sd $fp, 0xf8($k0)
110
sd $ra, 0x100($k0)
111
#if defined(VERSION_EU) || defined(VERSION_SH)
112
beqz $t1, .L802F3A18
113
sd $t0, 0x110($k0)
114
lui $t0, %hi(__OSGlobalIntMask)
115
addiu $t0, %lo(__OSGlobalIntMask)
116
lw $t0, ($t0)
117
li $at, -1
118
#ifdef VERSION_EU
119
xor $t0, $t0, $at
120
#else
121
xor $t2, $t0, $at
122
#endif
123
lui $at, (0xFFFF00FF >> 16)
124
#ifdef VERSION_EU
125
andi $t0, $t0, 0xFF00
126
#else
127
andi $t2, $t2, 0xFF00
128
#endif
129
ori $at, (0xFFFF00FF & 0xFFFF)
130
#ifdef VERSION_EU
131
or $t1, $t1, $t0
132
and $k1, $k1, $at
133
or $k1, $k1, $t1
134
sw $k1, 0x118($k0)
135
#else
136
or $t4, $t1, $t2
137
and $t3, $k1, $at
138
andi $t0, $t0, 0xFF00
139
or $t3, $t3, $t4
140
and $t1, $t1, $t0
141
and $k1, $k1, $at
142
sw $t3, 0x118($k0)
143
or $k1, $k1, $t1
144
#endif
145
146
.L802F3A18:
147
lui $t1, %hi(MI_INTR_MASK_REG)
148
lw $t1, %lo(MI_INTR_MASK_REG)($t1)
149
beqz $t1, .L802F3A50
150
nop
151
lui $t0, %hi(__OSGlobalIntMask)
152
addiu $t0, %lo(__OSGlobalIntMask)
153
lw $t0, ($t0)
154
lw $t4, 0x128($k0)
155
li $at, -1
156
srl $t0, $t0, 0x10
157
xor $t0, $t0, $at
158
andi $t0, $t0, 0x3f
159
and $t0, $t0, $t4
160
or $t1, $t1, $t0
161
.L802F3A50:
162
sw $t1, 0x128($k0)
163
#else
164
sd $t0, 0x110($k0)
165
#endif
166
mfc0 $t0, $14
167
sw $t0, 0x11c($k0)
168
lw $t0, 0x18($k0)
169
beqz $t0, .L80326868
170
nop
171
cfc1 $t0, $31
172
nop
173
sw $t0, 0x12c($k0)
174
sdc1 $f0, 0x130($k0)
175
sdc1 $f2, 0x138($k0)
176
sdc1 $f4, 0x140($k0)
177
sdc1 $f6, 0x148($k0)
178
sdc1 $f8, 0x150($k0)
179
sdc1 $f10, 0x158($k0)
180
sdc1 $f12, 0x160($k0)
181
sdc1 $f14, 0x168($k0)
182
sdc1 $f16, 0x170($k0)
183
sdc1 $f18, 0x178($k0)
184
sdc1 $f20, 0x180($k0)
185
sdc1 $f22, 0x188($k0)
186
sdc1 $f24, 0x190($k0)
187
sdc1 $f26, 0x198($k0)
188
sdc1 $f28, 0x1a0($k0)
189
sdc1 $f30, 0x1a8($k0)
190
.L80326868:
191
mfc0 $t0, $13
192
sw $t0, 0x120($k0)
193
#if !defined(VERSION_EU) && !defined(VERSION_SH)
194
lui $t1, %hi(MI_INTR_MASK_REG)
195
lw $t1, %lo(MI_INTR_MASK_REG)($t1)
196
sw $t1, 0x128($k0)
197
#endif
198
li $t1, 2
199
sh $t1, 0x10($k0)
200
#if !defined(VERSION_EU) && !defined(VERSION_SH)
201
lui $t1, %hi(D_80334934)
202
lw $t1, %lo(D_80334934)($t1)
203
beqz $t1, .L803268B4
204
nop
205
lui $t2, %hi(D_C0000008)
206
sw $zero, %lo(D_C0000008)($t2)
207
lui $a0, %hi(D_C0000000)
208
addiu $t2, %lo(D_C0000008)
209
jal kdebugserver
210
lw $a0, %lo(D_C0000000)($a0)
211
b .L80326E08
212
nop
213
.L803268B4:
214
lui $t1, %hi(D_80334938)
215
lw $t1, %lo(D_80334938)($t1)
216
beqz $t1, .L80326900
217
nop
218
lui $t2, %hi(D_C000000C)
219
sw $zero, %lo(D_C000000C)($t2)
220
lui $t1, %hi(D_80334A40)
221
lw $t1, %lo(D_80334A40)($t1)
222
addiu $t2, %lo(D_C000000C)
223
beqz $t1, .L803268E8
224
nop
225
jal send_mesg
226
li $a0, 120
227
.L803268E8:
228
lui $t1, %hi(D_80334A44)
229
lw $t1, %lo(D_80334A44)($t1)
230
lui $at, %hi(D_80334A44)
231
addi $t1, $t1, 1
232
b .L80326E08
233
sw $t1, %lo(D_80334A44)($at)
234
.L80326900:
235
#endif
236
andi $t1, $t0, 0x7c
237
li $t2, 36
238
beq $t1, $t2, .L80326B84
239
nop
240
li $t2, 44
241
beq $t1, $t2, .L80326CCC
242
nop
243
li $t2, 0
244
bne $t1, $t2, .L80326BE8
245
nop
246
and $s0, $k1, $t0
247
.L8032692C:
248
andi $t1, $s0, 0xff00
249
srl $t2, $t1, 0xc
250
bnez $t2, .L80326944
251
nop
252
srl $t2, $t1, 8
253
addi $t2, $t2, 0x10
254
.L80326944:
255
lui $at, %hi(D_80338610)
256
addu $at, $at, $t2
257
lbu $t2, %lo(D_80338610)($at)
258
lui $at, %hi(jtbl_80338630)
259
addu $at, $at, $t2
260
lw $t2, %lo(jtbl_80338630)($at)
261
jr $t2
262
nop
263
#if defined(VERSION_EU) || defined(VERSION_SH)
264
glabel L802F3B28
265
li $at, -8193
266
b .L8032692C
267
and $s0, $s0, $at
268
glabel L802F3B34
269
li $at, -16385
270
b .L8032692C
271
and $s0, $s0, $at
272
#endif
273
glabel L80326964
274
mfc0 $t1, $11
275
mtc0 $t1, $11
276
jal send_mesg
277
li $a0, 24
278
lui $at, (0xFFFF7FFF >> 16)
279
ori $at, (0xFFFF7FFF & 0xFFFF)
280
b .L8032692C
281
and $s0, $s0, $at
282
glabel L80326984
283
#if defined(VERSION_EU) || defined(VERSION_SH)
284
li $at, -2049
285
and $s0, $s0, $at
286
#endif
287
li $t2, 4
288
lui $at, %hi(D_80334920)
289
addu $at, $at, $t2
290
lw $t2, %lo(D_80334920)($at)
291
#if defined(VERSION_EU) || defined(VERSION_SH)
292
lui $sp, %hi(leoDiskStack)
293
addiu $sp, %lo(leoDiskStack)
294
li $a0, 16
295
beqz $t2, .L803269A4
296
addiu $sp, $sp, 0xff0
297
#else
298
beqz $t2, .L803269A4
299
nop
300
#endif
301
jalr $t2
302
nop
303
#if defined(VERSION_EU) || defined(VERSION_SH)
304
beqz $v0, .L803269A4
305
#ifdef VERSION_SH
306
li $a0, 0x10
307
#else
308
nop
309
#endif
310
b .L80326B9C
311
nop
312
#endif
313
.L803269A4:
314
jal send_mesg
315
#if defined(VERSION_EU) || defined(VERSION_SH)
316
nop
317
b .L8032692C
318
nop
319
#else
320
li $a0, 16
321
li $at, -2049
322
b .L8032692C
323
and $s0, $s0, $at
324
#endif
325
glabel L803269B8
326
#if defined(VERSION_EU) || defined(VERSION_SH)
327
lui $t0, %hi(__OSGlobalIntMask)
328
addiu $t0, %lo(__OSGlobalIntMask)
329
lw $t0, ($t0)
330
#endif
331
lui $s1, %hi(MI_INTR_REG)
332
lw $s1, %lo(MI_INTR_REG)($s1)
333
#if defined(VERSION_EU) || defined(VERSION_SH)
334
srl $t0, $t0, 0x10
335
and $s1, $s1, $t0
336
#else
337
andi $s1, $s1, 0x3f
338
#endif
339
andi $t1, $s1, 1
340
beqz $t1, .L80326A18
341
nop
342
lui $t4, %hi(SP_STATUS_REG)
343
lw $t4, %lo(SP_STATUS_REG)($t4)
344
li $t1, 8
345
lui $at, %hi(SP_STATUS_REG)
346
andi $t4, $t4, 0x300
347
andi $s1, $s1, 0x3e
348
beqz $t4, .L80326A08
349
sw $t1, %lo(SP_STATUS_REG)($at)
350
jal send_mesg
351
li $a0, 32
352
beqz $s1, .L80326ADC
353
nop
354
b .L80326A18
355
nop
356
.L80326A08:
357
jal send_mesg
358
li $a0, 88
359
beqz $s1, .L80326ADC
360
nop
361
.L80326A18:
362
andi $t1, $s1, 8
363
beqz $t1, .L80326A3C
364
lui $at, %hi(VI_CURRENT_REG)
365
andi $s1, $s1, 0x37
366
sw $zero, %lo(VI_CURRENT_REG)($at)
367
jal send_mesg
368
li $a0, 56
369
beqz $s1, .L80326ADC
370
nop
371
.L80326A3C:
372
andi $t1, $s1, 4
373
beqz $t1, .L80326A68
374
nop
375
li $t1, 1
376
lui $at, %hi(AI_STATUS_REG)
377
andi $s1, $s1, 0x3b
378
sw $t1, %lo(AI_STATUS_REG)($at)
379
jal send_mesg
380
li $a0, 48
381
beqz $s1, .L80326ADC
382
nop
383
.L80326A68:
384
andi $t1, $s1, 2
385
beqz $t1, .L80326A8C
386
lui $at, %hi(SI_STATUS_REG)
387
andi $s1, $s1, 0x3d
388
sw $zero, %lo(SI_STATUS_REG)($at)
389
jal send_mesg
390
li $a0, 40
391
beqz $s1, .L80326ADC
392
nop
393
.L80326A8C:
394
andi $t1, $s1, 0x10
395
beqz $t1, .L80326AB8
396
nop
397
li $t1, 2
398
lui $at, %hi(PI_STATUS_REG)
399
andi $s1, $s1, 0x2f
400
sw $t1, %lo(PI_STATUS_REG)($at)
401
jal send_mesg
402
li $a0, 64
403
beqz $s1, .L80326ADC
404
nop
405
.L80326AB8:
406
andi $t1, $s1, 0x20
407
beqz $t1, .L80326ADC
408
nop
409
li $t1, 2048
410
lui $at, %hi(MI_MODE_REG)
411
andi $s1, $s1, 0x1f
412
sw $t1, %lo(MI_MODE_REG)($at)
413
jal send_mesg
414
li $a0, 72
415
.L80326ADC:
416
li $at, -1025
417
b .L8032692C
418
and $s0, $s0, $at
419
glabel L80326AE8
420
lw $k1, 0x118($k0)
421
li $at, -4097
422
lui $t1, %hi(D_80334808)
423
and $k1, $k1, $at
424
sw $k1, 0x118($k0)
425
addiu $t1, %lo(D_80334808)
426
lw $t2, ($t1)
427
beqz $t2, .L80326B14
428
li $at, -4097
429
b .L80326B9C
430
and $s0, $s0, $at
431
.L80326B14:
432
li $t2, 1
433
sw $t2, ($t1)
434
jal send_mesg
435
li $a0, 112
436
lui $t2, %hi(D_80334890 + 0x8)
437
lw $t2, %lo(D_80334890 + 0x8)($t2)
438
li $at, -4097
439
and $s0, $s0, $at
440
lw $k1, 0x118($t2)
441
and $k1, $k1, $at
442
b .L80326B9C
443
sw $k1, 0x118($t2)
444
glabel L80326B44
445
li $at, -513
446
and $t0, $t0, $at
447
mtc0 $t0, $13
448
jal send_mesg
449
li $a0, 8
450
li $at, -513
451
b .L8032692C
452
and $s0, $s0, $at
453
glabel L80326B64
454
li $at, -257
455
and $t0, $t0, $at
456
mtc0 $t0, $13
457
jal send_mesg
458
li $a0, 0
459
li $at, -257
460
b .L8032692C
461
and $s0, $s0, $at
462
.L80326B84:
463
li $t1, 1
464
sh $t1, 0x12($k0)
465
jal send_mesg
466
li $a0, 80
467
b .L80326B9C
468
nop
469
470
.L80326B9C:
471
glabel L80326B9C
472
lui $t2, %hi(D_80334890 + 0x8)
473
lw $t2, %lo(D_80334890 + 0x8)($t2)
474
lw $t1, 4($k0)
475
lw $t3, 4($t2)
476
slt $at, $t1, $t3
477
beqz $at, .L80326BD0
478
nop
479
lui $a0, %hi(D_80334890 + 0x8)
480
move $a1, $k0
481
jal __osEnqueueThread
482
addiu $a0, %lo(D_80334890 + 0x8)
483
j __osDispatchThread
484
nop
485
486
.L80326BD0:
487
lui $t1, %hi(D_80334890 + 0x8)
488
addiu $t1, %lo(D_80334890 + 0x8)
489
lw $t2, ($t1)
490
sw $t2, ($k0)
491
j __osDispatchThread
492
sw $k0, ($t1)
493
494
.L80326BE8:
495
glabel L80326BE8
496
lui $at, %hi(D_80334890 + 0x14)
497
sw $k0, %lo(D_80334890 + 0x14)($at)
498
li $t1, 1
499
sh $t1, 0x10($k0)
500
li $t1, 2
501
sh $t1, 0x12($k0)
502
mfc0 $t2, $8
503
sw $t2, 0x124($k0)
504
jal send_mesg
505
li $a0, 96
506
j __osDispatchThread
507
nop
508
509
glabel send_mesg
510
lui $t2, %hi(__osEventStateTab)
511
addiu $t2, %lo(__osEventStateTab)
512
addu $t2, $t2, $a0
513
lw $t1, ($t2)
514
move $s2, $ra
515
beqz $t1, .L80326CC4
516
nop
517
lw $t3, 8($t1)
518
lw $t4, 0x10($t1)
519
slt $at, $t3, $t4
520
beqz $at, .L80326CC4
521
nop
522
lw $t5, 0xc($t1)
523
addu $t5, $t5, $t3
524
div $zero, $t5, $t4
525
bnez $t4, .L80326C60
526
nop
527
break 7
528
.L80326C60:
529
li $at, -1
530
bne $t4, $at, .L80326C78
531
lui $at, 0x8000
532
bne $t5, $at, .L80326C78
533
nop
534
break 6
535
.L80326C78:
536
lw $t4, 0x14($t1)
537
mfhi $t5
538
sll $t5, $t5, 2
539
addu $t4, $t4, $t5
540
lw $t5, 4($t2)
541
addiu $t2, $t3, 1
542
sw $t5, ($t4)
543
sw $t2, 8($t1)
544
lw $t2, ($t1)
545
lw $t3, ($t2)
546
beqz $t3, .L80326CC4
547
nop
548
jal __osPopThread
549
move $a0, $t1
550
move $t2, $v0
551
lui $a0, %hi(D_80334890 + 0x8)
552
move $a1, $t2
553
jal __osEnqueueThread
554
addiu $a0, %lo(D_80334890 + 0x8)
555
.L80326CC4:
556
jr $s2
557
nop
558
.L80326CCC:
559
lui $at, 0x3000
560
and $t1, $t0, $at
561
srl $t1, $t1, 0x1c
562
li $t2, 1
563
bne $t1, $t2, .L80326BE8
564
nop
565
lw $k1, 0x118($k0)
566
lui $at, 0x2000
567
li $t1, 1
568
or $k1, $k1, $at
569
sw $t1, 0x18($k0)
570
b .L80326BD0
571
sw $k1, 0x118($k0)
572
573
574
glabel __osEnqueueAndYield
575
lui $a1, %hi(D_80334890 + 0x10)
576
lw $a1, %lo(D_80334890 + 0x10)($a1)
577
mfc0 $t0, $12
578
lw $k1, 0x18($a1)
579
ori $t0, $t0, 2
580
sw $t0, 0x118($a1)
581
sd $s0, 0x98($a1)
582
sd $s1, 0xa0($a1)
583
sd $s2, 0xa8($a1)
584
sd $s3, 0xb0($a1)
585
sd $s4, 0xb8($a1)
586
sd $s5, 0xc0($a1)
587
sd $s6, 0xc8($a1)
588
sd $s7, 0xd0($a1)
589
sd $gp, 0xe8($a1)
590
sd $sp, 0xf0($a1)
591
sd $fp, 0xf8($a1)
592
sd $ra, 0x100($a1)
593
beqz $k1, .L80326D70
594
sw $ra, 0x11c($a1)
595
cfc1 $k1, $31
596
sdc1 $f20, 0x180($a1)
597
sdc1 $f22, 0x188($a1)
598
sdc1 $f24, 0x190($a1)
599
sdc1 $f26, 0x198($a1)
600
sdc1 $f28, 0x1a0($a1)
601
sdc1 $f30, 0x1a8($a1)
602
sw $k1, 0x12c($a1)
603
604
.L80326D70:
605
#if defined(VERSION_EU) || defined(VERSION_SH)
606
lw $k1, 0x118($a1)
607
andi $t1, $k1, 0xff00
608
beqz $t1, .L802F3FBC
609
nop
610
lui $t0, %hi(__OSGlobalIntMask)
611
addiu $t0, %lo(__OSGlobalIntMask)
612
lw $t0, ($t0)
613
li $at, -1
614
xor $t0, $t0, $at
615
lui $at, (0xFFFF00FF >> 16)
616
andi $t0, $t0, 0xff00
617
ori $at, (0xFFFF00FF & 0xFFFF)
618
or $t1, $t1, $t0
619
and $k1, $k1, $at
620
or $k1, $k1, $t1
621
sw $k1, 0x118($a1)
622
.L802F3FBC:
623
#endif
624
lui $k1, %hi(MI_INTR_MASK_REG)
625
lw $k1, %lo(MI_INTR_MASK_REG)($k1)
626
#if defined(VERSION_EU) || defined(VERSION_SH)
627
beqz $k1, .L802F3FF4
628
nop
629
lui $k0, %hi(__OSGlobalIntMask)
630
addiu $k0, %lo(__OSGlobalIntMask)
631
lw $k0, ($k0)
632
lw $t0, 0x128($a1)
633
li $at, -1
634
srl $k0, $k0, 0x10
635
xor $k0, $k0, $at
636
andi $k0, $k0, 0x3f
637
and $k0, $k0, $t0
638
or $k1, $k1, $k0
639
.L802F3FF4:
640
#endif
641
beqz $a0, .L80326D88
642
sw $k1, 0x128($a1)
643
jal __osEnqueueThread
644
nop
645
.L80326D88:
646
j __osDispatchThread
647
nop
648
649
// enqueue and pop look like compiled functions? but there's no easy way to extract them
650
glabel __osEnqueueThread
651
lw $t8, ($a0)
652
lw $t7, 4($a1)
653
move $t9, $a0
654
lw $t6, 4($t8)
655
slt $at, $t6, $t7
656
bnez $at, .L80326DC4
657
nop
658
.L80326DAC:
659
move $t9, $t8
660
lw $t8, ($t8)
661
lw $t6, 4($t8)
662
slt $at, $t6, $t7
663
beqz $at, .L80326DAC
664
nop
665
.L80326DC4:
666
lw $t8, ($t9)
667
sw $t8, ($a1)
668
sw $a1, ($t9)
669
jr $ra
670
sw $a0, 8($a1)
671
672
glabel __osPopThread
673
lw $v0, ($a0)
674
lw $t9, ($v0)
675
jr $ra
676
sw $t9, ($a0)
677
678
glabel __osDispatchThread
679
lui $a0, %hi(D_80334890 + 0x8)
680
jal __osPopThread
681
addiu $a0, %lo(D_80334890 + 0x8)
682
lui $at, %hi(D_80334890 + 0x10)
683
sw $v0, %lo(D_80334890 + 0x10)($at)
684
li $t0, 4
685
sh $t0, 0x10($v0)
686
move $k0, $v0
687
#if defined(VERSION_EU) || defined(VERSION_SH)
688
lui $t0, %hi(__OSGlobalIntMask)
689
lw $k1, 0x118($k0)
690
addiu $t0, %lo(__OSGlobalIntMask)
691
lw $t0, ($t0)
692
lui $at, (0xFFFF00FF >> 16)
693
andi $t1, $k1, 0xff00
694
ori $at, (0xFFFF00FF & 0xFFFF)
695
andi $t0, $t0, 0xff00
696
and $t1, $t1, $t0
697
and $k1, $k1, $at
698
or $k1, $k1, $t1
699
mtc0 $k1, $12
700
#endif
701
.L80326E08:
702
ld $k1, 0x108($k0)
703
ld $at, 0x20($k0)
704
ld $v0, 0x28($k0)
705
mtlo $k1
706
ld $k1, 0x110($k0)
707
ld $v1, 0x30($k0)
708
ld $a0, 0x38($k0)
709
ld $a1, 0x40($k0)
710
ld $a2, 0x48($k0)
711
ld $a3, 0x50($k0)
712
ld $t0, 0x58($k0)
713
ld $t1, 0x60($k0)
714
ld $t2, 0x68($k0)
715
ld $t3, 0x70($k0)
716
ld $t4, 0x78($k0)
717
ld $t5, 0x80($k0)
718
ld $t6, 0x88($k0)
719
ld $t7, 0x90($k0)
720
ld $s0, 0x98($k0)
721
ld $s1, 0xa0($k0)
722
ld $s2, 0xa8($k0)
723
ld $s3, 0xb0($k0)
724
ld $s4, 0xb8($k0)
725
ld $s5, 0xc0($k0)
726
ld $s6, 0xc8($k0)
727
ld $s7, 0xd0($k0)
728
ld $t8, 0xd8($k0)
729
ld $t9, 0xe0($k0)
730
ld $gp, 0xe8($k0)
731
mthi $k1
732
ld $sp, 0xf0($k0)
733
ld $fp, 0xf8($k0)
734
ld $ra, 0x100($k0)
735
lw $k1, 0x11c($k0)
736
mtc0 $k1, $14
737
#if !defined(VERSION_EU) && !defined(VERSION_SH)
738
lw $k1, 0x118($k0)
739
mtc0 $k1, $12
740
#endif
741
lw $k1, 0x18($k0)
742
beqz $k1, .L80326EF0
743
nop
744
lw $k1, 0x12c($k0)
745
ctc1 $k1, $31
746
ldc1 $f0, 0x130($k0)
747
ldc1 $f2, 0x138($k0)
748
ldc1 $f4, 0x140($k0)
749
ldc1 $f6, 0x148($k0)
750
ldc1 $f8, 0x150($k0)
751
ldc1 $f10, 0x158($k0)
752
ldc1 $f12, 0x160($k0)
753
ldc1 $f14, 0x168($k0)
754
ldc1 $f16, 0x170($k0)
755
ldc1 $f18, 0x178($k0)
756
ldc1 $f20, 0x180($k0)
757
ldc1 $f22, 0x188($k0)
758
ldc1 $f24, 0x190($k0)
759
ldc1 $f26, 0x198($k0)
760
ldc1 $f28, 0x1a0($k0)
761
ldc1 $f30, 0x1a8($k0)
762
.L80326EF0:
763
lw $k1, 0x128($k0)
764
#if defined(VERSION_EU) || defined(VERSION_SH)
765
lui $k0, %hi(__OSGlobalIntMask)
766
addiu $k0, %lo(__OSGlobalIntMask)
767
lw $k0, ($k0)
768
srl $k0, $k0, 0x10
769
and $k1, $k1, $k0
770
#endif
771
sll $k1, $k1, 1
772
lui $k0, %hi(D_803386D0)
773
addiu $k0, %lo(D_803386D0)
774
addu $k1, $k1, $k0
775
lhu $k1, ($k1)
776
lui $k0, %hi(MI_INTR_MASK_REG)
777
addiu $k0, %lo(MI_INTR_MASK_REG)
778
sw $k1, ($k0)
779
nop
780
nop
781
nop
782
nop
783
eret
784
glabel __osCleanupThread
785
jal osDestroyThread
786
move $a0, $zero
787
788
.section .data
789
790
glabel D_80334920
791
.word 0
792
.word 0
793
.word 0
794
.word 0
795
.word 0
796
797
glabel D_80334934
798
.word 0
799
800
glabel D_80334938
801
.word 0
802
.word 0
803
804
.section .rodata
805
806
glabel D_80338610
807
.byte 0x00,0x14,0x18,0x18,0x1C,0x1C,0x1C,0x1C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x04,0x08,0x08,0x0C,0x0C,0x0C,0x0C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10
808
809
glabel jtbl_80338630
810
.word L80326B9C
811
.word L80326B64
812
.word L80326B44
813
.word L803269B8
814
.word L80326984
815
.word L80326AE8
816
#if defined(VERSION_EU) || defined(VERSION_SH)
817
.word L802F3B28
818
.word L802F3B34
819
#else
820
.word L80326BE8
821
.word L80326BE8
822
#endif
823
.word L80326964
824
.word 0
825
.word 0
826
.word 0
827
828