From e68c9d562f7f0c729787ab984a98b6667de19188 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 17 Oct 2021 11:58:51 +1000 Subject: [PATCH] Decompile _getRate --- src/include/lib/lib_3e8c0.h | 2 +- src/lib/mp3.c | 4 +- src/lib/naudio/n_env.c | 194 +++++++++--------------------------- 3 files changed, 48 insertions(+), 152 deletions(-) diff --git a/src/include/lib/lib_3e8c0.h b/src/include/lib/lib_3e8c0.h index 299f5cdf2..8a06b3bcd 100644 --- a/src/include/lib/lib_3e8c0.h +++ b/src/include/lib/lib_3e8c0.h @@ -41,7 +41,7 @@ extern const u32 var70057750[]; u32 func0003e8c0(void); s32 n_alEnvmixerParam(void *filter, s32 paramID, void *param); u32 func0003f328(void); -u32 func0003f60c(void); +s16 _getRate(f32 vol, f32 tgt, s32 count, u16 *ratel); s16 _getVol(s16 ivol, s32 samples, s16 ratem, u16 ratel); u32 func0003f8a0(void); u32 func00040164(void); diff --git a/src/lib/mp3.c b/src/lib/mp3.c index 95497f8f5..ea43be590 100644 --- a/src/lib/mp3.c +++ b/src/lib/mp3.c @@ -592,7 +592,7 @@ glabel func00037fc0 /* 38680: 8cc6c3bc */ lw $a2,%lo(g_Mp3Vars+0x2c)($a2) /* 38684: 24e70018 */ addiu $a3,$a3,0x18 /* 38688: 468033a0 */ cvt.s.w $f14,$f6 -/* 3868c: 0c00fd83 */ jal func0003f60c +/* 3868c: 0c00fd83 */ jal _getRate /* 38690: 46802320 */ cvt.s.w $f12,$f4 /* 38694: 3c01800a */ lui $at,%hi(g_Mp3Vars+0x18+0x2) /* 38698: a422c3aa */ sh $v0,%lo(g_Mp3Vars+0x18+0x2)($at) @@ -623,7 +623,7 @@ glabel func00037fc0 /* 386fc: 8cc6c3bc */ lw $a2,%lo(g_Mp3Vars+0x2c)($a2) /* 38700: 24e7001e */ addiu $a3,$a3,0x1e /* 38704: 468053a0 */ cvt.s.w $f14,$f10 -/* 38708: 0c00fd83 */ jal func0003f60c +/* 38708: 0c00fd83 */ jal _getRate /* 3870c: 46804320 */ cvt.s.w $f12,$f8 /* 38710: 3c01800a */ lui $at,%hi(g_Mp3Vars+0x20) /* 38714: a422c3b0 */ sh $v0,%lo(g_Mp3Vars+0x20)($at) diff --git a/src/lib/naudio/n_env.c b/src/lib/naudio/n_env.c index 43c936afb..8ded2154d 100644 --- a/src/lib/naudio/n_env.c +++ b/src/lib/naudio/n_env.c @@ -748,7 +748,7 @@ glabel func0003f328 /* 3f3e8: 448b3000 */ mtc1 $t3,$f6 /* 3f3ec: 25270064 */ addiu $a3,$t1,0x64 /* 3f3f0: 46802320 */ cvt.s.w $f12,$f4 -/* 3f3f4: 0c00fd83 */ jal func0003f60c +/* 3f3f4: 0c00fd83 */ jal _getRate /* 3f3f8: 468033a0 */ cvt.s.w $f14,$f6 /* 3f3fc: 8fad0030 */ lw $t5,0x30($sp) /* 3f400: a5a20066 */ sh $v0,0x66($t5) @@ -772,7 +772,7 @@ glabel func0003f328 /* 3f448: 448f5000 */ mtc1 $t7,$f10 /* 3f44c: 2527006a */ addiu $a3,$t1,0x6a /* 3f450: 46804320 */ cvt.s.w $f12,$f8 -/* 3f454: 0c00fd83 */ jal func0003f60c +/* 3f454: 0c00fd83 */ jal _getRate /* 3f458: 468053a0 */ cvt.s.w $f14,$f10 /* 3f45c: 8fb80030 */ lw $t8,0x30($sp) /* 3f460: a702006c */ sh $v0,0x6c($t8) @@ -887,153 +887,49 @@ glabel func0003f328 /* 3f608: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0003f60c -.late_rodata -glabel var70054b34 -.word 0x477fff00 -.text -/* 3f60c: 27bdfff0 */ addiu $sp,$sp,-16 -/* 3f610: 14c0000e */ bnez $a2,.L0003f64c -/* 3f614: 00000000 */ nop -/* 3f618: 460e603e */ c.le.s $f12,$f14 -/* 3f61c: 00000000 */ nop -/* 3f620: 45000007 */ bc1f .L0003f640 -/* 3f624: 00000000 */ nop -/* 3f628: 340effff */ dli $t6,0xffff -/* 3f62c: a4ee0000 */ sh $t6,0x0($a3) -/* 3f630: 10000078 */ b .L0003f814 -/* 3f634: 24027fff */ addiu $v0,$zero,0x7fff -/* 3f638: 10000004 */ b .L0003f64c -/* 3f63c: 00000000 */ nop -.L0003f640: -/* 3f640: a4e00000 */ sh $zero,0x0($a3) -/* 3f644: 10000073 */ b .L0003f814 -/* 3f648: 24028000 */ addiu $v0,$zero,-32768 -.L0003f64c: -/* 3f64c: 44863000 */ mtc1 $a2,$f6 -/* 3f650: 3c013f80 */ lui $at,0x3f80 -/* 3f654: 44812000 */ mtc1 $at,$f4 -/* 3f658: 46803220 */ cvt.s.w $f8,$f6 -/* 3f65c: 46082283 */ div.s $f10,$f4,$f8 -/* 3f660: e7aa0008 */ swc1 $f10,0x8($sp) -/* 3f664: 3c013f80 */ lui $at,0x3f80 -/* 3f668: 44818000 */ mtc1 $at,$f16 -/* 3f66c: 00000000 */ nop -/* 3f670: 4610703c */ c.lt.s $f14,$f16 -/* 3f674: 00000000 */ nop -/* 3f678: 45000004 */ bc1f .L0003f68c -/* 3f67c: 00000000 */ nop -/* 3f680: 3c013f80 */ lui $at,0x3f80 -/* 3f684: 44817000 */ mtc1 $at,$f14 -/* 3f688: 00000000 */ nop -.L0003f68c: -/* 3f68c: 44809000 */ mtc1 $zero,$f18 -/* 3f690: 00000000 */ nop -/* 3f694: 4612603e */ c.le.s $f12,$f18 -/* 3f698: 00000000 */ nop -/* 3f69c: 45000004 */ bc1f .L0003f6b0 -/* 3f6a0: 00000000 */ nop -/* 3f6a4: 3c013f80 */ lui $at,0x3f80 -/* 3f6a8: 44816000 */ mtc1 $at,$f12 -/* 3f6ac: 00000000 */ nop -.L0003f6b0: -/* 3f6b0: 460c7181 */ sub.s $f6,$f14,$f12 -/* 3f6b4: c7a40008 */ lwc1 $f4,0x8($sp) -/* 3f6b8: 3c014100 */ lui $at,0x4100 -/* 3f6bc: 44815000 */ mtc1 $at,$f10 -/* 3f6c0: 46043202 */ mul.s $f8,$f6,$f4 -/* 3f6c4: 00000000 */ nop -/* 3f6c8: 460a4402 */ mul.s $f16,$f8,$f10 -/* 3f6cc: e7b00004 */ swc1 $f16,0x4($sp) -/* 3f6d0: c7b20004 */ lwc1 $f18,0x4($sp) -/* 3f6d4: 4600918d */ trunc.w.s $f6,$f18 -/* 3f6d8: 44183000 */ mfc1 $t8,$f6 -/* 3f6dc: 00000000 */ nop -/* 3f6e0: a7b8000e */ sh $t8,0xe($sp) -/* 3f6e4: 87b9000e */ lh $t9,0xe($sp) -/* 3f6e8: c7a40004 */ lwc1 $f4,0x4($sp) -/* 3f6ec: 44994000 */ mtc1 $t9,$f8 -/* 3f6f0: 00000000 */ nop -/* 3f6f4: 468042a0 */ cvt.s.w $f10,$f8 -/* 3f6f8: 460a2401 */ sub.s $f16,$f4,$f10 -/* 3f6fc: e7b00000 */ swc1 $f16,0x0($sp) -/* 3f700: 87a8000e */ lh $t0,0xe($sp) -/* 3f704: 2509ffff */ addiu $t1,$t0,-1 -/* 3f708: a7a9000e */ sh $t1,0xe($sp) -/* 3f70c: 3c013f80 */ lui $at,0x3f80 -/* 3f710: 44813000 */ mtc1 $at,$f6 -/* 3f714: c7b20000 */ lwc1 $f18,0x0($sp) -/* 3f718: 46069200 */ add.s $f8,$f18,$f6 -/* 3f71c: e7a80000 */ swc1 $f8,0x0($sp) -/* 3f720: c7a40000 */ lwc1 $f4,0x0($sp) -/* 3f724: 4600228d */ trunc.w.s $f10,$f4 -/* 3f728: 440b5000 */ mfc1 $t3,$f10 -/* 3f72c: 00000000 */ nop -/* 3f730: a7ab000c */ sh $t3,0xc($sp) -/* 3f734: 87ac000e */ lh $t4,0xe($sp) -/* 3f738: 87ad000c */ lh $t5,0xc($sp) -/* 3f73c: 018d7021 */ addu $t6,$t4,$t5 -/* 3f740: a7ae000e */ sh $t6,0xe($sp) -/* 3f744: 87af000c */ lh $t7,0xc($sp) -/* 3f748: c7b00000 */ lwc1 $f16,0x0($sp) -/* 3f74c: 448f9000 */ mtc1 $t7,$f18 -/* 3f750: 00000000 */ nop -/* 3f754: 468091a0 */ cvt.s.w $f6,$f18 -/* 3f758: 46068201 */ sub.s $f8,$f16,$f6 -/* 3f75c: e7a80000 */ swc1 $f8,0x0($sp) -/* 3f760: 3c017005 */ lui $at,%hi(var70054b34) -/* 3f764: c4244b34 */ lwc1 $f4,%lo(var70054b34)($at) -/* 3f768: c7aa0000 */ lwc1 $f10,0x0($sp) -/* 3f76c: 24190001 */ addiu $t9,$zero,0x1 -/* 3f770: 460a2482 */ mul.s $f18,$f4,$f10 -/* 3f774: 4458f800 */ cfc1 $t8,$31 -/* 3f778: 44d9f800 */ ctc1 $t9,$31 -/* 3f77c: 00000000 */ nop -/* 3f780: 46009424 */ cvt.w.s $f16,$f18 -/* 3f784: 4459f800 */ cfc1 $t9,$31 -/* 3f788: 00000000 */ nop -/* 3f78c: 33210004 */ andi $at,$t9,0x4 -/* 3f790: 33390078 */ andi $t9,$t9,0x78 -/* 3f794: 13200014 */ beqz $t9,.L0003f7e8 -/* 3f798: 00000000 */ nop -/* 3f79c: 3c014f00 */ lui $at,0x4f00 -/* 3f7a0: 44818000 */ mtc1 $at,$f16 -/* 3f7a4: 24190001 */ addiu $t9,$zero,0x1 -/* 3f7a8: 46109401 */ sub.s $f16,$f18,$f16 -/* 3f7ac: 44d9f800 */ ctc1 $t9,$31 -/* 3f7b0: 00000000 */ nop -/* 3f7b4: 46008424 */ cvt.w.s $f16,$f16 -/* 3f7b8: 4459f800 */ cfc1 $t9,$31 -/* 3f7bc: 00000000 */ nop -/* 3f7c0: 33210004 */ andi $at,$t9,0x4 -/* 3f7c4: 33390078 */ andi $t9,$t9,0x78 -/* 3f7c8: 17200005 */ bnez $t9,.L0003f7e0 -/* 3f7cc: 00000000 */ nop -/* 3f7d0: 44198000 */ mfc1 $t9,$f16 -/* 3f7d4: 3c018000 */ lui $at,0x8000 -/* 3f7d8: 10000007 */ b .L0003f7f8 -/* 3f7dc: 0321c825 */ or $t9,$t9,$at -.L0003f7e0: -/* 3f7e0: 10000005 */ b .L0003f7f8 -/* 3f7e4: 2419ffff */ addiu $t9,$zero,-1 -.L0003f7e8: -/* 3f7e8: 44198000 */ mfc1 $t9,$f16 -/* 3f7ec: 00000000 */ nop -/* 3f7f0: 0720fffb */ bltz $t9,.L0003f7e0 -/* 3f7f4: 00000000 */ nop -.L0003f7f8: -/* 3f7f8: 44d8f800 */ ctc1 $t8,$31 -/* 3f7fc: a4f90000 */ sh $t9,0x0($a3) -/* 3f800: 00000000 */ nop -/* 3f804: 10000003 */ b .L0003f814 -/* 3f808: 87a2000e */ lh $v0,0xe($sp) -/* 3f80c: 10000001 */ b .L0003f814 -/* 3f810: 00000000 */ nop -.L0003f814: -/* 3f814: 03e00008 */ jr $ra -/* 3f818: 27bd0010 */ addiu $sp,$sp,0x10 -); +s16 _getRate(f32 vol, f32 tgt, s32 count, u16 *ratel) +{ + s16 s; + s16 tmp; + f32 invn; + f32 a; + f32 f; + + if (count == 0) { + if (tgt >= vol) { + *ratel = 0xffff; + return 0x7fff; + } else { + *ratel = 0; + return -0x8000; + } + } + + invn = 1 / (f32) count; + + if (tgt < 1) { + tgt = 1; + } + + if (vol <= 0) { + vol = 1; + } + + a = (tgt - vol) * invn * 8; + s = a; + + f = a - s; + s--; + f++; + + tmp = f; + s += tmp; + f -= tmp; + + *ratel = 65535 * f; + + return s; +} s16 _getVol(s16 ivol, s32 samples, s16 ratem, u16 ratel) {