sm64

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

decompress.s (2123B)


      1 // assembler directives
      2 .set noat      // allow manual use of $at
      3 .set noreorder // don't insert nops after branches
      4 
      5 #include "macros.inc"
      6 
      7 
      8 .section .text, "ax"
      9 
     10 // This file is handwritten.
     11 
     12 glabel decompress
     13 #if !defined(VERSION_JP) && !defined(VERSION_US)
     14     lw    $a3, 8($a0)
     15     lw    $t9, 0xc($a0)
     16     lw    $t8, 4($a0)
     17     add   $a3, $a3, $a0
     18     add   $t9, $t9, $a0
     19     or    $a2, $zero, $zero
     20     addi  $a0, $a0, 0x10
     21     add   $t8, $t8, $a1
     22 .L8026ED80:
     23     bnezl $a2, .L8026ED98
     24      slt   $t1, $t0, $zero
     25     lw    $t0, ($a0)
     26     li    $a2, 32
     27     addi  $a0, $a0, 4
     28     slt   $t1, $t0, $zero
     29 .L8026ED98:
     30     beql  $t1, $zero, .L8026EDB8
     31      lhu   $t2, ($a3)
     32     lb    $t2, ($t9)
     33     addi  $t9, $t9, 1
     34     addi  $a1, $a1, 1
     35     b     .L8026EDE4
     36      sb    $t2, -1($a1)
     37     lhu   $t2, ($a3)
     38 .L8026EDB8:
     39     addi  $a3, $a3, 2
     40     srl   $t3, $t2, 0xc
     41     andi  $t2, $t2, 0xfff
     42     sub   $t1, $a1, $t2
     43     addi  $t3, $t3, 3
     44 .L8026EDCC:
     45     lb    $t2, -1($t1)
     46     addi  $t3, $t3, -1
     47     addi  $t1, $t1, 1
     48     addi  $a1, $a1, 1
     49     bnez  $t3, .L8026EDCC
     50      sb    $t2, -1($a1)
     51 .L8026EDE4:
     52     sll   $t0, $t0, 1
     53     bne   $a1, $t8, .L8026ED80
     54      addi  $a2, $a2, -1
     55     jr    $ra
     56      nop
     57 #else
     58     lw    $t8, 4($a0)
     59     lw    $a3, 8($a0)
     60     lw    $t9, 0xc($a0)
     61     move  $a2, $zero
     62     add   $t8, $t8, $a1
     63     add   $a3, $a3, $a0
     64     add   $t9, $t9, $a0
     65     addi  $a0, $a0, 0x10
     66 .L8027EF50:
     67     bnez  $a2, .L8027EF64
     68      nop
     69     lw    $t0, ($a0)
     70     li    $a2, 32
     71     addi  $a0, $a0, 4
     72 .L8027EF64:
     73     slt   $t1, $t0, $zero
     74     beqz  $t1, .L8027EF88
     75      nop
     76     lb    $t2, ($t9)
     77     addi  $t9, $t9, 1
     78     sb    $t2, ($a1)
     79     addi  $a1, $a1, 1
     80     b     .L8027EFBC
     81      nop
     82 .L8027EF88:
     83     lhu   $t2, ($a3)
     84     addi  $a3, $a3, 2
     85     srl   $t3, $t2, 0xc
     86     andi  $t2, $t2, 0xfff
     87     sub   $t1, $a1, $t2
     88     addi  $t3, $t3, 3
     89 .L8027EFA0:
     90     lb    $t2, -1($t1)
     91     addi  $t3, $t3, -1
     92     addi  $t1, $t1, 1
     93     sb    $t2, ($a1)
     94     addi  $a1, $a1, 1
     95     bnez  $t3, .L8027EFA0
     96      nop
     97 .L8027EFBC:
     98     sll   $t0, $t0, 1
     99     addi  $a2, $a2, -1
    100     bne   $a1, $t8, .L8027EF50
    101      nop
    102     jr    $ra
    103      nop
    104 #endif