.set noat      // allow manual use of $at
.set noreorder // don't insert nops after branches

#include "macros.inc"


.section .text, "ax"

glabel __osProbeTLB
    mfc0  $t0, $10
    andi  $t1, $t0, 0xff
    li    $at, 0xFFFFE000
    and   $t2, $a0, $at
    or    $t1, $t1, $t2
    mtc0  $t1, $10
    nop
    nop
    nop
    tlbp
    nop
    nop
    mfc0  $t3, $0
    lui   $at, 0x8000
    and   $t3, $t3, $at
    bnez  $t3, .L8032A0D8
     nop
    tlbr
    nop
    nop
    nop
    mfc0  $t3, $5
    addi  $t3, $t3, 0x2000
    srl   $t3, $t3, 1
    and   $t4, $t3, $a0
    bnez  $t4, .L8032A0A8
     addi  $t3, $t3, -1
    mfc0  $v0, $2
    b     .L8032A0AC
     nop
.L8032A0A8:
    mfc0  $v0, $3
.L8032A0AC:
    andi  $t5, $v0, 2
    beqz  $t5, .L8032A0D8
     nop
    lui   $at, (0x3FFFFFC0 >> 16) // lui $at, 0x3fff
    ori   $at, (0x3FFFFFC0 & 0xFFFF) // ori $at, $at, 0xffc0
    and   $v0, $v0, $at
    sll   $v0, $v0, 6
    and   $t5, $a0, $t3
    add   $v0, $v0, $t5
    b     .L8032A0DC
     nop
.L8032A0D8:
    li    $v0, -1
.L8032A0DC:
    mtc0  $t0, $10
    jr    $ra
     nop
