static void *setIntrVSync(int index, void (*callback)());


disassembled listing :
setIntrVSync:
    lui     v0,_hi(sectbase(.data))
    addiu   v0,v0,_lo(sectbase(.data))
    sll     a0,a0,2
    addu    a0,a0,v0
    lw      v0,0(a0)
    nop
    beq     a1,v0,text_E8
    nop
    sw      a1,0(a0)
text_E8:
    jr      ra
    nop
source code :
static void (*cbIntrVSync[8])();

static void *setIntrVSync(int index, void (*callback)())
{
    void (*old)() = cbIntrVSync[index];

    if(callback != old)
        cbIntrVSync[index] = callback;

    return old;
}
reversed listing :
setIntrVSync:
    la      $2,cbIntrVSync
    sll     $4,$4,2
    addu    $4,$4,$2
    lw      $2,0($4)
    nop
    beq     $5,$2,$L10
    nop
    sw      $5,0($4)
$L10:
    j       $31
    nop
coincidence: 100%

STATUS: COMPLETE
15 Apr 2003
Hosted by uCoz