From e2d7d3d56746aaa0149852df0f60034b4264717f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 5 Oct 2021 21:14:14 +1000 Subject: [PATCH] Disassemble bcmp --- ld/libfiles.ntsc-beta.inc | 2 +- ld/libfiles.ntsc-final.inc | 2 +- ld/libfiles.pal-final.inc | 2 +- src/game/pak/pak.c | 1 - src/include/lib/lib_4e090.h | 7 --- src/lib/lib_070d0.c | 1 - src/lib/lib_4e090.c | 1 - src/lib/lib_51570.c | 1 - src/lib/ultra/io/contpfs.c | 1 - src/lib/ultra/io/pfsfilestate.c | 1 - src/lib/ultra/io/pfsinitpak.c | 1 - src/lib/ultra/io/pfsresizefile.c | 1 - src/lib/ultra/libc/bcmp.s | 88 ++++++++++++++++++++++++++++++++ 13 files changed, 91 insertions(+), 18 deletions(-) delete mode 100644 src/include/lib/lib_4e090.h create mode 100644 src/lib/ultra/libc/bcmp.s diff --git a/ld/libfiles.ntsc-beta.inc b/ld/libfiles.ntsc-beta.inc index b2e37e8a0..ff4e615a8 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.inc @@ -176,7 +176,7 @@ build/ROMID/lib/ultra/io/pfsdeletefile.o (section); \ build/ROMID/lib/ultra/io/siacs.o (section); \ build/ROMID/lib/ultra/io/pfschecker.o (section); \ - build/ROMID/lib/lib_4e090.o (section); \ + build/ROMID/lib/ultra/libc/bcmp.o (section); \ build/ROMID/lib/ultra/os/getmemsize.o (section); \ build/ROMID/lib/ultra/os/maptlb.o (section); \ build/ROMID/lib/ultra/io/aisetfreq.o (section); \ diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index 5b5fbb24c..14ddcf0f1 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -174,7 +174,7 @@ build/ROMID/lib/ultra/io/pfsallocatefile.o (section); \ build/ROMID/lib/ultra/io/pfsdeletefile.o (section); \ build/ROMID/lib/ultra/io/pfschecker.o (section); \ - build/ROMID/lib/lib_4e090.o (section); \ + build/ROMID/lib/ultra/libc/bcmp.o (section); \ build/ROMID/lib/ultra/os/maptlb.o (section); \ build/ROMID/lib/ultra/io/aisetfreq.o (section); \ build/ROMID/lib/ultra/io/aisetnextbuf.o (section); \ diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index ba5dce7c4..e93c8c714 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -173,7 +173,7 @@ build/ROMID/lib/ultra/io/pfsallocatefile.o (section); \ build/ROMID/lib/ultra/io/pfsdeletefile.o (section); \ build/ROMID/lib/ultra/io/pfschecker.o (section); \ - build/ROMID/lib/lib_4e090.o (section); \ + build/ROMID/lib/ultra/libc/bcmp.o (section); \ build/ROMID/lib/ultra/os/maptlb.o (section); \ build/ROMID/lib/ultra/io/aisetfreq.o (section); \ build/ROMID/lib/ultra/libc/ll.o (section); \ diff --git a/src/game/pak/pak.c b/src/game/pak/pak.c index a142e7859..281bdcf54 100644 --- a/src/game/pak/pak.c +++ b/src/game/pak/pak.c @@ -14,7 +14,6 @@ #include "lib/main.h" #include "lib/memory.h" #include "lib/rng.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/include/lib/lib_4e090.h b/src/include/lib/lib_4e090.h deleted file mode 100644 index b80306f1d..000000000 --- a/src/include/lib/lib_4e090.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _IN_LIB_LIB_4E090_H -#define _IN_LIB_LIB_4E090_H -#include -#include "data.h" -#include "types.h" - -#endif diff --git a/src/lib/lib_070d0.c b/src/lib/lib_070d0.c index a22c3a83f..68ebdf8fc 100644 --- a/src/lib/lib_070d0.c +++ b/src/lib/lib_070d0.c @@ -5,7 +5,6 @@ #include "lib/lib_074f0.h" #include "lib/dma.h" #include "lib/lib_48150.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/lib_4e090.c b/src/lib/lib_4e090.c index 7511c3b71..e5284b59b 100644 --- a/src/lib/lib_4e090.c +++ b/src/lib/lib_4e090.c @@ -3,7 +3,6 @@ #include "constants.h" #include "bss.h" #include "lib/libc/ll.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/lib_51570.c b/src/lib/lib_51570.c index 7d365bb62..4b4568d1d 100644 --- a/src/lib/lib_51570.c +++ b/src/lib/lib_51570.c @@ -2,7 +2,6 @@ #include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/contpfs.c b/src/lib/ultra/io/contpfs.c index c3513cf1c..5d9c090e6 100644 --- a/src/lib/ultra/io/contpfs.c +++ b/src/lib/ultra/io/contpfs.c @@ -2,7 +2,6 @@ #include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/pfsfilestate.c b/src/lib/ultra/io/pfsfilestate.c index 1c166b25c..05ea04c4e 100644 --- a/src/lib/ultra/io/pfsfilestate.c +++ b/src/lib/ultra/io/pfsfilestate.c @@ -2,7 +2,6 @@ #include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/pfsinitpak.c b/src/lib/ultra/io/pfsinitpak.c index ce4e8ac63..d34151887 100644 --- a/src/lib/ultra/io/pfsinitpak.c +++ b/src/lib/ultra/io/pfsinitpak.c @@ -3,7 +3,6 @@ #include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/pfsresizefile.c b/src/lib/ultra/io/pfsresizefile.c index db24195d7..070633f20 100644 --- a/src/lib/ultra/io/pfsresizefile.c +++ b/src/lib/ultra/io/pfsresizefile.c @@ -2,7 +2,6 @@ #include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/libc/bcmp.s b/src/lib/ultra/libc/bcmp.s new file mode 100644 index 000000000..a2e026659 --- /dev/null +++ b/src/lib/ultra/libc/bcmp.s @@ -0,0 +1,88 @@ +#include "macros.inc" +.set noat +.set noreorder + +.section .text + +glabel bcmp + slti $at, $a2, 0x10 + bnez $at, .L0004e174 + xor $v0, $a0, $a1 + andi $v0, $v0, 0x3 + bnez $v0, .L0004e108 + negu $t8, $a0 + andi $t8, $t8, 0x3 + beqz $t8, .L0004e0cc + subu $a2, $a2, $t8 + or $v0, $v1, $zero + lwl $v0, 0x0($a0) + lwl $v1, 0x0($a1) + addu $a0, $a0, $t8 + addu $a1, $a1, $t8 + bne $v0, $v1, .L0004e1a4 +.L0004e0cc: + addiu $at, $zero, -4 + and $a3, $a2, $at + beqz $a3, .L0004e174 + subu $a2, $a2, $a3 + addu $a3, $a3, $a0 + lw $v0, 0x0($a0) +.L0004e0e4: + lw $v1, 0x0($a1) + addiu $a0, $a0, 0x4 + addiu $a1, $a1, 0x4 + bne $v0, $v1, .L0004e1a4 + nop + bnel $a0, $a3, .L0004e0e4 + lw $v0, 0x0($a0) + b .L0004e174 + nop +.L0004e108: + negu $a3, $a1 + andi $a3, $a3, 0x3 + beqz $a3, .L0004e13c + subu $a2, $a2, $a3 + addu $a3, $a3, $a0 + lbu $v0, 0x0($a0) +.L0004e120: + lbu $v1, 0x0($a1) + addiu $a0, $a0, 0x1 + addiu $a1, $a1, 0x1 + bne $v0, $v1, .L0004e1a4 + nop + bnel $a0, $a3, .L0004e120 + lbu $v0, 0x0($a0) +.L0004e13c: + addiu $at, $zero, -4 + and $a3, $a2, $at + beqz $a3, .L0004e174 + subu $a2, $a2, $a3 + addu $a3, $a3, $a0 + lwl $v0, 0x0($a0) +.L0004e154: + lw $v1, 0x0($a1) + lwr $v0, 0x3($a0) + addiu $a0, $a0, 0x4 + addiu $a1, $a1, 0x4 + bne $v0, $v1, .L0004e1a4 + nop + bnel $a0, $a3, .L0004e154 + lwl $v0, 0x0($a0) +.L0004e174: + blez $a2, .L0004e19c + addu $a3, $a2, $a0 + lbu $v0, 0x0($a0) +.L0004e180: + lbu $v1, 0x0($a1) + addiu $a0, $a0, 0x1 + addiu $a1, $a1, 0x1 + bne $v0, $v1, .L0004e1a4 + nop + bnel $a0, $a3, .L0004e180 + lbu $v0, 0x0($a0) +.L0004e19c: + jr $ra + or $v0, $zero, $zero +.L0004e1a4: + jr $ra + addiu $v0, $zero, 0x1