From 1fa480bb17076f3e353ed3f32ca1413da6d66000 Mon Sep 17 00:00:00 2001 From: David Benepe Date: Fri, 3 Jul 2020 19:39:02 -0500 Subject: [PATCH] Decompiled memcpy_strlen_strchr_0CED70.c to string.c --- .../memcpy_strlen_strchr_0CED70/memcpy.s | 15 -------- .../memcpy_strlen_strchr_0CED70/strchr.s | 26 -------------- .../memcpy_strlen_strchr_0CED70/strlen.s | 14 -------- include/types.h | 2 ++ src/mips1/memcpy_strlen_strchr_0CED70.c | 9 ----- src/mips2/string.c | 34 +++++++++++++++++++ 6 files changed, 36 insertions(+), 64 deletions(-) delete mode 100644 asm/non_matchings/memcpy_strlen_strchr_0CED70/memcpy.s delete mode 100644 asm/non_matchings/memcpy_strlen_strchr_0CED70/strchr.s delete mode 100644 asm/non_matchings/memcpy_strlen_strchr_0CED70/strlen.s delete mode 100644 src/mips1/memcpy_strlen_strchr_0CED70.c create mode 100644 src/mips2/string.c diff --git a/asm/non_matchings/memcpy_strlen_strchr_0CED70/memcpy.s b/asm/non_matchings/memcpy_strlen_strchr_0CED70/memcpy.s deleted file mode 100644 index f7b87510..00000000 --- a/asm/non_matchings/memcpy_strlen_strchr_0CED70/memcpy.s +++ /dev/null @@ -1,15 +0,0 @@ -glabel memcpy -/* 0CED70 800CE170 00801025 */ move $v0, $a0 -/* 0CED74 800CE174 10C00007 */ beqz $a2, .L800CE194 -/* 0CED78 800CE178 00A01825 */ move $v1, $a1 -.L800CE17C: -/* 0CED7C 800CE17C 906E0000 */ lbu $t6, ($v1) -/* 0CED80 800CE180 24C6FFFF */ addiu $a2, $a2, -1 -/* 0CED84 800CE184 24420001 */ addiu $v0, $v0, 1 -/* 0CED88 800CE188 24630001 */ addiu $v1, $v1, 1 -/* 0CED8C 800CE18C 14C0FFFB */ bnez $a2, .L800CE17C -/* 0CED90 800CE190 A04EFFFF */ sb $t6, -1($v0) -.L800CE194: -/* 0CED94 800CE194 03E00008 */ jr $ra -/* 0CED98 800CE198 00801025 */ move $v0, $a0 - diff --git a/asm/non_matchings/memcpy_strlen_strchr_0CED70/strchr.s b/asm/non_matchings/memcpy_strlen_strchr_0CED70/strchr.s deleted file mode 100644 index f6992119..00000000 --- a/asm/non_matchings/memcpy_strlen_strchr_0CED70/strchr.s +++ /dev/null @@ -1,26 +0,0 @@ -glabel strchr -/* 0CEDC4 800CE1C4 90830000 */ lbu $v1, ($a0) -/* 0CEDC8 800CE1C8 30AE00FF */ andi $t6, $a1, 0xff -/* 0CEDCC 800CE1CC 30A200FF */ andi $v0, $a1, 0xff -/* 0CEDD0 800CE1D0 51C3000A */ beql $t6, $v1, .L800CE1FC -/* 0CEDD4 800CE1D4 00801025 */ move $v0, $a0 -.L800CE1D8: -/* 0CEDD8 800CE1D8 54600004 */ bnezl $v1, .L800CE1EC -/* 0CEDDC 800CE1DC 90830001 */ lbu $v1, 1($a0) -/* 0CEDE0 800CE1E0 03E00008 */ jr $ra -/* 0CEDE4 800CE1E4 00001025 */ move $v0, $zero - -/* 0CEDE8 800CE1E8 90830001 */ lbu $v1, 1($a0) -.L800CE1EC: -/* 0CEDEC 800CE1EC 24840001 */ addiu $a0, $a0, 1 -/* 0CEDF0 800CE1F0 1443FFF9 */ bne $v0, $v1, .L800CE1D8 -/* 0CEDF4 800CE1F4 00000000 */ nop -/* 0CEDF8 800CE1F8 00801025 */ move $v0, $a0 -.L800CE1FC: -/* 0CEDFC 800CE1FC 03E00008 */ jr $ra -/* 0CEE00 800CE200 00000000 */ nop - -/* 0CEE04 800CE204 00000000 */ nop -/* 0CEE08 800CE208 00000000 */ nop -/* 0CEE0C 800CE20C 00000000 */ nop - diff --git a/asm/non_matchings/memcpy_strlen_strchr_0CED70/strlen.s b/asm/non_matchings/memcpy_strlen_strchr_0CED70/strlen.s deleted file mode 100644 index 7281ab25..00000000 --- a/asm/non_matchings/memcpy_strlen_strchr_0CED70/strlen.s +++ /dev/null @@ -1,14 +0,0 @@ -glabel strlen -/* 0CED9C 800CE19C 908E0000 */ lbu $t6, ($a0) -/* 0CEDA0 800CE1A0 00801825 */ move $v1, $a0 -/* 0CEDA4 800CE1A4 11C00005 */ beqz $t6, .L800CE1BC -/* 0CEDA8 800CE1A8 00000000 */ nop -/* 0CEDAC 800CE1AC 906F0001 */ lbu $t7, 1($v1) -.L800CE1B0: -/* 0CEDB0 800CE1B0 24630001 */ addiu $v1, $v1, 1 -/* 0CEDB4 800CE1B4 55E0FFFE */ bnezl $t7, .L800CE1B0 -/* 0CEDB8 800CE1B8 906F0001 */ lbu $t7, 1($v1) -.L800CE1BC: -/* 0CEDBC 800CE1BC 03E00008 */ jr $ra -/* 0CEDC0 800CE1C0 00641023 */ subu $v0, $v1, $a0 - diff --git a/include/types.h b/include/types.h index f3fbbfa0..566cd92f 100644 --- a/include/types.h +++ b/include/types.h @@ -12,6 +12,8 @@ typedef signed long long s64; typedef float f32; typedef double f64; +typedef u32 size_t; + #ifndef NULL #define NULL 0 #endif diff --git a/src/mips1/memcpy_strlen_strchr_0CED70.c b/src/mips1/memcpy_strlen_strchr_0CED70.c deleted file mode 100644 index 0a606a76..00000000 --- a/src/mips1/memcpy_strlen_strchr_0CED70.c +++ /dev/null @@ -1,9 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800CE170 */ - -#include "types.h" -#include "macros.h" - -GLOBAL_ASM("asm/non_matchings/memcpy_strlen_strchr_0CED70/memcpy.s") -GLOBAL_ASM("asm/non_matchings/memcpy_strlen_strchr_0CED70/strlen.s") -GLOBAL_ASM("asm/non_matchings/memcpy_strlen_strchr_0CED70/strchr.s") diff --git a/src/mips2/string.c b/src/mips2/string.c new file mode 100644 index 00000000..9d64e756 --- /dev/null +++ b/src/mips2/string.c @@ -0,0 +1,34 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800CE170 */ + +#include "types.h" +#include "macros.h" + +void *memcpy(void *dst, const void *src, size_t size) { + u8 *_dst = dst; + const u8 *_src = src; + while (size > 0) { + *_dst++ = *_src++; + size--; + } + return dst; +} + +size_t strlen(const char *str) { + const u8 *ptr = (const u8 *) str; + while (*ptr) { + ptr++; + } + return (const char *) ptr - str; +} + +char *strchr(const char *str, s32 ch) { + u8 c = ch; + while (*(u8 *)str != c) { + if (*(u8 *)str == 0) { + return NULL; + } + str++; + } + return (char *) str; +}