From 9aa70573ad7d087e3121de3d445736a798301acb Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 20 May 2020 16:45:50 +0100 Subject: [PATCH] split libmath --- arm9/arm9.lcf | 4 +- arm9/asm/MATH.s | 25 ++++++++++++ arm9/asm/{libmath.s => MATH_crc.s} | 64 ------------------------------ arm9/asm/MATH_dgt.s | 47 ++++++++++++++++++++++ 4 files changed, 75 insertions(+), 65 deletions(-) create mode 100644 arm9/asm/MATH.s rename arm9/asm/{libmath.s => MATH_crc.s} (78%) create mode 100644 arm9/asm/MATH_dgt.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index f1dc7c8d9..9035d69e0 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -244,7 +244,9 @@ SECTIONS { CTRDG_flash_MX29L010.o (.text) CTRDG_flash_MX29L512.o (.text) CTRDG_task.o (.text) - libmath.o (.text) + MATH.o (.text) + MATH_dgt.o (.text) + MATH_crc.o (.text) libstd.o (.text) /* C standard library */ libc.o (.text) diff --git a/arm9/asm/MATH.s b/arm9/asm/MATH.s new file mode 100644 index 000000000..8e127de05 --- /dev/null +++ b/arm9/asm/MATH.s @@ -0,0 +1,25 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start MATH_CountPopulation +MATH_CountPopulation: ; 0x020DDC5C + ldr r1, _020DDC94 ; =0x55555555 + ldr r2, _020DDC98 ; =0x33333333 + and r1, r1, r0, lsr #0x1 + sub r0, r0, r1 + and r1, r0, r2 + and r0, r2, r0, lsr #0x2 + add r1, r1, r0 + ldr r0, _020DDC9C ; =0x0F0F0F0F + add r1, r1, r1, lsr #0x4 + and r0, r1, r0 + add r0, r0, r0, lsr #0x8 + add r0, r0, r0, lsr #0x10 + and r0, r0, #0xff + bx lr + .balign 4 +_020DDC94: .word 0x55555555 +_020DDC98: .word 0x33333333 +_020DDC9C: .word 0x0F0F0F0F diff --git a/arm9/asm/libmath.s b/arm9/asm/MATH_crc.s similarity index 78% rename from arm9/asm/libmath.s rename to arm9/asm/MATH_crc.s index e841f5da0..2b9b8f26d 100644 --- a/arm9/asm/libmath.s +++ b/arm9/asm/MATH_crc.s @@ -3,70 +3,6 @@ .text - arm_func_start MATH_CountPopulation -MATH_CountPopulation: ; 0x020DDC5C - ldr r1, _020DDC94 ; =0x55555555 - ldr r2, _020DDC98 ; =0x33333333 - and r1, r1, r0, lsr #0x1 - sub r0, r0, r1 - and r1, r0, r2 - and r0, r2, r0, lsr #0x2 - add r1, r1, r0 - ldr r0, _020DDC9C ; =0x0F0F0F0F - add r1, r1, r1, lsr #0x4 - and r0, r1, r0 - add r0, r0, r0, lsr #0x8 - add r0, r0, r0, lsr #0x10 - and r0, r0, #0xff - bx lr - .balign 4 -_020DDC94: .word 0x55555555 -_020DDC98: .word 0x33333333 -_020DDC9C: .word 0x0F0F0F0F - - arm_func_start MATH_CalcSHA1 -MATH_CalcSHA1: ; 0x020DDCA0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x68 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl DGT_Hash2Reset -_020DDCBC: ; 0x020DDCBC - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl DGT_Hash2SetSource -_020DDCCC: ; 0x020DDCCC - add r0, sp, #0x0 - mov r1, r6 - bl DGT_Hash2GetDigest - add sp, sp, #0x68 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start MATH_CalcMD5 -MATH_CalcMD5: ; 0x020DDCE4 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x58 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl DGT_Hash1Reset -_020DDD00: ; 0x020DDD00 - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl DGT_Hash1SetSource - add r1, sp, #0x0 - mov r0, r6 - bl DGT_Hash1GetDigest_R - add sp, sp, #0x58 - ldmia sp!, {r4-r6,lr} - bx lr - arm_func_start MATH_CalcCRC32 MATH_CalcCRC32: ; 0x020DDD28 stmdb sp!, {lr} diff --git a/arm9/asm/MATH_dgt.s b/arm9/asm/MATH_dgt.s new file mode 100644 index 000000000..12d05588d --- /dev/null +++ b/arm9/asm/MATH_dgt.s @@ -0,0 +1,47 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start MATH_CalcSHA1 +MATH_CalcSHA1: ; 0x020DDCA0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x68 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl DGT_Hash2Reset +_020DDCBC: ; 0x020DDCBC + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl DGT_Hash2SetSource +_020DDCCC: ; 0x020DDCCC + add r0, sp, #0x0 + mov r1, r6 + bl DGT_Hash2GetDigest + add sp, sp, #0x68 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start MATH_CalcMD5 +MATH_CalcMD5: ; 0x020DDCE4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x58 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl DGT_Hash1Reset +_020DDD00: ; 0x020DDD00 + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl DGT_Hash1SetSource + add r1, sp, #0x0 + mov r0, r6 + bl DGT_Hash1GetDigest_R + add sp, sp, #0x58 + ldmia sp!, {r4-r6,lr} + bx lr