From 5ee45932e0034f8148653b2dea9214f745e630df Mon Sep 17 00:00:00 2001 From: pagefault <> Date: Thu, 6 Sep 2001 14:47:07 +0000 Subject: [PATCH] Updated 8-point interpolation --- zsnes/src/cpu/dspproc.asm | 32 ++++++++++++++++++++++++++++++++ zsnes/src/zip/fir_proc.cpp | 23 ++++++++++++----------- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/zsnes/src/cpu/dspproc.asm b/zsnes/src/cpu/dspproc.asm index c65f6a8e..9d49d3e6 100644 --- a/zsnes/src/cpu/dspproc.asm +++ b/zsnes/src/cpu/dspproc.asm @@ -3513,6 +3513,11 @@ WaveIndex times 8 dd 0 ;%%DontFilter1 ; EXTSYM fir_interpolate +EXTSYM fir_lut + +section .data +NEWSYM fir_tmp,dd 0,0 +section .text %macro DSPInterpolate 1 @@ -3558,10 +3563,37 @@ EXTSYM fir_interpolate jmp %%end %%fir_interpolate +%if 1 + xor eax,eax + mov ebx,[BRRPlace0+%1*8] + mov al,[BRRPlace0+%1*8+3] + shl eax,2 + and ebx,0FFFFFFh + add ebx,1000h + shr ebx,9 + and ebx,0FFF0h + add ebx,[fir_lut] + movq mm0,[eax+PSampleBuf+(%1*26*4)] + packssdw mm0,[eax+PSampleBuf+(%1*26*4)+8] + movq mm1,[eax+PSampleBuf+(%1*26*4)+16] + packssdw mm1,[eax+PSampleBuf+(%1*26*4)+24] + movq mm2,[ebx] + movq mm3,[ebx+8] + pmaddwd mm0,mm2 + pmaddwd mm1,mm3 + paddd mm0,mm1 + movq [fir_tmp],mm0 + emms + mov eax,[fir_tmp] + add eax,[fir_tmp+4] + sar eax,14 + +%else push dword PSampleBuf+(%1*26*4) push dword [BRRPlace0+%1*8] call fir_interpolate add esp,+8 +%endif cmp eax,32767 jle %%clip1 mov eax,32767 diff --git a/zsnes/src/zip/fir_proc.cpp b/zsnes/src/zip/fir_proc.cpp index d77e66e0..860e2726 100644 --- a/zsnes/src/zip/fir_proc.cpp +++ b/zsnes/src/zip/fir_proc.cpp @@ -9,11 +9,8 @@ * */ -#ifdef __LINUX__ -#include "../gblhdr.h" -#else #include -#endif +#include #ifndef log2 inline float log2(float f) { @@ -55,7 +52,7 @@ inline float log2(float f) { ------------------------------------------------------------------------------------------------ */ // quantizer scale of window coefs -#define WFIR_QUANTBITS 15 +#define WFIR_QUANTBITS 14 #define WFIR_QUANTSCALE (1L<_LScale)?_LScale:_LCoef) ); + lut[_LIdx+_LCc] = (signed short)( (_LCoef<-_LScale)?-_LScale:((_LCoef>_LScale)?_LScale:_LCoef) ); } } for( _LPcl=0;_LPcl