osGetCount.s (1959B)
1 .set noreorder // don't insert nops after branches 2 3 #include "macros.inc" 4 5 .section .text, "ax" 6 7 #ifdef VERSION_CN 8 9 glabel osGetCount 10 addiu $sp, $sp, -0x38 11 sd $ra, 0x30($sp) 12 sd $fp, 0x28($sp) 13 jal __osDisableInt 14 move $fp, $sp 15 sw $v0, 0x24($fp) 16 mfc0 $a1, $9 17 sw $a1, 0x20($fp) 18 lw $v0, 0x20($fp) 19 lui $v1, %hi(sLastHighestCount) # $v1, 0x8032 20 lw $v1, %lo(sLastHighestCount)($v1) 21 sltu $v0, $v0, $v1 22 beqz $v0, .L80304FCC 23 nop 24 lui $v0, %hi(sNumCountOverflows) # $v0, 0x8032 25 lw $v0, %lo(sNumCountOverflows)($v0) 26 addiu $v1, $v0, 1 27 sw $v1, sNumCountOverflows 28 .L80304FCC: 29 lw $v0, 0x20($fp) 30 sw $v0, sLastHighestCount 31 lui $v0, %hi(sNumCountOverflows) // $v0, 0x8032 32 lwu $v0, %lo(sNumCountOverflows)($v0) 33 dsll32 $v1, $v0, 0 34 lwu $a0, 0x20($fp) 35 or $v0, $v1, $a0 36 move $a0, $v0 37 dsll $v1, $a0, 5 38 dsubu $v1, $v1, $v0 39 dsll $a0, $v1, 2 40 daddu $a0, $a0, $v0 41 .set noat // gas seems to add an extra mflo $zero after, if we don't manually use $at 42 li $at, 192 43 ddivu $zero, $a0, $at 44 .set at 45 mflo $v0 46 dsll32 $v0, $v0, 0 47 dsra32 $v0, $v0, 0 48 sw $v0, 0x20($fp) 49 lw $v0, 0x20($fp) 50 lui $v1, %hi(sLastHighestCount2) // $v1, 0x8032 51 lw $v1, %lo(sLastHighestCount2)($v1) 52 sltu $v0, $v0, $v1 53 beqz $v0, .L80305044 54 nop 55 lui $v0, %hi(sNumCountOverflows2) // $v0, 0x8032 56 lw $v0, %lo(sNumCountOverflows2)($v0) 57 addiu $v1, $v0, 1 58 sw $v1, sNumCountOverflows2 59 .L80305044: 60 lw $v0, 0x20($fp) 61 sw $v0, sLastHighestCount2 62 jal __osRestoreInt 63 lw $a0, 0x24($fp) 64 lw $v1, 0x20($fp) 65 j .L80305064 66 move $v0, $v1 67 .L80305064: 68 move $sp, $fp 69 ld $ra, 0x30($sp) 70 ld $fp, 0x28($sp) 71 jr $ra 72 addiu $sp, $sp, 0x38 73 74 #else 75 76 glabel osGetCount 77 mfc0 $v0, $9 78 jr $ra 79 nop 80 81 nop 82 83 #endif