banjo-kazooie/asm/ultra/exceptasm.s

709 lines
34 KiB
ArmAsm

#include <sys/asm.h>
#include <PR/rcp.h>
.include "macro.inc"
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64 # allow use of 64-bit general purpose registers
.data
EXPORT(__osHwIntTable)
.word 0x0, 0x0, 0x0, 0x0, 0x0
.rdata
#define REDISPATCH 0x00
#define SW1 0x04
#define SW2 0x08
#define RCP 0x0c
#define CART 0x10
#define PRENMI 0x14
#define IP6_HDLR 0x18
#define IP7_HDLR 0x1c
#define COUNTER 0x20
__osIntOffTable:
.byte REDISPATCH
.byte PRENMI
.byte IP6_HDLR
.byte IP6_HDLR
.byte IP7_HDLR
.byte IP7_HDLR
.byte IP7_HDLR
.byte IP7_HDLR
.byte COUNTER
.byte COUNTER
.byte IP6_HDLR
.byte IP6_HDLR
.byte IP7_HDLR
.byte IP7_HDLR
.byte IP7_HDLR
.byte IP7_HDLR
.byte REDISPATCH
.byte SW1
.byte SW2
.byte SW2
.byte RCP
.byte RCP
.byte RCP
.byte RCP
.byte CART
.byte CART
.byte CART
.byte CART
.byte CART
.byte CART
.byte CART
.byte CART
__osIntTable:
.word redispatch, sw1, sw2, rcp, cart, prenmi, IP6_Hdlr, IP7_Hdlr, counter
.text
glabel __osExceptionPreamble
/* 2E60 80002260 3C1A8000 */ lui $k0, %hi(__osException)
/* 2E64 80002264 275A2280 */ addiu $k0, $k0, %lo(__osException)
/* 2E68 80002268 03400008 */ jr $k0
/* 2E6C 8000226C 00000000 */ nop
endlabel __osExceptionPreamble
# What is this?
glabel __osExceptionPreamble2
/* 2E70 80002270 3C1A8000 */ lui $k0, %hi(__osException)
/* 2E74 80002274 275A2280 */ addiu $k0, $k0, %lo(__osException)
/* 2E78 80002278 03400008 */ jr $k0
/* 2E7C 8000227C 00000000 */ nop
endlabel __osExceptionPreamble2
glabel __osException
/* 2E80 80002280 3C1A8000 */ lui $k0, %hi(__osThreadSave)
/* 2E84 80002284 275A72C0 */ addiu $k0, $k0, %lo(__osThreadSave)
/* 2E88 80002288 FF410020 */ sd $at, 0x20($k0)
/* 2E8C 8000228C 401B6000 */ mfc0 $k1, $12
/* 2E90 80002290 AF5B0118 */ sw $k1, 0x118($k0)
/* 2E94 80002294 2401FFFC */ addiu $at, $zero, -4
/* 2E98 80002298 0361D824 */ and $k1, $k1, $at
/* 2E9C 8000229C 409B6000 */ mtc0 $k1, $12
/* 2EA0 800022A0 FF480058 */ sd $t0, 0x58($k0)
/* 2EA4 800022A4 FF490060 */ sd $t1, 0x60($k0)
/* 2EA8 800022A8 FF4A0068 */ sd $t2, 0x68($k0)
/* 2EAC 800022AC AF400018 */ sw $zero, 0x18($k0)
/* 2EB0 800022B0 40086800 */ mfc0 $t0, $13
/* 2EB4 800022B4 03404025 */ or $t0, $k0, $zero
/* 2EB8 800022B8 3C1A8000 */ lui $k0, %hi(__osRunningThread)
/* 2EBC 800022BC 8F5A5130 */ lw $k0, %lo(__osRunningThread)($k0)
/* 2EC0 800022C0 DD090020 */ ld $t1, 0x20($t0)
/* 2EC4 800022C4 FF490020 */ sd $t1, 0x20($k0)
/* 2EC8 800022C8 DD090118 */ ld $t1, 0x118($t0)
/* 2ECC 800022CC FF490118 */ sd $t1, 0x118($k0)
/* 2ED0 800022D0 DD090058 */ ld $t1, 0x58($t0)
/* 2ED4 800022D4 FF490058 */ sd $t1, 0x58($k0)
/* 2ED8 800022D8 DD090060 */ ld $t1, 0x60($t0)
/* 2EDC 800022DC FF490060 */ sd $t1, 0x60($k0)
/* 2EE0 800022E0 DD090068 */ ld $t1, 0x68($t0)
/* 2EE4 800022E4 FF490068 */ sd $t1, 0x68($k0)
/* 2EE8 800022E8 8F5B0118 */ lw $k1, 0x118($k0)
/* 2EEC 800022EC 00004012 */ mflo $t0
/* 2EF0 800022F0 FF480108 */ sd $t0, 0x108($k0)
/* 2EF4 800022F4 00004010 */ mfhi $t0
/* 2EF8 800022F8 3369FF00 */ andi $t1, $k1, 0xff00
/* 2EFC 800022FC FF420028 */ sd $v0, 0x28($k0)
/* 2F00 80002300 FF430030 */ sd $v1, 0x30($k0)
/* 2F04 80002304 FF440038 */ sd $a0, 0x38($k0)
/* 2F08 80002308 FF450040 */ sd $a1, 0x40($k0)
/* 2F0C 8000230C FF460048 */ sd $a2, 0x48($k0)
/* 2F10 80002310 FF470050 */ sd $a3, 0x50($k0)
/* 2F14 80002314 FF4B0070 */ sd $t3, 0x70($k0)
/* 2F18 80002318 FF4C0078 */ sd $t4, 0x78($k0)
/* 2F1C 8000231C FF4D0080 */ sd $t5, 0x80($k0)
/* 2F20 80002320 FF4E0088 */ sd $t6, 0x88($k0)
/* 2F24 80002324 FF4F0090 */ sd $t7, 0x90($k0)
/* 2F28 80002328 FF500098 */ sd $s0, 0x98($k0)
/* 2F2C 8000232C FF5100A0 */ sd $s1, 0xa0($k0)
/* 2F30 80002330 FF5200A8 */ sd $s2, 0xa8($k0)
/* 2F34 80002334 FF5300B0 */ sd $s3, 0xb0($k0)
/* 2F38 80002338 FF5400B8 */ sd $s4, 0xb8($k0)
/* 2F3C 8000233C FF5500C0 */ sd $s5, 0xc0($k0)
/* 2F40 80002340 FF5600C8 */ sd $s6, 0xc8($k0)
/* 2F44 80002344 FF5700D0 */ sd $s7, 0xd0($k0)
/* 2F48 80002348 FF5800D8 */ sd $t8, 0xd8($k0)
/* 2F4C 8000234C FF5900E0 */ sd $t9, 0xe0($k0)
/* 2F50 80002350 FF5C00E8 */ sd $gp, 0xe8($k0)
/* 2F54 80002354 FF5D00F0 */ sd $sp, 0xf0($k0)
/* 2F58 80002358 FF5E00F8 */ sd $fp, 0xf8($k0)
/* 2F5C 8000235C FF5F0100 */ sd $ra, 0x100($k0)
/* 2F60 80002360 1120000D */ beqz $t1, .L80002398
/* 2F64 80002364 FF480110 */ sd $t0, 0x110($k0)
/* 2F68 80002368 3C088000 */ lui $t0, %hi(__OSGlobalIntMask)
/* 2F6C 8000236C 250850F0 */ addiu $t0, $t0, %lo(__OSGlobalIntMask)
/* 2F70 80002370 8D080000 */ lw $t0, ($t0)
/* 2F74 80002374 2401FFFF */ addiu $at, $zero, -1
/* 2F78 80002378 01014026 */ xor $t0, $t0, $at
/* 2F7C 8000237C 3C01FFFF */ lui $at, 0xffff
/* 2F80 80002380 3108FF00 */ andi $t0, $t0, 0xff00
/* 2F84 80002384 342100FF */ ori $at, $at, 0xff
/* 2F88 80002388 01284825 */ or $t1, $t1, $t0
/* 2F8C 8000238C 0361D824 */ and $k1, $k1, $at
/* 2F90 80002390 0369D825 */ or $k1, $k1, $t1
/* 2F94 80002394 AF5B0118 */ sw $k1, 0x118($k0)
.L80002398:
/* 2F98 80002398 3C09A430 */ lui $t1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
/* 2F9C 8000239C 8D29000C */ lw $t1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t1)
/* 2FA0 800023A0 5120000C */ beql $t1, $zero, .L800023D4
/* 2FA4 800023A4 AF490128 */ sw $t1, 0x128($k0)
/* 2FA8 800023A8 3C088000 */ lui $t0, %hi(__OSGlobalIntMask)
/* 2FAC 800023AC 250850F0 */ addiu $t0, $t0, %lo(__OSGlobalIntMask)
/* 2FB0 800023B0 8D080000 */ lw $t0, ($t0)
/* 2FB4 800023B4 8F4C0128 */ lw $t4, 0x128($k0)
/* 2FB8 800023B8 2401FFFF */ addiu $at, $zero, -1
/* 2FBC 800023BC 00084402 */ srl $t0, $t0, 0x10
/* 2FC0 800023C0 01014026 */ xor $t0, $t0, $at
/* 2FC4 800023C4 3108003F */ andi $t0, $t0, 0x3f
/* 2FC8 800023C8 010C4024 */ and $t0, $t0, $t4
/* 2FCC 800023CC 01284825 */ or $t1, $t1, $t0
/* 2FD0 800023D0 AF490128 */ sw $t1, 0x128($k0)
.L800023D4:
/* 2FD4 800023D4 40087000 */ mfc0 $t0, $14
/* 2FD8 800023D8 AF48011C */ sw $t0, 0x11c($k0)
/* 2FDC 800023DC 8F480018 */ lw $t0, 0x18($k0)
/* 2FE0 800023E0 11000014 */ beqz $t0, .L80002434
/* 2FE4 800023E4 00000000 */ nop
/* 2FE8 800023E8 4448F800 */ cfc1 $t0, $31
/* 2FEC 800023EC 00000000 */ nop
/* 2FF0 800023F0 AF48012C */ sw $t0, 0x12c($k0)
/* 2FF4 800023F4 F7400130 */ sdc1 $f0, 0x130($k0)
/* 2FF8 800023F8 F7420138 */ sdc1 $f2, 0x138($k0)
/* 2FFC 800023FC F7440140 */ sdc1 $f4, 0x140($k0)
/* 3000 80002400 F7460148 */ sdc1 $f6, 0x148($k0)
/* 3004 80002404 F7480150 */ sdc1 $f8, 0x150($k0)
/* 3008 80002408 F74A0158 */ sdc1 $f10, 0x158($k0)
/* 300C 8000240C F74C0160 */ sdc1 $f12, 0x160($k0)
/* 3010 80002410 F74E0168 */ sdc1 $f14, 0x168($k0)
/* 3014 80002414 F7500170 */ sdc1 $f16, 0x170($k0)
/* 3018 80002418 F7520178 */ sdc1 $f18, 0x178($k0)
/* 301C 8000241C F7540180 */ sdc1 $f20, 0x180($k0)
/* 3020 80002420 F7560188 */ sdc1 $f22, 0x188($k0)
/* 3024 80002424 F7580190 */ sdc1 $f24, 0x190($k0)
/* 3028 80002428 F75A0198 */ sdc1 $f26, 0x198($k0)
/* 302C 8000242C F75C01A0 */ sdc1 $f28, 0x1a0($k0)
/* 3030 80002430 F75E01A8 */ sdc1 $f30, 0x1a8($k0)
.L80002434:
/* 3034 80002434 40086800 */ mfc0 $t0, $13
/* 3038 80002438 AF480120 */ sw $t0, 0x120($k0)
/* 303C 8000243C 24090002 */ addiu $t1, $zero, 2
/* 3040 80002440 A7490010 */ sh $t1, 0x10($k0)
/* 3044 80002444 3109007C */ andi $t1, $t0, 0x7c
/* 3048 80002448 240A0024 */ addiu $t2, $zero, 0x24
/* 304C 8000244C 512A00B1 */ beql $t1, $t2, handle_break
/* 3050 80002450 24090001 */ addiu $t1, $zero, 1
/* 3054 80002454 240A002C */ addiu $t2, $zero, 0x2c
/* 3058 80002458 112A00FF */ beq $t1, $t2, handle_CpU
/* 305C 8000245C 00000000 */ nop
/* 3060 80002460 240A0000 */ addiu $t2, $zero, 0
/* 3064 80002464 152A00C3 */ bne $t1, $t2, .L80002774
/* 3068 80002468 00000000 */ nop
/* 306C 8000246C 03688024 */ and $s0, $k1, $t0
next_interrupt:
/* 3070 80002470 3209FF00 */ andi $t1, $s0, 0xff00
/* 3074 80002474 00095302 */ srl $t2, $t1, 0xc
/* 3078 80002478 15400003 */ bnez $t2, .L80002488
/* 307C 8000247C 00000000 */ nop
/* 3080 80002480 00095202 */ srl $t2, $t1, 8
/* 3084 80002484 214A0010 */ addi $t2, $t2, 0x10
.L80002488:
/* 3088 80002488 3C018000 */ lui $at, %hi(__osIntOffTable)
/* 308C 8000248C 002A0821 */ addu $at, $at, $t2
/* 3090 80002490 902A5180 */ lbu $t2, %lo(__osIntOffTable)($at)
/* 3094 80002494 3C018000 */ lui $at, %hi(__osIntTable)
/* 3098 80002498 002A0821 */ addu $at, $at, $t2
/* 309C 8000249C 8C2A51A0 */ lw $t2, %lo(__osIntTable)($at)
/* 30A0 800024A0 01400008 */ jr $t2
/* 30A4 800024A4 00000000 */ nop
IP6_Hdlr:
/* 30A8 800024A8 2401DFFF */ addiu $at, $zero, -0x2001
/* 30AC 800024AC 1000FFF0 */ b next_interrupt
/* 30B0 800024B0 02018024 */ and $s0, $s0, $at
IP7_Hdlr:
/* 30B4 800024B4 2401BFFF */ addiu $at, $zero, -0x4001
/* 30B8 800024B8 1000FFED */ b next_interrupt
/* 30BC 800024BC 02018024 */ and $s0, $s0, $at
counter:
/* 30C0 800024C0 40095800 */ mfc0 $t1, $11
/* 30C4 800024C4 40895800 */ mtc0 $t1, $11
/* 30C8 800024C8 0C0009E9 */ jal send_mesg
/* 30CC 800024CC 24040018 */ addiu $a0, $zero, 0x18
/* 30D0 800024D0 3C01FFFF */ lui $at, 0xffff
/* 30D4 800024D4 34217FFF */ ori $at, $at, 0x7fff
/* 30D8 800024D8 1000FFE5 */ b next_interrupt
/* 30DC 800024DC 02018024 */ and $s0, $s0, $at
cart:
/* 30E0 800024E0 2401F7FF */ addiu $at, $zero, -0x801
/* 30E4 800024E4 02018024 */ and $s0, $s0, $at
/* 30E8 800024E8 240A0004 */ addiu $t2, $zero, 4
/* 30EC 800024EC 3C018000 */ lui $at, %hi(__osHwIntTable)
/* 30F0 800024F0 002A0821 */ addu $at, $at, $t2
/* 30F4 800024F4 8C2A5100 */ lw $t2, %lo(__osHwIntTable)($at)
/* 30F8 800024F8 3C1D8000 */ lui $sp, %hi(leoDiskStack)
/* 30FC 800024FC 27BD7470 */ addiu $sp, $sp, %lo(leoDiskStack)
/* 3100 80002500 24040010 */ addiu $a0, $zero, 0x10
/* 3104 80002504 11400007 */ beqz $t2, .L80002524
/* 3108 80002508 27BD0FF0 */ addiu $sp, $sp, 0xff0
/* 310C 8000250C 0140F809 */ jalr $t2
/* 3110 80002510 00000000 */ nop
/* 3114 80002514 10400003 */ beqz $v0, .L80002524
/* 3118 80002518 00000000 */ nop
/* 311C 8000251C 10000082 */ b redispatch
/* 3120 80002520 00000000 */ nop
.L80002524:
/* 3124 80002524 0C0009E9 */ jal send_mesg
/* 3128 80002528 00000000 */ nop
/* 312C 8000252C 1000FFD1 */ b next_interrupt + 4
/* 3130 80002530 3209FF00 */ andi $t1, $s0, 0xff00
rcp:
/* 3134 80002534 3C088000 */ lui $t0, %hi(__OSGlobalIntMask)
/* 3138 80002538 250850F0 */ addiu $t0, $t0, %lo(__OSGlobalIntMask)
/* 313C 8000253C 8D080000 */ lw $t0, ($t0)
/* 3140 80002540 3C11A430 */ lui $s1, %hi(PHYS_TO_K1(MI_INTR_REG))
/* 3144 80002544 8E310008 */ lw $s1, %lo(PHYS_TO_K1(MI_INTR_REG))($s1)
/* 3148 80002548 00084402 */ srl $t0, $t0, 0x10
/* 314C 8000254C 02288824 */ and $s1, $s1, $t0
/* 3150 80002550 32290001 */ andi $t1, $s1, 1
/* 3154 80002554 51200014 */ beql $t1, $zero, .L800025A8
/* 3158 80002558 32290008 */ andi $t1, $s1, 8
/* 315C 8000255C 3C0CA404 */ lui $t4, %hi(PHYS_TO_K1(SP_STATUS_REG))
/* 3160 80002560 8D8C0010 */ lw $t4, %lo(PHYS_TO_K1(SP_STATUS_REG))($t4)
/* 3164 80002564 24090008 */ addiu $t1, $zero, 8
/* 3168 80002568 3C01A404 */ lui $at, %hi(PHYS_TO_K1(SP_STATUS_REG))
/* 316C 8000256C 318C0300 */ andi $t4, $t4, 0x300
/* 3170 80002570 3231003E */ andi $s1, $s1, 0x3e
/* 3174 80002574 11800007 */ beqz $t4, .L80002594
/* 3178 80002578 AC290010 */ sw $t1, %lo(PHYS_TO_K1(SP_STATUS_REG))($at)
/* 317C 8000257C 0C0009E9 */ jal send_mesg
/* 3180 80002580 24040020 */ addiu $a0, $zero, 0x20
/* 3184 80002584 52200039 */ beql $s1, $zero, .L8000266C
/* 3188 80002588 2401FBFF */ addiu $at, $zero, -0x401
/* 318C 8000258C 10000006 */ b .L800025A8
/* 3190 80002590 32290008 */ andi $t1, $s1, 8
.L80002594:
/* 3194 80002594 0C0009E9 */ jal send_mesg
/* 3198 80002598 24040058 */ addiu $a0, $zero, 0x58
/* 319C 8000259C 52200033 */ beql $s1, $zero, .L8000266C
/* 31A0 800025A0 2401FBFF */ addiu $at, $zero, -0x401
/* 31A4 800025A4 32290008 */ andi $t1, $s1, 8
.L800025A8:
/* 31A8 800025A8 11200007 */ beqz $t1, .L800025C8
/* 31AC 800025AC 3C01A440 */ lui $at, %hi(PHYS_TO_K1(VI_CURRENT_REG))
/* 31B0 800025B0 32310037 */ andi $s1, $s1, 0x37
/* 31B4 800025B4 AC200010 */ sw $zero, %lo(PHYS_TO_K1(VI_CURRENT_REG))($at)
/* 31B8 800025B8 0C0009E9 */ jal send_mesg
/* 31BC 800025BC 24040038 */ addiu $a0, $zero, 0x38
/* 31C0 800025C0 5220002A */ beql $s1, $zero, .L8000266C
/* 31C4 800025C4 2401FBFF */ addiu $at, $zero, -0x401
.L800025C8:
/* 31C8 800025C8 32290004 */ andi $t1, $s1, 4
/* 31CC 800025CC 5120000A */ beql $t1, $zero, .L800025F8
/* 31D0 800025D0 32290002 */ andi $t1, $s1, 2
/* 31D4 800025D4 24090001 */ addiu $t1, $zero, 1
/* 31D8 800025D8 3C01A450 */ lui $at, %hi(PHYS_TO_K1(AI_STATUS_REG))
/* 31DC 800025DC 3231003B */ andi $s1, $s1, 0x3b
/* 31E0 800025E0 AC29000C */ sw $t1, %lo(PHYS_TO_K1(AI_STATUS_REG))($at)
/* 31E4 800025E4 0C0009E9 */ jal send_mesg
/* 31E8 800025E8 24040030 */ addiu $a0, $zero, 0x30
/* 31EC 800025EC 5220001F */ beql $s1, $zero, .L8000266C
/* 31F0 800025F0 2401FBFF */ addiu $at, $zero, -0x401
/* 31F4 800025F4 32290002 */ andi $t1, $s1, 2
.L800025F8:
/* 31F8 800025F8 11200007 */ beqz $t1, .L80002618
/* 31FC 800025FC 3C01A480 */ lui $at, %hi(PHYS_TO_K1(SI_STATUS_REG))
/* 3200 80002600 3231003D */ andi $s1, $s1, 0x3d
/* 3204 80002604 AC200018 */ sw $zero, %lo(PHYS_TO_K1(SI_STATUS_REG))($at)
/* 3208 80002608 0C0009E9 */ jal send_mesg
/* 320C 8000260C 24040028 */ addiu $a0, $zero, 0x28
/* 3210 80002610 52200016 */ beql $s1, $zero, .L8000266C
/* 3214 80002614 2401FBFF */ addiu $at, $zero, -0x401
.L80002618:
/* 3218 80002618 32290010 */ andi $t1, $s1, 0x10
/* 321C 8000261C 5120000A */ beql $t1, $zero, .L80002648
/* 3220 80002620 32290020 */ andi $t1, $s1, 0x20
/* 3224 80002624 24090002 */ addiu $t1, $zero, 2
/* 3228 80002628 3C01A460 */ lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG))
/* 322C 8000262C 3231002F */ andi $s1, $s1, 0x2f
/* 3230 80002630 AC290010 */ sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at)
/* 3234 80002634 0C0009E9 */ jal send_mesg
/* 3238 80002638 24040040 */ addiu $a0, $zero, 0x40
/* 323C 8000263C 5220000B */ beql $s1, $zero, .L8000266C
/* 3240 80002640 2401FBFF */ addiu $at, $zero, -0x401
/* 3244 80002644 32290020 */ andi $t1, $s1, 0x20
.L80002648:
/* 3248 80002648 51200008 */ beql $t1, $zero, .L8000266C
/* 324C 8000264C 2401FBFF */ addiu $at, $zero, -0x401
/* 3250 80002650 24090800 */ addiu $t1, $zero, 0x800
/* 3254 80002654 3C01A430 */ lui $at, 0xa430
/* 3258 80002658 3231001F */ andi $s1, $s1, 0x1f
/* 325C 8000265C AC290000 */ sw $t1, ($at)
/* 3260 80002660 0C0009E9 */ jal send_mesg
/* 3264 80002664 24040048 */ addiu $a0, $zero, 0x48
/* 3268 80002668 2401FBFF */ addiu $at, $zero, -0x401
.L8000266C:
/* 326C 8000266C 1000FF80 */ b next_interrupt
/* 3270 80002670 02018024 */ and $s0, $s0, $at
prenmi:
/* 3274 80002674 8F5B0118 */ lw $k1, 0x118($k0)
/* 3278 80002678 2401EFFF */ addiu $at, $zero, -0x1001
/* 327C 8000267C 3C098000 */ lui $t1, %hi(__osShutdown)
/* 3280 80002680 0361D824 */ and $k1, $k1, $at
/* 3284 80002684 AF5B0118 */ sw $k1, 0x118($k0)
/* 3288 80002688 252950EC */ addiu $t1, $t1, %lo(__osShutdown)
/* 328C 8000268C 8D2A0000 */ lw $t2, ($t1)
/* 3290 80002690 11400003 */ beqz $t2, firstnmi
/* 3294 80002694 2401EFFF */ addiu $at, $zero, -0x1001
/* 3298 80002698 10000023 */ b redispatch
/* 329C 8000269C 02018024 */ and $s0, $s0, $at
firstnmi:
/* 32A0 800026A0 240A0001 */ addiu $t2, $zero, 1
/* 32A4 800026A4 AD2A0000 */ sw $t2, ($t1)
/* 32A8 800026A8 0C0009E9 */ jal send_mesg
/* 32AC 800026AC 24040070 */ addiu $a0, $zero, 0x70
/* 32B0 800026B0 3C0A8000 */ lui $t2, %hi(__osRunQueue)
/* 32B4 800026B4 8D4A5128 */ lw $t2, %lo(__osRunQueue)($t2)
/* 32B8 800026B8 2401EFFF */ addiu $at, $zero, -0x1001
/* 32BC 800026BC 02018024 */ and $s0, $s0, $at
/* 32C0 800026C0 8D5B0118 */ lw $k1, 0x118($t2)
/* 32C4 800026C4 0361D824 */ and $k1, $k1, $at
/* 32C8 800026C8 10000017 */ b redispatch
/* 32CC 800026CC AD5B0118 */ sw $k1, 0x118($t2)
sw2:
/* 32D0 800026D0 2401FDFF */ addiu $at, $zero, -0x201
/* 32D4 800026D4 01014024 */ and $t0, $t0, $at
/* 32D8 800026D8 40886800 */ mtc0 $t0, $13
/* 32DC 800026DC 0C0009E9 */ jal send_mesg
/* 32E0 800026E0 24040008 */ addiu $a0, $zero, 8
/* 32E4 800026E4 2401FDFF */ addiu $at, $zero, -0x201
/* 32E8 800026E8 1000FF61 */ b next_interrupt
/* 32EC 800026EC 02018024 */ and $s0, $s0, $at
sw1:
/* 32F0 800026F0 2401FEFF */ addiu $at, $zero, -0x101
/* 32F4 800026F4 01014024 */ and $t0, $t0, $at
/* 32F8 800026F8 40886800 */ mtc0 $t0, $13
/* 32FC 800026FC 0C0009E9 */ jal send_mesg
/* 3300 80002700 24040000 */ addiu $a0, $zero, 0
/* 3304 80002704 2401FEFF */ addiu $at, $zero, -0x101
/* 3308 80002708 1000FF59 */ b next_interrupt
/* 330C 8000270C 02018024 */ and $s0, $s0, $at
/* 3310 80002710 24090001 */ addiu $t1, $zero, 1
handle_break:
/* 3314 80002714 A7490012 */ sh $t1, 0x12($k0)
/* 3318 80002718 0C0009E9 */ jal send_mesg
/* 331C 8000271C 24040050 */ addiu $a0, $zero, 0x50
/* 3320 80002720 10000001 */ b redispatch
/* 3324 80002724 00000000 */ nop
redispatch:
/* 3328 80002728 3C0A8000 */ lui $t2, %hi(__osRunQueue)
/* 332C 8000272C 8D4A5128 */ lw $t2, %lo(__osRunQueue)($t2)
/* 3330 80002730 8F490004 */ lw $t1, 4($k0)
/* 3334 80002734 8D4B0004 */ lw $t3, 4($t2)
/* 3338 80002738 012B082A */ slt $at, $t1, $t3
/* 333C 8000273C 10200007 */ beqz $at, enqueueRunning
/* 3340 80002740 00000000 */ nop
/* 3344 80002744 3C048000 */ lui $a0, %hi(__osRunQueue)
/* 3348 80002748 03402825 */ or $a1, $k0, $zero
/* 334C 8000274C 0C000A63 */ jal __osEnqueueThread
/* 3350 80002750 24845128 */ addiu $a0, $a0, %lo(__osRunQueue)
/* 3354 80002754 08000A79 */ j __osDispatchThread
/* 3358 80002758 00000000 */ nop
enqueueRunning:
/* 335C 8000275C 3C098000 */ lui $t1, %hi(__osRunQueue)
/* 3360 80002760 25295128 */ addiu $t1, $t1, %lo(__osRunQueue)
/* 3364 80002764 8D2A0000 */ lw $t2, ($t1)
/* 3368 80002768 AF4A0000 */ sw $t2, ($k0)
/* 336C 8000276C 08000A79 */ j __osDispatchThread
/* 3370 80002770 AD3A0000 */ sw $k0, ($t1)
.L80002774:
/* 3374 80002774 3C018000 */ lui $at, %hi(__osFaultedThread)
/* 3378 80002778 AC3A5134 */ sw $k0, %lo(__osFaultedThread)($at)
/* 337C 8000277C 24090001 */ addiu $t1, $zero, 1
/* 3380 80002780 A7490010 */ sh $t1, 0x10($k0)
/* 3384 80002784 24090002 */ addiu $t1, $zero, 2
/* 3388 80002788 A7490012 */ sh $t1, 0x12($k0)
/* 338C 8000278C 400A4000 */ mfc0 $t2, $8
/* 3390 80002790 AF4A0124 */ sw $t2, 0x124($k0)
/* 3394 80002794 0C0009E9 */ jal send_mesg
/* 3398 80002798 24040060 */ addiu $a0, $zero, 0x60
/* 339C 8000279C 08000A79 */ j __osDispatchThread
/* 33A0 800027A0 00000000 */ nop
endlabel __osException
glabel send_mesg
/* 33A4 800027A4 3C0A8001 */ lui $t2, %hi(__osEventStateTab)
/* 33A8 800027A8 254A8470 */ addiu $t2, $t2, %lo(__osEventStateTab)
/* 33AC 800027AC 01445021 */ addu $t2, $t2, $a0
/* 33B0 800027B0 8D490000 */ lw $t1, ($t2)
/* 33B4 800027B4 03E09025 */ or $s2, $ra, $zero
/* 33B8 800027B8 11200025 */ beqz $t1, send_done
/* 33BC 800027BC 00000000 */ nop
/* 33C0 800027C0 8D2B0008 */ lw $t3, 8($t1)
/* 33C4 800027C4 8D2C0010 */ lw $t4, 0x10($t1)
/* 33C8 800027C8 016C082A */ slt $at, $t3, $t4
/* 33CC 800027CC 10200020 */ beqz $at, send_done
/* 33D0 800027D0 00000000 */ nop
/* 33D4 800027D4 8D2D000C */ lw $t5, 0xc($t1)
/* 33D8 800027D8 01AB6821 */ addu $t5, $t5, $t3
/* 33DC 800027DC 01AC001A */ div $zero, $t5, $t4
/* 33E0 800027E0 15800002 */ bnez $t4, .L800027EC
/* 33E4 800027E4 00000000 */ nop
/* 33E8 800027E8 0007000D */ break 7
.L800027EC:
/* 33EC 800027EC 2401FFFF */ addiu $at, $zero, -1
/* 33F0 800027F0 15810004 */ bne $t4, $at, .L80002804
/* 33F4 800027F4 3C018000 */ lui $at, 0x8000
/* 33F8 800027F8 15A10002 */ bne $t5, $at, .L80002804
/* 33FC 800027FC 00000000 */ nop
/* 3400 80002800 0006000D */ break 6
.L80002804:
/* 3404 80002804 8D2C0014 */ lw $t4, 0x14($t1)
/* 3408 80002808 00006810 */ mfhi $t5
/* 340C 8000280C 000D6880 */ sll $t5, $t5, 2
/* 3410 80002810 018D6021 */ addu $t4, $t4, $t5
/* 3414 80002814 8D4D0004 */ lw $t5, 4($t2)
/* 3418 80002818 256A0001 */ addiu $t2, $t3, 1
/* 341C 8000281C AD8D0000 */ sw $t5, ($t4)
/* 3420 80002820 AD2A0008 */ sw $t2, 8($t1)
/* 3424 80002824 8D2A0000 */ lw $t2, ($t1)
/* 3428 80002828 8D4B0000 */ lw $t3, ($t2)
/* 342C 8000282C 11600008 */ beqz $t3, send_done
/* 3430 80002830 00000000 */ nop
/* 3434 80002834 0C000A75 */ jal __osPopThread
/* 3438 80002838 01202025 */ or $a0, $t1, $zero
/* 343C 8000283C 00405025 */ or $t2, $v0, $zero
/* 3440 80002840 3C048000 */ lui $a0, %hi(__osRunQueue)
/* 3444 80002844 01402825 */ or $a1, $t2, $zero
/* 3448 80002848 0C000A63 */ jal __osEnqueueThread
/* 344C 8000284C 24845128 */ addiu $a0, $a0, %lo(__osRunQueue)
send_done:
/* 3450 80002850 02400008 */ jr $s2
/* 3454 80002854 00000000 */ nop
endlabel send_mesg
glabel handle_CpU
/* 3458 80002858 3C013000 */ lui $at, 0x3000
/* 345C 8000285C 01014824 */ and $t1, $t0, $at
/* 3460 80002860 00094F02 */ srl $t1, $t1, 0x1c
/* 3464 80002864 240A0001 */ addiu $t2, $zero, 1
/* 3468 80002868 152AFFC2 */ bne $t1, $t2, .L80002774
/* 346C 8000286C 00000000 */ nop
/* 3470 80002870 8F5B0118 */ lw $k1, 0x118($k0)
/* 3474 80002874 3C012000 */ lui $at, 0x2000
/* 3478 80002878 24090001 */ addiu $t1, $zero, 1
/* 347C 8000287C 0361D825 */ or $k1, $k1, $at
/* 3480 80002880 AF490018 */ sw $t1, 0x18($k0)
/* 3484 80002884 1000FFB5 */ b enqueueRunning
/* 3488 80002888 AF5B0118 */ sw $k1, 0x118($k0)
endlabel handle_CpU
glabel __osEnqueueAndYield
/* 348C 8000288C 3C058000 */ lui $a1, %hi(__osRunningThread)
/* 3490 80002890 8CA55130 */ lw $a1, %lo(__osRunningThread)($a1)
/* 3494 80002894 40086000 */ mfc0 $t0, $12
/* 3498 80002898 8CBB0018 */ lw $k1, 0x18($a1)
/* 349C 8000289C 35080002 */ ori $t0, $t0, 2
/* 34A0 800028A0 ACA80118 */ sw $t0, 0x118($a1)
/* 34A4 800028A4 FCB00098 */ sd $s0, 0x98($a1)
/* 34A8 800028A8 FCB100A0 */ sd $s1, 0xa0($a1)
/* 34AC 800028AC FCB200A8 */ sd $s2, 0xa8($a1)
/* 34B0 800028B0 FCB300B0 */ sd $s3, 0xb0($a1)
/* 34B4 800028B4 FCB400B8 */ sd $s4, 0xb8($a1)
/* 34B8 800028B8 FCB500C0 */ sd $s5, 0xc0($a1)
/* 34BC 800028BC FCB600C8 */ sd $s6, 0xc8($a1)
/* 34C0 800028C0 FCB700D0 */ sd $s7, 0xd0($a1)
/* 34C4 800028C4 FCBC00E8 */ sd $gp, 0xe8($a1)
/* 34C8 800028C8 FCBD00F0 */ sd $sp, 0xf0($a1)
/* 34CC 800028CC FCBE00F8 */ sd $fp, 0xf8($a1)
/* 34D0 800028D0 FCBF0100 */ sd $ra, 0x100($a1)
/* 34D4 800028D4 13600009 */ beqz $k1, .L800028FC
/* 34D8 800028D8 ACBF011C */ sw $ra, 0x11c($a1)
/* 34DC 800028DC 445BF800 */ cfc1 $k1, $31
/* 34E0 800028E0 F4B40180 */ sdc1 $f20, 0x180($a1)
/* 34E4 800028E4 F4B60188 */ sdc1 $f22, 0x188($a1)
/* 34E8 800028E8 F4B80190 */ sdc1 $f24, 0x190($a1)
/* 34EC 800028EC F4BA0198 */ sdc1 $f26, 0x198($a1)
/* 34F0 800028F0 F4BC01A0 */ sdc1 $f28, 0x1a0($a1)
/* 34F4 800028F4 F4BE01A8 */ sdc1 $f30, 0x1a8($a1)
/* 34F8 800028F8 ACBB012C */ sw $k1, 0x12c($a1)
.L800028FC:
/* 34FC 800028FC 8CBB0118 */ lw $k1, 0x118($a1)
/* 3500 80002900 3369FF00 */ andi $t1, $k1, 0xff00
/* 3504 80002904 5120000E */ beql $t1, $zero, .L80002940
/* 3508 80002908 3C1BA430 */ lui $k1, 0xa430
/* 350C 8000290C 3C088000 */ lui $t0, %hi(__OSGlobalIntMask)
/* 3510 80002910 250850F0 */ addiu $t0, $t0, %lo(__OSGlobalIntMask)
/* 3514 80002914 8D080000 */ lw $t0, ($t0)
/* 3518 80002918 2401FFFF */ addiu $at, $zero, -1
/* 351C 8000291C 01014026 */ xor $t0, $t0, $at
/* 3520 80002920 3C01FFFF */ lui $at, 0xffff
/* 3524 80002924 3108FF00 */ andi $t0, $t0, 0xff00
/* 3528 80002928 342100FF */ ori $at, $at, 0xff
/* 352C 8000292C 01284825 */ or $t1, $t1, $t0
/* 3530 80002930 0361D824 */ and $k1, $k1, $at
/* 3534 80002934 0369D825 */ or $k1, $k1, $t1
/* 3538 80002938 ACBB0118 */ sw $k1, 0x118($a1)
/* 353C 8000293C 3C1BA430 */ lui $k1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
.L80002940:
/* 3540 80002940 8F7B000C */ lw $k1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($k1)
/* 3544 80002944 1360000B */ beqz $k1, .L80002974
/* 3548 80002948 00000000 */ nop
/* 354C 8000294C 3C1A8000 */ lui $k0, %hi(__OSGlobalIntMask)
/* 3550 80002950 275A50F0 */ addiu $k0, $k0, %lo(__OSGlobalIntMask)
/* 3554 80002954 8F5A0000 */ lw $k0, ($k0)
/* 3558 80002958 8CA80128 */ lw $t0, 0x128($a1)
/* 355C 8000295C 2401FFFF */ addiu $at, $zero, -1
/* 3560 80002960 001AD402 */ srl $k0, $k0, 0x10
/* 3564 80002964 0341D026 */ xor $k0, $k0, $at
/* 3568 80002968 335A003F */ andi $k0, $k0, 0x3f
/* 356C 8000296C 0348D024 */ and $k0, $k0, $t0
/* 3570 80002970 037AD825 */ or $k1, $k1, $k0
.L80002974:
/* 3574 80002974 10800003 */ beqz $a0, .L80002984
/* 3578 80002978 ACBB0128 */ sw $k1, 0x128($a1)
/* 357C 8000297C 0C000A63 */ jal __osEnqueueThread
/* 3580 80002980 00000000 */ nop
.L80002984:
/* 3584 80002984 08000A79 */ j __osDispatchThread
/* 3588 80002988 00000000 */ nop
endlabel __osEnqueueAndYield
glabel __osEnqueueThread
/* 358C 8000298C 8C980000 */ lw $t8, ($a0)
/* 3590 80002990 8CAF0004 */ lw $t7, 4($a1)
/* 3594 80002994 0080C825 */ or $t9, $a0, $zero
/* 3598 80002998 8F0E0004 */ lw $t6, 4($t8)
/* 359C 8000299C 01CF082A */ slt $at, $t6, $t7
/* 35A0 800029A0 54200008 */ bnel $at, $zero, .L800029C4
/* 35A4 800029A4 8F380000 */ lw $t8, ($t9)
/* 35A8 800029A8 0300C825 */ or $t9, $t8, $zero
.L800029AC:
/* 35AC 800029AC 8F180000 */ lw $t8, ($t8)
/* 35B0 800029B0 8F0E0004 */ lw $t6, 4($t8)
/* 35B4 800029B4 01CF082A */ slt $at, $t6, $t7
/* 35B8 800029B8 5020FFFC */ beql $at, $zero, .L800029AC
/* 35BC 800029BC 0300C825 */ or $t9, $t8, $zero
/* 35C0 800029C0 8F380000 */ lw $t8, ($t9)
.L800029C4:
/* 35C4 800029C4 ACB80000 */ sw $t8, ($a1)
/* 35C8 800029C8 AF250000 */ sw $a1, ($t9)
/* 35CC 800029CC 03E00008 */ jr $ra
/* 35D0 800029D0 ACA40008 */ sw $a0, 8($a1)
endlabel __osEnqueueThread
glabel __osPopThread
/* 35D4 800029D4 8C820000 */ lw $v0, ($a0)
/* 35D8 800029D8 8C590000 */ lw $t9, ($v0)
/* 35DC 800029DC 03E00008 */ jr $ra
/* 35E0 800029E0 AC990000 */ sw $t9, ($a0)
endlabel __osPopThread
glabel __osDispatchThread
/* 35E4 800029E4 3C048000 */ lui $a0, %hi(__osRunQueue)
/* 35E8 800029E8 0C000A75 */ jal __osPopThread
/* 35EC 800029EC 24845128 */ addiu $a0, $a0, %lo(__osRunQueue)
/* 35F0 800029F0 3C018000 */ lui $at, %hi(__osRunningThread)
/* 35F4 800029F4 AC225130 */ sw $v0, %lo(__osRunningThread)($at)
/* 35F8 800029F8 24080004 */ addiu $t0, $zero, 4
/* 35FC 800029FC A4480010 */ sh $t0, 0x10($v0)
/* 3600 80002A00 0040D025 */ or $k0, $v0, $zero
/* 3604 80002A04 3C088000 */ lui $t0, %hi(__OSGlobalIntMask)
/* 3608 80002A08 8F5B0118 */ lw $k1, 0x118($k0)
/* 360C 80002A0C 250850F0 */ addiu $t0, $t0, %lo(__OSGlobalIntMask)
/* 3610 80002A10 8D080000 */ lw $t0, ($t0)
/* 3614 80002A14 3C01FFFF */ lui $at, 0xffff
/* 3618 80002A18 3369FF00 */ andi $t1, $k1, 0xff00
/* 361C 80002A1C 342100FF */ ori $at, $at, 0xff
/* 3620 80002A20 3108FF00 */ andi $t0, $t0, 0xff00
/* 3624 80002A24 01284824 */ and $t1, $t1, $t0
/* 3628 80002A28 0361D824 */ and $k1, $k1, $at
/* 362C 80002A2C 0369D825 */ or $k1, $k1, $t1
/* 3630 80002A30 409B6000 */ mtc0 $k1, $12
/* 3634 80002A34 DF5B0108 */ ld $k1, 0x108($k0)
/* 3638 80002A38 DF410020 */ ld $at, 0x20($k0)
/* 363C 80002A3C DF420028 */ ld $v0, 0x28($k0)
/* 3640 80002A40 03600013 */ mtlo $k1
/* 3644 80002A44 DF5B0110 */ ld $k1, 0x110($k0)
/* 3648 80002A48 DF430030 */ ld $v1, 0x30($k0)
/* 364C 80002A4C DF440038 */ ld $a0, 0x38($k0)
/* 3650 80002A50 DF450040 */ ld $a1, 0x40($k0)
/* 3654 80002A54 DF460048 */ ld $a2, 0x48($k0)
/* 3658 80002A58 DF470050 */ ld $a3, 0x50($k0)
/* 365C 80002A5C DF480058 */ ld $t0, 0x58($k0)
/* 3660 80002A60 DF490060 */ ld $t1, 0x60($k0)
/* 3664 80002A64 DF4A0068 */ ld $t2, 0x68($k0)
/* 3668 80002A68 DF4B0070 */ ld $t3, 0x70($k0)
/* 366C 80002A6C DF4C0078 */ ld $t4, 0x78($k0)
/* 3670 80002A70 DF4D0080 */ ld $t5, 0x80($k0)
/* 3674 80002A74 DF4E0088 */ ld $t6, 0x88($k0)
/* 3678 80002A78 DF4F0090 */ ld $t7, 0x90($k0)
/* 367C 80002A7C DF500098 */ ld $s0, 0x98($k0)
/* 3680 80002A80 DF5100A0 */ ld $s1, 0xa0($k0)
/* 3684 80002A84 DF5200A8 */ ld $s2, 0xa8($k0)
/* 3688 80002A88 DF5300B0 */ ld $s3, 0xb0($k0)
/* 368C 80002A8C DF5400B8 */ ld $s4, 0xb8($k0)
/* 3690 80002A90 DF5500C0 */ ld $s5, 0xc0($k0)
/* 3694 80002A94 DF5600C8 */ ld $s6, 0xc8($k0)
/* 3698 80002A98 DF5700D0 */ ld $s7, 0xd0($k0)
/* 369C 80002A9C DF5800D8 */ ld $t8, 0xd8($k0)
/* 36A0 80002AA0 DF5900E0 */ ld $t9, 0xe0($k0)
/* 36A4 80002AA4 DF5C00E8 */ ld $gp, 0xe8($k0)
/* 36A8 80002AA8 03600011 */ mthi $k1
/* 36AC 80002AAC DF5D00F0 */ ld $sp, 0xf0($k0)
/* 36B0 80002AB0 DF5E00F8 */ ld $fp, 0xf8($k0)
/* 36B4 80002AB4 DF5F0100 */ ld $ra, 0x100($k0)
/* 36B8 80002AB8 8F5B011C */ lw $k1, 0x11c($k0)
/* 36BC 80002ABC 409B7000 */ mtc0 $k1, $14
/* 36C0 80002AC0 8F5B0018 */ lw $k1, 0x18($k0)
/* 36C4 80002AC4 13600013 */ beqz $k1, .L80002B14
/* 36C8 80002AC8 00000000 */ nop
/* 36CC 80002ACC 8F5B012C */ lw $k1, 0x12c($k0)
/* 36D0 80002AD0 44DBF800 */ ctc1 $k1, $31
/* 36D4 80002AD4 D7400130 */ ldc1 $f0, 0x130($k0)
/* 36D8 80002AD8 D7420138 */ ldc1 $f2, 0x138($k0)
/* 36DC 80002ADC D7440140 */ ldc1 $f4, 0x140($k0)
/* 36E0 80002AE0 D7460148 */ ldc1 $f6, 0x148($k0)
/* 36E4 80002AE4 D7480150 */ ldc1 $f8, 0x150($k0)
/* 36E8 80002AE8 D74A0158 */ ldc1 $f10, 0x158($k0)
/* 36EC 80002AEC D74C0160 */ ldc1 $f12, 0x160($k0)
/* 36F0 80002AF0 D74E0168 */ ldc1 $f14, 0x168($k0)
/* 36F4 80002AF4 D7500170 */ ldc1 $f16, 0x170($k0)
/* 36F8 80002AF8 D7520178 */ ldc1 $f18, 0x178($k0)
/* 36FC 80002AFC D7540180 */ ldc1 $f20, 0x180($k0)
/* 3700 80002B00 D7560188 */ ldc1 $f22, 0x188($k0)
/* 3704 80002B04 D7580190 */ ldc1 $f24, 0x190($k0)
/* 3708 80002B08 D75A0198 */ ldc1 $f26, 0x198($k0)
/* 370C 80002B0C D75C01A0 */ ldc1 $f28, 0x1a0($k0)
/* 3710 80002B10 D75E01A8 */ ldc1 $f30, 0x1a8($k0)
.L80002B14:
/* 3714 80002B14 8F5B0128 */ lw $k1, 0x128($k0)
/* 3718 80002B18 3C1A8000 */ lui $k0, %hi(__OSGlobalIntMask)
/* 371C 80002B1C 275A50F0 */ addiu $k0, $k0, %lo(__OSGlobalIntMask)
/* 3720 80002B20 8F5A0000 */ lw $k0, ($k0)
/* 3724 80002B24 001AD402 */ srl $k0, $k0, 0x10
/* 3728 80002B28 037AD824 */ and $k1, $k1, $k0
/* 372C 80002B2C 001BD840 */ sll $k1, $k1, 1
/* 3730 80002B30 3C1A8000 */ lui $k0, %hi(__osRcpImTable)
/* 3734 80002B34 275A51D0 */ addiu $k0, $k0, %lo(__osRcpImTable)
/* 3738 80002B38 037AD821 */ addu $k1, $k1, $k0
/* 373C 80002B3C 977B0000 */ lhu $k1, ($k1)
/* 3740 80002B40 3C1AA430 */ lui $k0, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
/* 3744 80002B44 275A000C */ addiu $k0, $k0, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))
/* 3748 80002B48 AF5B0000 */ sw $k1, ($k0)
/* 374C 80002B4C 00000000 */ nop
/* 3750 80002B50 00000000 */ nop
/* 3754 80002B54 00000000 */ nop
/* 3758 80002B58 00000000 */ nop
/* 375C 80002B5C 42000018 */ eret
endlabel __osDispatchThread
glabel __osCleanupThread
/* 3760 80002B60 0C000EB4 */ jal osDestroyThread
/* 3764 80002B64 00002025 */ or $a0, $zero, $zero
/* 3768 80002B68 00000000 */ nop
/* 376C 80002B6C 00000000 */ nop
endlabel __osCleanupThread