sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

bzero.s (2242B)


      1 .set noreorder // don't insert nops after branches
      2 
      3 #include "macros.inc"
      4 
      5 // this file is probably handwritten
      6 
      7 //TODO There seem to be patterns in these iQue diffs. Can we figure out what's causing them? Could this have been written in C? See also bcopy.s.
      8 
      9 .section .text, "ax"
     10 
     11 glabel bzero
     12 
     13 #ifdef VERSION_CN
     14     negu  $v1, $a0
     15     blt  $a1, 0xc, .L80303790
     16      nop
     17     andi  $v1, $v1, 3
     18     beqz  $v1, .L80303734
     19      subu  $a1, $a1, $v1
     20     swl   $zero, ($a0)
     21     addu  $a0, $a0, $v1
     22 .L80303734:
     23     and   $a3, $a1, -32
     24     beqz  $a3, .L80303770
     25      subu  $a1, $a1, $a3
     26     addu  $a3, $a3, $a0
     27 .L80303748:
     28     sw    $zero, ($a0)
     29     sw    $zero, 4($a0)
     30     sw    $zero, 8($a0)
     31     sw    $zero, 0xc($a0)
     32     addiu $a0, $a0, 0x20
     33     sw    $zero, -0x10($a0)
     34     sw    $zero, -0xc($a0)
     35     sw    $zero, -8($a0)
     36     bne   $a0, $a3, .L80303748
     37      sw    $zero, -4($a0)
     38 .L80303770:
     39     and   $a3, $a1, -4
     40     beqz  $a3, .L80303790
     41      subu  $a1, $a1, $a3
     42     addu  $a3, $a3, $a0
     43 .L80303784:
     44     addiu $a0, $a0, 4
     45     bne   $a0, $a3, .L80303784
     46      sw    $zero, -4($a0)
     47 .L80303790:
     48     blez  $a1, .L803037A8
     49      nop
     50     addu  $a1, $a1, $a0
     51 .L8030379C:
     52     addiu $a0, $a0, 1
     53     bne   $a0, $a1, .L8030379C
     54      sb    $zero, -1($a0)
     55 .L803037A8:
     56     jr    $ra
     57      nop
     58 #else
     59     blt  $a1, 0xc, .L803236BC
     60      negu  $v1, $a0
     61     andi  $v1, $v1, 3
     62     beqz  $v1, .L80323660
     63      subu  $a1, $a1, $v1
     64     swl   $zero, ($a0)
     65     addu  $a0, $a0, $v1
     66 .L80323660:
     67     and   $a3, $a1, -32
     68     beqz  $a3, .L8032369C
     69      subu  $a1, $a1, $a3
     70     addu  $a3, $a3, $a0
     71 .L80323674:
     72     addiu $a0, $a0, 0x20
     73     sw    $zero, -0x20($a0)
     74     sw    $zero, -0x1c($a0)
     75     sw    $zero, -0x18($a0)
     76     sw    $zero, -0x14($a0)
     77     sw    $zero, -0x10($a0)
     78     sw    $zero, -0xc($a0)
     79     sw    $zero, -8($a0)
     80     bne   $a0, $a3, .L80323674
     81      sw    $zero, -4($a0)
     82 .L8032369C:
     83     and   $a3, $a1, -4
     84     beqz  $a3, .L803236BC
     85      subu  $a1, $a1, $a3
     86     addu  $a3, $a3, $a0
     87 .L803236B0:
     88     addiu $a0, $a0, 4
     89     bne   $a0, $a3, .L803236B0
     90      sw    $zero, -4($a0)
     91 .L803236BC:
     92     blez  $a1, .L803236D4
     93      nop
     94     addu  $a1, $a1, $a0
     95 .L803236C8:
     96     addiu $a0, $a0, 1
     97     bne   $a0, $a1, .L803236C8
     98      sb    $zero, -1($a0)
     99 .L803236D4:
    100     jr    $ra
    101 #endif
    102