|
From: <sag...@us...> - 2013-01-19 15:14:48
|
Revision: 1501
http://sourceforge.net/p/modplug/code/1501
Author: saga-games
Date: 2013-01-19 15:14:38 +0000 (Sat, 19 Jan 2013)
Log Message:
-----------
[Ref] Eliminated dead, never-to-be-used again asm code.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Fastmix.cpp
trunk/OpenMPT/soundlib/Mmx_mix.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Tables.cpp
trunk/OpenMPT/soundlib/Waveform.cpp
Modified: trunk/OpenMPT/soundlib/Fastmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Fastmix.cpp 2013-01-19 13:56:24 UTC (rev 1500)
+++ trunk/OpenMPT/soundlib/Fastmix.cpp 2013-01-19 15:14:38 UTC (rev 1501)
@@ -18,10 +18,7 @@
#include <math.h>
#endif
-// rewbs.resamplerConf
-#include "../mptrack/mptrack.h"
#include "WindowedFIR.h"
-// end rewbs.resamplerConf
#pragma bss_seg(".modplug")
Modified: trunk/OpenMPT/soundlib/Mmx_mix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Mmx_mix.cpp 2013-01-19 13:56:24 UTC (rev 1500)
+++ trunk/OpenMPT/soundlib/Mmx_mix.cpp 2013-01-19 15:14:38 UTC (rev 1501)
@@ -79,8 +79,6 @@
#pragma warning (disable:4799) // function has no EMMS instruction
-extern int SpectrumSinusTable[256*2];
-
// -> CODE#0024 UPDATE#04
// -> DESC="wav export update"
//const float _f2ic = (float)(1 << 28);
@@ -216,1072 +214,6 @@
}
-//////////////////////////////////////////////////////////////////////////
-// Stereo MMX mixing - no interpolation
-
-_declspec(naked) VOID __cdecl MMX_Mono8BitMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov eax, 0xFFFF
- movd mm6, eax
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- add esi, [ecx+CHNOFS_NPOS]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- punpckldq mm6, mm6
- movq mm4, qword ptr [ecx+CHNOFS_NRIGHTVOL] //; mm4 = [ leftvol | rightvol ]
- pand mm4, mm6
- mov eax, edx
- sub eax, edi
- push ecx
- test eax, 8
- jz mixloop
- mov eax, ebx
- sar eax,16
- movsx eax, byte ptr [esi+eax]
- add edi, 8
- shl eax, 8
- movd mm0, eax
- punpckldq mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- add ebx, ebp
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- jmp done
- align 16
-mixloop:
- mov eax, ebx
- add ebx, ebp
- sar eax,16
- mov ecx, ebx
- movsx eax, byte ptr [esi+eax]
- sar ecx, 16
- add edi, 16
- movsx ecx, byte ptr [esi+ecx]
- shl eax, 8
- add ebx, ebp
- movd mm1, eax
- shl ecx, 8
- punpckldq mm1, mm1
- movd mm0, ecx
- pmaddwd mm1, mm4
- punpckldq mm0, mm0
- paddd mm1, qword ptr [edi-16]
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-16], mm1
- movq qword ptr [edi-8], mm0
- jb mixloop
-done:
- pop ecx
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-
-_declspec(naked) VOID __cdecl MMX_Mono16BitMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov eax, 0xFFFF
- movd mm6, eax
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- mov eax, [ecx+CHNOFS_NPOS]
- lea esi, [esi+eax*2]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- punpckldq mm6, mm6
- movq mm4, dword ptr [ecx+CHNOFS_NRIGHTVOL] // mm4 = [ leftvol | rightvol ]
- pand mm4, mm6
- mov eax, edx
- sub eax, edi
- push ecx
- test eax, 8
- jz mixloop
- mov eax, ebx
- sar eax,16
- movsx eax, word ptr [esi+eax*2]
- add edi, 8
- movd mm0, eax
- punpckldq mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- add ebx, ebp
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- jmp done
- align 16
-mixloop:
- mov eax, ebx
- add ebx, ebp
- sar eax, 16
- mov ecx, ebx
- movsx eax, word ptr [esi+eax*2]
- sar ecx, 16
- add edi, 16
- movsx ecx, word ptr [esi+ecx*2]
- movd mm1, eax
- add ebx, ebp
- punpckldq mm1, mm1
- movd mm0, ecx
- pmaddwd mm1, mm4
- punpckldq mm0, mm0
- pmaddwd mm0, mm4
- paddd mm1, qword ptr [edi-16]
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-16], mm1
- movq qword ptr [edi-8], mm0
- jb mixloop
-done:
- pop ecx
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Linear interpolation
-
-
-_declspec(naked) VOID __cdecl MMX_Mono8BitLinearMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- add esi, [ecx+CHNOFS_NPOS]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- mov eax, 0x0000FFFF
- movq mm4, qword ptr [ecx+CHNOFS_NRIGHTVOL] // mm4 = [ leftvol | rightvol ]
- movd mm6, eax
- punpckldq mm6, mm6
- pand mm4, mm6
- mov ecx, MMX_PBUFMAX
-mixloop:
- mov eax, ebx
- sar eax, 16
- movsx edx, byte ptr [esi+eax]
- movsx eax, byte ptr [esi+eax+1]
- add edi, 8
- movd mm1, eax
- movd mm0, edx
- movzx edx, bh
- psubd mm1, mm0
- movd mm2, edx
- pslld mm0, 8
- pmaddwd mm1, mm2 // mm1 = poslo * (s2-s1)
- paddd mm0, mm1
- punpckldq mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- add ebx, ebp
- cmp edi, ecx
- movq qword ptr [edi-8], mm0
- jb mixloop
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-
-_declspec(naked) VOID __cdecl MMX_Mono16BitLinearMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- mov eax, [ecx+CHNOFS_NPOS]
- lea esi, [esi+eax*2]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- mov eax, 0x0000FFFF
- movq mm4, qword ptr [ecx+CHNOFS_NRIGHTVOL] // mm4 = [ leftvol | rightvol ]
- movd mm6, eax
- punpckldq mm6, mm6
- pand mm4, mm6
- mov ecx, MMX_PBUFMAX
-mixloop:
- mov eax, ebx
- sar eax, 16
- movsx edx, word ptr [esi+eax*2]
- movsx eax, word ptr [esi+eax*2+2]
- add edi, 8
- movd mm1, eax
- movzx eax, bh
- movd mm0, edx
- movd mm2, eax
- psubsw mm1, mm0
- pmaddwd mm1, mm2 // mm1 = poslo * (s2-s1)
- psrad mm1, 8
- paddd mm0, mm1
- punpckldq mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- add ebx, ebp
- cmp edi, ecx
- movq qword ptr [edi-8], mm0
- jb mixloop
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// 4-taps polyphase FIR resampling filter
-
-_declspec(naked) VOID __cdecl MMX_Mono8BitHQMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov eax, 0xFFFF
- movd mm6, eax
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- add esi, [ecx+CHNOFS_NPOS]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- dec esi
- mov ebp, [ecx+CHNOFS_NINC]
- punpckldq mm6, mm6
- movq mm4, qword ptr [ecx+CHNOFS_NRIGHTVOL] //; mm4 = [ leftvol | rightvol ]
- pand mm4, mm6
- paddsw mm4, mm4
-mixloop:
- mov eax, ebx
- sar eax, 16
- movzx ecx, bh
- movd mm0, dword ptr [esi+eax]
- pxor mm7, mm7
- movq mm1, qword ptr [gFastSinc+ecx*8] // mm1 = [ c3 | c2 | c1 | c0 ]
- punpcklbw mm7, mm0 // mm7 = [ s3 | s2 | s1 | s0 ]
- pmaddwd mm7, mm1 // mm7 = [c3*s3+c2*s2|c1*s1+c0*s0]
- add edi, 8
- movq mm0, mm7
- psrlq mm7, 32
- paddd mm0, mm7
- punpckldq mm0, mm0
- psrad mm0, 15
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- add ebx, ebp
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-
-_declspec(naked) VOID __cdecl MMX_Mono16BitHQMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov eax, 0xFFFF
- movd mm6, eax
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- mov eax, [ecx+CHNOFS_NPOS]
- lea esi, [esi+eax*2-2]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- punpckldq mm6, mm6
- movq mm4, dword ptr [ecx+CHNOFS_NRIGHTVOL] // mm4 = [ leftvol | rightvol ]
- pand mm4, mm6
-mixloop:
- mov eax, ebx
- sar eax, 16
- movzx ecx, bh
- movq mm7, qword ptr [esi+eax*2] // mm7 = [ s3 | s2 | s1 | s0 ]
- movq mm1, qword ptr [gFastSinc+ecx*8] // mm1 = [ c3 | c2 | c1 | c0 ]
- add edi, 8
- pmaddwd mm7, mm1 // mm7 = [c3*s3+c2*s2|c1*s1+c0*s0]
- movq mm0, mm7
- psrlq mm7, 32
- paddd mm0, mm7
- punpckldq mm0, mm0
- psrad mm0, 14
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- add ebx, ebp
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// 8-taps polyphase FIR resampling filter
-
-_declspec(naked) VOID __cdecl MMX_Mono8BitKaiserMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov eax, 0xFFFF
- movd mm6, eax
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- add esi, [ecx+CHNOFS_NPOS]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- sub esi, 3
- mov ebp, [ecx+CHNOFS_NINC]
- punpckldq mm6, mm6
- movq mm4, qword ptr [ecx+CHNOFS_NRIGHTVOL] //; mm4 = [ leftvol | rightvol ]
- pand mm4, mm6
- paddsw mm4, mm4
- cmp ebp, 0x18000
- jg mixloop2x
- cmp ebp, -0x18000
- jl mixloop2x
- cmp ebp, 0x13000
- jg mixloop3x
- cmp ebp, -0x13000
- jl mixloop3x
-mixloop:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm0, qword ptr [esi+eax] // mm0 = [s7|s6|s5|s4|s3|s2|s1|s0]
- pxor mm6, mm6
- movq mm1, qword ptr [gKaiserSinc+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm2, qword ptr [gKaiserSinc+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- punpcklbw mm6, mm0 // mm6 = [ s3 | s2 | s1 | s0 ]
- pxor mm7, mm7
- pmaddwd mm6, mm1
- punpckhbw mm7, mm0 // mm7 = [ s7 | s6 | s5 | s4 ]
- pmaddwd mm7, mm2
- add edi, 8
- add ebx, ebp
- paddd mm6, mm7
- movq mm0, mm6
- psrlq mm6, 32
- paddd mm0, mm6
- psrad mm0, 15
- punpckldq mm0, mm0
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- jmp done
-mixloop2x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm0, qword ptr [esi+eax] // mm0 = [s7|s6|s5|s4|s3|s2|s1|s0]
- pxor mm6, mm6
- movq mm1, qword ptr [gDownsample2x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm2, qword ptr [gDownsample2x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- punpcklbw mm6, mm0 // mm6 = [ s3 | s2 | s1 | s0 ]
- pxor mm7, mm7
- pmaddwd mm6, mm1
- punpckhbw mm7, mm0 // mm7 = [ s7 | s6 | s5 | s4 ]
- pmaddwd mm7, mm2
- add edi, 8
- add ebx, ebp
- paddd mm6, mm7
- movq mm0, mm6
- psrlq mm6, 32
- paddd mm0, mm6
- psrad mm0, 15
- punpckldq mm0, mm0
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop2x
- jmp done
-mixloop3x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm0, qword ptr [esi+eax] // mm0 = [s7|s6|s5|s4|s3|s2|s1|s0]
- pxor mm6, mm6
- movq mm1, qword ptr [gDownsample13x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm2, qword ptr [gDownsample13x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- punpcklbw mm6, mm0 // mm6 = [ s3 | s2 | s1 | s0 ]
- pxor mm7, mm7
- pmaddwd mm6, mm1
- punpckhbw mm7, mm0 // mm7 = [ s7 | s6 | s5 | s4 ]
- pmaddwd mm7, mm2
- add edi, 8
- add ebx, ebp
- paddd mm6, mm7
- movq mm0, mm6
- psrlq mm6, 32
- paddd mm0, mm6
- psrad mm0, 15
- punpckldq mm0, mm0
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop3x
-done:
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-
-_declspec(naked) VOID __cdecl MMX_Mono8BitKaiserRampMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- add esi, [ecx+CHNOFS_NPOS]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- sub esi, 3
- mov ebp, [ecx+CHNOFS_NINC]
- movq mm4, qword ptr [ecx+ModChannel.nRampRightVol] // mm4 = [ leftvol | rightvol ]
- movq mm3, qword ptr [ecx+ModChannel.nRightRamp] // mm3 = [ leftramp | rightramp ]
- cmp ebp, 0x18000
- jg mixloop2x
- cmp ebp, -0x18000
- jl mixloop2x
- cmp ebp, 0x13000
- jg mixloop3x
- cmp ebp, -0x13000
- jl mixloop3x
-mixloop:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm0, qword ptr [esi+eax] // mm0 = [s7|s6|s5|s4|s3|s2|s1|s0]
- pxor mm6, mm6
- movq mm1, qword ptr [gKaiserSinc+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm2, qword ptr [gKaiserSinc+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- punpcklbw mm6, mm0 // mm6 = [ s3 | s2 | s1 | s0 ]
- pxor mm7, mm7
- pmaddwd mm6, mm1
- punpckhbw mm7, mm0 // mm7 = [ s7 | s6 | s5 | s4 ]
- pmaddwd mm7, mm2
- paddd mm4, mm3 // nRampVol += nRamp
- add edi, 8
- add ebx, ebp
- paddd mm6, mm7
- movq mm7, mm4
- movq mm0, mm6
- psrlq mm6, 32
- psrad mm7, VOLUMERAMPPRECISION-1 // nRampVol >> VOLUMERAMPPRECISION-1
- paddd mm0, mm6
- pxor mm6, mm6
- psrad mm0, 15
- packssdw mm7, mm7
- punpckldq mm0, mm0
- punpcklwd mm7, mm6
- packssdw mm0, mm0
- pmaddwd mm0, mm7
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- jmp done
-mixloop2x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm0, qword ptr [esi+eax] // mm0 = [s7|s6|s5|s4|s3|s2|s1|s0]
- pxor mm6, mm6
- movq mm1, qword ptr [gDownsample2x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm2, qword ptr [gDownsample2x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- punpcklbw mm6, mm0 // mm6 = [ s3 | s2 | s1 | s0 ]
- pxor mm7, mm7
- pmaddwd mm6, mm1
- punpckhbw mm7, mm0 // mm7 = [ s7 | s6 | s5 | s4 ]
- pmaddwd mm7, mm2
- paddd mm4, mm3 // nRampVol += nRamp
- add edi, 8
- add ebx, ebp
- paddd mm6, mm7
- movq mm7, mm4
- movq mm0, mm6
- psrlq mm6, 32
- psrad mm7, VOLUMERAMPPRECISION-1 // nRampVol >> VOLUMERAMPPRECISION-1
- paddd mm0, mm6
- pxor mm6, mm6
- psrad mm0, 15
- packssdw mm7, mm7
- punpckldq mm0, mm0
- punpcklwd mm7, mm6
- packssdw mm0, mm0
- pmaddwd mm0, mm7
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop2x
- jmp done
-mixloop3x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm0, qword ptr [esi+eax] // mm0 = [s7|s6|s5|s4|s3|s2|s1|s0]
- pxor mm6, mm6
- movq mm1, qword ptr [gDownsample13x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm2, qword ptr [gDownsample13x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- punpcklbw mm6, mm0 // mm6 = [ s3 | s2 | s1 | s0 ]
- pxor mm7, mm7
- pmaddwd mm6, mm1
- punpckhbw mm7, mm0 // mm7 = [ s7 | s6 | s5 | s4 ]
- pmaddwd mm7, mm2
- paddd mm4, mm3 // nRampVol += nRamp
- add edi, 8
- add ebx, ebp
- paddd mm6, mm7
- movq mm7, mm4
- movq mm0, mm6
- psrlq mm6, 32
- psrad mm7, VOLUMERAMPPRECISION-1 // nRampVol >> VOLUMERAMPPRECISION-1
- paddd mm0, mm6
- pxor mm6, mm6
- psrad mm0, 15
- packssdw mm7, mm7
- punpckldq mm0, mm0
- punpcklwd mm7, mm6
- packssdw mm0, mm0
- pmaddwd mm0, mm7
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop3x
-done:
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- movq qword ptr [ecx+ModChannel.nRampRightVol], mm4
- psrad mm4, VOLUMERAMPPRECISION
- movq qword ptr [ecx+ModChannel.nRightVol], mm4
- MMX_LEAVE
- }
-}
-
-
-_declspec(naked) VOID __cdecl MMX_Mono16BitKaiserMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov eax, 0xFFFF
- movd mm6, eax
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- mov eax, [ecx+CHNOFS_NPOS]
- lea esi, [esi+eax*2-6]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- punpckldq mm6, mm6
- movq mm4, dword ptr [ecx+CHNOFS_NRIGHTVOL] // mm4 = [ leftvol | rightvol ]
- pand mm4, mm6
- cmp ebp, 0x18000
- jg mixloop2x
- cmp ebp, -0x18000
- jl mixloop2x
- cmp ebp, 0x13000
- jg mixloop3x
- cmp ebp, -0x13000
- jl mixloop3x
-mixloop:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm6, qword ptr [esi+eax*2] // mm6 = [ s3 | s2 | s1 | s0 ]
- movq mm1, qword ptr [gKaiserSinc+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm7, qword ptr [esi+eax*2+8] // mm7 = [ s7 | s6 | s5 | s4 ]
- movq mm2, qword ptr [gKaiserSinc+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- pmaddwd mm6, mm1
- add edi, 8
- pmaddwd mm7, mm2
- add ebx, ebp
- paddd mm6, mm7
- movq mm0, mm6
- psrlq mm6, 32
- paddd mm0, mm6
- psrad mm0, 14
- punpckldq mm0, mm0
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- jmp done
-mixloop2x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm6, qword ptr [esi+eax*2] // mm6 = [ s3 | s2 | s1 | s0 ]
- movq mm1, qword ptr [gDownsample2x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm7, qword ptr [esi+eax*2+8] // mm7 = [ s7 | s6 | s5 | s4 ]
- movq mm2, qword ptr [gDownsample2x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- pmaddwd mm6, mm1
- add edi, 8
- pmaddwd mm7, mm2
- add ebx, ebp
- paddd mm6, mm7
- movq mm0, mm6
- psrlq mm6, 32
- paddd mm0, mm6
- psrad mm0, 14
- punpckldq mm0, mm0
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop2x
- jmp done
-mixloop3x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm6, qword ptr [esi+eax*2] // mm6 = [ s3 | s2 | s1 | s0 ]
- movq mm1, qword ptr [gDownsample13x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm7, qword ptr [esi+eax*2+8] // mm7 = [ s7 | s6 | s5 | s4 ]
- movq mm2, qword ptr [gDownsample13x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- pmaddwd mm6, mm1
- add edi, 8
- pmaddwd mm7, mm2
- add ebx, ebp
- paddd mm6, mm7
- movq mm0, mm6
- psrlq mm6, 32
- paddd mm0, mm6
- psrad mm0, 14
- punpckldq mm0, mm0
- packssdw mm0, mm0
- pmaddwd mm0, mm4
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop3x
-done:
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- MMX_LEAVE
- }
-}
-
-
-_declspec(naked) VOID __cdecl MMX_Mono16BitKaiserRampMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov edx, MMX_PBUFMAX
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- mov eax, [ecx+CHNOFS_NPOS]
- lea esi, [esi+eax*2-6]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- movq mm4, qword ptr [ecx+ModChannel.nRampRightVol] // mm4 = [ leftvol | rightvol ]
- movq mm3, qword ptr [ecx+ModChannel.nRightRamp] // mm3 = [ leftramp | rightramp ]
- cmp ebp, 0x18000
- jg mixloop2x
- cmp ebp, -0x18000
- jl mixloop2x
- cmp ebp, 0x13000
- jg mixloop3x
- cmp ebp, -0x13000
- jl mixloop3x
-mixloop:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm6, qword ptr [esi+eax*2] // mm6 = [ s3 | s2 | s1 | s0 ]
- movq mm1, qword ptr [gKaiserSinc+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm7, qword ptr [esi+eax*2+8] // mm7 = [ s7 | s6 | s5 | s4 ]
- movq mm2, qword ptr [gKaiserSinc+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- pmaddwd mm6, mm1
- add edi, 8
- pmaddwd mm7, mm2
- paddd mm4, mm3
- add ebx, ebp
- paddd mm6, mm7
- movq mm7, mm4
- movq mm0, mm6
- psrlq mm6, 32
- psrad mm7, VOLUMERAMPPRECISION // nRampVol >> VOLUMERAMPPRECISION
- paddd mm0, mm6
- pxor mm6, mm6
- psrad mm0, 14
- packssdw mm7, mm7
- punpckldq mm0, mm0
- punpcklwd mm7, mm6
- packssdw mm0, mm0
- pmaddwd mm0, mm7
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop
- jmp done
-mixloop2x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm6, qword ptr [esi+eax*2] // mm6 = [ s3 | s2 | s1 | s0 ]
- movq mm1, qword ptr [gDownsample2x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm7, qword ptr [esi+eax*2+8] // mm7 = [ s7 | s6 | s5 | s4 ]
- movq mm2, qword ptr [gDownsample2x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- pmaddwd mm6, mm1
- add edi, 8
- pmaddwd mm7, mm2
- paddd mm4, mm3
- add ebx, ebp
- paddd mm6, mm7
- movq mm7, mm4
- movq mm0, mm6
- psrlq mm6, 32
- psrad mm7, VOLUMERAMPPRECISION // nRampVol >> VOLUMERAMPPRECISION
- paddd mm0, mm6
- pxor mm6, mm6
- psrad mm0, 14
- packssdw mm7, mm7
- punpckldq mm0, mm0
- punpcklwd mm7, mm6
- packssdw mm0, mm0
- pmaddwd mm0, mm7
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop2x
- jmp done
-mixloop3x:
- mov eax, ebx
- mov ecx, ebx
- sar eax, 16
- and ecx, 0xfff0
- movq mm6, qword ptr [esi+eax*2] // mm6 = [ s3 | s2 | s1 | s0 ]
- movq mm1, qword ptr [gDownsample13x+ecx] // mm1 = [ c3 | c2 | c1 | c0 ]
- movq mm7, qword ptr [esi+eax*2+8] // mm7 = [ s7 | s6 | s5 | s4 ]
- movq mm2, qword ptr [gDownsample13x+ecx+8] // mm2 = [ c7 | c6 | c5 | c4 ]
- pmaddwd mm6, mm1
- add edi, 8
- pmaddwd mm7, mm2
- paddd mm4, mm3
- add ebx, ebp
- paddd mm6, mm7
- movq mm7, mm4
- movq mm0, mm6
- psrlq mm6, 32
- psrad mm7, VOLUMERAMPPRECISION // nRampVol >> VOLUMERAMPPRECISION
- paddd mm0, mm6
- pxor mm6, mm6
- psrad mm0, 14
- packssdw mm7, mm7
- punpckldq mm0, mm0
- punpcklwd mm7, mm6
- packssdw mm0, mm0
- pmaddwd mm0, mm7
- paddd mm0, qword ptr [edi-8]
- cmp edi, edx
- movq qword ptr [edi-8], mm0
- jb mixloop3x
-done:
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- movq qword ptr [ecx+ModChannel.nRampRightVol], mm4
- psrad mm4, VOLUMERAMPPRECISION
- movq qword ptr [ecx+ModChannel.nRightVol], mm4
- MMX_LEAVE
- }
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// Filtered + linear interpolation + ramping
-
-_declspec(naked) VOID __cdecl MMX_FilterMono8BitLinearRampMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- mov eax, [ecx+CHNOFS_NPOS]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- mov edx, [ecx+ModChannel.nRampLength]
- add esi, eax
- or edx, edx
- movq mm4, qword ptr [ecx+ModChannel.nRampRightVol] // mm4 = [ leftvol | rightvol ]
- movq mm3, qword ptr [ecx+ModChannel.nRightRamp] // mm3 = [ leftramp | rightramp ]
- jnz noramp
- movq mm4, qword ptr [ecx+ModChannel.nRightVol]
- pxor mm3, mm3
- pslld mm4, VOLUMERAMPPRECISION
-noramp:
- movq mm6, qword ptr [ecx+ModChannel.nFilter_Y1] // mm6 = [ y2 | y1 ]
- movd mm0, dword ptr [ecx+ModChannel.nFilter_B0]
- movd mm1, dword ptr [ecx+ModChannel.nFilter_B1]
- punpckldq mm0, mm1 // mm0 = [ b1 | b0 ]
- movd mm7, dword ptr [ecx+ModChannel.nFilter_HP]
- movd mm2, dword ptr [ecx+ModChannel.nFilter_A0]
- punpckldq mm7, mm2 // mm7 = [ a0 | hp ]
- packssdw mm7, mm0 // mm7 = [ b1 | b0 | a0 | hp ]
- mov ecx, MMX_PBUFMAX
-mixloop:
- mov eax, ebx
- sar eax, 16
- add edi, 8
- movsx edx, byte ptr [esi+eax]
- movsx eax, byte ptr [esi+eax]
- movd mm0, edx
- sub eax, edx
- movzx edx, bh
- imul edx, eax
- pslld mm0, 8
- movd mm1, edx
- movq mm5, mm7
- paddd mm0, mm1 // mm0 = s0+x*(s1-s0)
- pxor mm1, mm1
- psrad mm0, 1
- punpcklwd mm5, mm5 // mm5 = [ a0 | a0 | hp | hp ]
- packssdw mm1, mm6 // mm1 = [ y2 | y1 | 0 | 0 ]
- pand mm5, mm0 // mm5 = [ 0 | vol&hp ]
- pslld mm0, 16 // mm0 = [ 0 | 0 | vol| 0 ]
- por mm0, mm1 // mm0 = [ y2 | y1 | vol| 0 ]
- pmaddwd mm0, mm7 // mm0 = [ y1*b0+y2*b1 | vol*a0 ]
- mov eax, 4096
- paddd mm4, mm3
- movd mm1, eax
- paddd mm1, mm0
- punpckhdq mm0, mm0
- paddd mm0, mm1
- psrad mm0, 13
- movq mm1, mm0
- punpckldq mm0, mm0
- psubd mm1, mm5
- movq mm5, qword ptr [edi-8]
- movq mm2, mm4
- psrad mm2, VOLUMERAMPPRECISION // nRampVol >> VOLUMERAMPPRECISION
- packssdw mm2, mm2
- packssdw mm0, mm0
- punpcklwd mm2, mm2
- pmaddwd mm0, mm2
- punpckldq mm1, mm6
- movq mm6, mm1
- add ebx, ebp
- paddd mm0, mm5
- cmp edi, ecx
- movq qword ptr [edi-8], mm0
- jb mixloop
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- movq qword ptr [ecx+ModChannel.nRampRightVol], mm4
- psrad mm4, VOLUMERAMPPRECISION
- movq qword ptr [ecx+ModChannel.nRightVol], mm4
- movq qword ptr [ecx+ModChannel.nFilter_Y1], mm6
- MMX_LEAVE
- }
-}
-
-
-_declspec(naked) VOID __cdecl MMX_FilterMono16BitLinearRampMix(ModChannel *pChannel, int *pbuffer, int *pbufmax)
-{
- _asm {
- MMX_ENTER
- mov ecx, MMX_PCHANNEL
- mov edi, MMX_PBUFFER
- mov esi, [ecx+CHNOFS_PCURRENTSAMPLE]
- mov eax, [ecx+CHNOFS_NPOS]
- movzx ebx, word ptr [ecx+CHNOFS_NPOSLO]
- mov ebp, [ecx+CHNOFS_NINC]
- mov edx, [ecx+ModChannel.nRampLength]
- lea esi, [esi+eax*2]
- or edx, edx
- movq mm4, qword ptr [ecx+ModChannel.nRampRightVol] // mm4 = [ leftvol | rightvol ]
- movq mm3, qword ptr [ecx+ModChannel.nRightRamp] // mm3 = [ leftramp | rightramp ]
- jnz noramp
- movq mm4, qword ptr [ecx+ModChannel.nRightVol]
- pxor mm3, mm3
- pslld mm4, VOLUMERAMPPRECISION
-noramp:
- movq mm6, qword ptr [ecx+ModChannel.nFilter_Y1] // mm6 = [ y2 | y1 ]
- movd mm0, dword ptr [ecx+ModChannel.nFilter_B0]
- movd mm1, dword ptr [ecx+ModChannel.nFilter_B1]
- punpckldq mm0, mm1 // mm0 = [ b1 | b0 ]
- movd mm7, dword ptr [ecx+ModChannel.nFilter_HP]
- movd mm2, dword ptr [ecx+ModChannel.nFilter_A0]
- punpckldq mm7, mm2 // mm7 = [ a0 | hp ]
- packssdw mm7, mm0 // mm7 = [ b1 | b0 | a0 | hp ]
- mov ecx, MMX_PBUFMAX
-mixloop:
- mov eax, ebx
- sar eax, 16
- add edi, 8
- movd mm0, dword ptr [esi+eax*2] // mm0 = [ 0 | 0 | s1 | s0 ]
- movzx edx, bh // edx = x
- mov eax, 0x100
- sub eax, edx // eax = 1-x
- shl edx, 16
- or eax, edx // eax = [ x | 1-x ]
- movd mm1, eax // mm1 = [ 0 | 0 | x | 1-x ]
- pmaddwd mm0, mm1 // mm0 = [ 0 | x*s1+(1-x)*s0 ]
- movq mm5, mm7
- pxor mm1, mm1
- psrad mm0, 9
- punpcklwd mm5, mm5 // mm5 = [ a0 | a0 | hp | hp ]
- packssdw mm1, mm6 // mm1 = [ y2 | y1 | 0 | 0 ]
- pand mm5, mm0 // mm5 = [ 0 | vol&hp ]
- pslld mm0, 16 // mm0 = [ 0 | 0 | vol| 0 ]
- por mm0, mm1 // mm0 = [ y2 | y1 | vol| 0 ]
- pmaddwd mm0, mm7 // mm0 = [ y1*b0+y2*b1 | vol*a0 ]
- mov eax, 4096
- paddd mm4, mm3
- movd mm1, eax
- paddd mm1, mm0
- punpckhdq mm0, mm0
- paddd mm0, mm1
- psrad mm0, 13
- movq mm1, mm0
- punpckldq mm0, mm0
- psubd mm1, mm5
- movq mm5, qword ptr [edi-8]
- movq mm2, mm4
- psrad mm2, VOLUMERAMPPRECISION // nRampVol >> VOLUMERAMPPRECISION
- packssdw mm2, mm2
- packssdw mm0, mm0
- punpcklwd mm2, mm2
- pmaddwd mm0, mm2
- punpckldq mm1, mm6
- movq mm6, mm1
- add ebx, ebp
- paddd mm0, mm5
- cmp edi, ecx
- movq qword ptr [edi-8], mm0
- jb mixloop
- mov ecx, MMX_PCHANNEL
- mov word ptr [ecx+CHNOFS_NPOSLO], bx
- sar ebx, 16
- add dword ptr [ecx+CHNOFS_NPOS], ebx
- movq qword ptr [ecx+ModChannel.nRampRightVol], mm4
- psrad mm4, VOLUMERAMPPRECISION
- movq qword ptr [ecx+ModChannel.nRightVol], mm4
- movq qword ptr [ecx+ModChannel.nFilter_Y1], mm6
- MMX_LEAVE
- }
-}
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-
-
-// MMX_Spectrum(signed char *pBuffer, UINT nSamples, UINT nInc, UINT nSmpSize, LPLONG lpSinCos)
-__declspec(naked) void __cdecl MMX_Spectrum(signed char *, UINT, UINT, UINT, LPLONG)
-//----------------------------------------------------------------------------------
-{
- __asm {
- MMX_ENTER
- mov eax, 0x40*4
- mov edi, MMX_PARAM1 // edi = s(t)
- mov ecx, MMX_PARAM2 // ecx = nSamples
- movd mm4, eax // mm4 = wt
- mov eax, MMX_PARAM3
- shl eax, 2
- movd mm5, eax // mm5 = w
- xor eax, eax
- mov ebx, MMX_PARAM4 // ebx = nInc
- movd mm2, eax // mm2 = E[s(t).cos(wt)|s(t).sin(wt)]
- movd ebp, mm4
-SpectrumLoop:
- movsx edx, byte ptr [edi] // edx = s(t)
- and ebp, 0x1FF*4
- and edx, 0xFFFF
- movd mm0, dword ptr SpectrumSinusTable[ebp]
- add ebp, 0x80*4
- add edi, ebx
- and ebp, 0x1FF*4
- movd mm6, edx
- movd mm1, dword ptr SpectrumSinusTable[ebp]
- punpckldq mm6, mm6 // mm6 = [ s(t) | s(t) ]
- punpckldq mm0, mm1 // mm0 = [ cos(wt) | sin(wt) ]
- pmaddwd mm0, mm6 // mm0 = [s(t).cos(wt)|s(t).sin(wt)]
- paddd mm4, mm5
- paddd mm2, mm0
- dec ecx
- movd ebp, mm4
- jnz SpectrumLoop
- mov eax, MMX_PARAM5
- movq qword ptr [eax], mm2
- emms
- MMX_LEAVE
- }
-}
-
-
#endif // MMX code
//////////////////////////////////////////////////////////////////////////////////
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-01-19 13:56:24 UTC (rev 1500)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-01-19 15:14:38 UTC (rev 1501)
@@ -505,9 +505,6 @@
/*static*/ void EQStereo(int *pbuffer, UINT nCount);
/*static*/ void EQMono(int *pbuffer, UINT nCount);
#endif
- // Analyzer Functions
- static UINT WaveConvert(LPBYTE lpSrc, signed char *lpDest, UINT nSamples);
- static UINT WaveStereoConvert(LPBYTE lpSrc, signed char *lpDest, UINT nSamples);
static LONG SpectrumAnalyzer(signed char *pBuffer, UINT nSamples, UINT nInc, UINT nChannels);
// Float <-> Int conversion routines
/*static */VOID StereoMixToFloat(const int *pSrc, float *pOut1, float *pOut2, UINT nCount);
Modified: trunk/OpenMPT/soundlib/Tables.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Tables.cpp 2013-01-19 13:56:24 UTC (rev 1500)
+++ trunk/OpenMPT/soundlib/Tables.cpp 2013-01-19 15:14:38 UTC (rev 1501)
@@ -496,44 +496,6 @@
};
-int SpectrumSinusTable[256*2] =
-{
- 0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11,
- 12, 13, 14, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 22, 23,
- 24, 25, 25, 26, 27, 28, 28, 29, 30, 30, 31, 32, 32, 33, 34, 34,
- 35, 36, 36, 37, 38, 38, 39, 39, 40, 41, 41, 42, 42, 43, 44, 44,
- 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52,
- 53, 53, 53, 54, 54, 55, 55, 55, 56, 56, 57, 57, 57, 58, 58, 58,
- 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 61, 62, 62, 62,
- 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
- 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62,
- 62, 62, 62, 62, 61, 61, 61, 61, 61, 60, 60, 60, 60, 59, 59, 59,
- 59, 58, 58, 58, 57, 57, 57, 56, 56, 55, 55, 55, 54, 54, 53, 53,
- 53, 52, 52, 51, 51, 50, 50, 49, 49, 48, 48, 47, 47, 46, 46, 45,
- 45, 44, 44, 43, 42, 42, 41, 41, 40, 39, 39, 38, 38, 37, 36, 36,
- 35, 34, 34, 33, 32, 32, 31, 30, 30, 29, 28, 28, 27, 26, 25, 25,
- 24, 23, 22, 22, 21, 20, 20, 19, 18, 17, 17, 16, 15, 14, 14, 13,
- 12, 11, 10, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 1, 0,
- 0, -1, -1, -2, -3, -3, -4, -5, -6, -7, -7, -8, -9, -10, -10, -11,
- -12, -13, -14, -14, -15, -16, -17, -17, -18, -19, -20, -20, -21, -22, -22, -23,
- -24, -25, -25, -26, -27, -28, -28, -29, -30, -30, -31, -32, -32, -33, -34, -34,
- -35, -36, -36, -37, -38, -38, -39, -39, -40, -41, -41, -42, -42, -43, -44, -44,
- -45, -45, -46, -46, -47, -47, -48, -48, -49, -49, -50, -50, -51, -51, -52, -52,
- -53, -53, -53, -54, -54, -55, -55, -55, -56, -56, -57, -57, -57, -58, -58, -58,
- -59, -59, -59, -59, -60, -60, -60, -60, -61, -61, -61, -61, -61, -62, -62, -62,
- -62, -62, -62, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
- -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -62, -62,
- -62, -62, -62, -62, -61, -61, -61, -61, -61, -60, -60, -60, -60, -59, -59, -59,
- -59, -58, -58, -58, -57, -57, -57, -56, -56, -55, -55, -55, -54, -54, -53, -53,
- -53, -52, -52, -51, -51, -50, -50, -49, -49, -48, -48, -47, -47, -46, -46, -45,
- -45, -44, -44, -43, -42, -42, -41, -41, -40, -39, -39, -38, -38, -37, -36, -36,
- -35, -34, -34, -33, -32, -32, -31, -30, -30, -29, -28, -28, -27, -26, -25, -25,
- -24, -23, -22, -22, -21, -20, -20, -19, -18, -17, -17, -16, -15, -14, -14, -13,
- -12, -11, -10, -10, -9, -8, -7, -7, -6, -5, -4, -3, -3, -2, -1, 0,
-};
-
-
-
#ifndef FASTSOUNDLIB
// Reversed sinc coefficients
Modified: trunk/OpenMPT/soundlib/Waveform.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Waveform.cpp 2013-01-19 13:56:24 UTC (rev 1500)
+++ trunk/OpenMPT/soundlib/Waveform.cpp 2013-01-19 15:14:38 UTC (rev 1501)
@@ -1,7 +1,7 @@
/*
* Waveform.cpp
* ------------
- * Purpose: Common audio buffer conversion and analysing functions.
+ * Purpose: Common audio buffer conversion functions.
* Notes : (currently none)
* Authors: Olivier Lapicque
* OpenMPT Devs
@@ -12,250 +12,6 @@
#include "stdafx.h"
#include "sndfile.h"
-
-void X86_Cvt16S_8M(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//-------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- signed char *s = (signed char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- UINT n = dwPos >> 16;
- *p++ = (char)(((int)s[(n << 2)+1] + (int)s[(n << 2)+3]) >> 1);
- dwPos += dwInc;
- }
-}
-
-
-void X86_Cvt8S_8M(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- unsigned char *s = (unsigned char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- UINT n = dwPos >> 16;
- *p++ = (char)((((UINT)s[(n << 1)] + (UINT)s[(n << 1)+1]) >> 1) - 0x80);
- dwPos += dwInc;
- }
-}
-
-
-void X86_Cvt16M_8M(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//-------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- signed char *s = (signed char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- UINT n = dwPos >> 16;
- *p++ = (char)s[(n << 1)+1];
- dwPos += dwInc;
- }
-}
-
-
-void X86_Cvt8M_8M(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- signed char *s = (signed char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- *p++ = (char)(s[dwPos >> 16] - 0x80);
- dwPos += dwInc;
- }
-}
-
-
-void X86_Cvt16S_8S(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//-------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- signed char *s = (signed char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- UINT n = dwPos >> 16;
- p[0] = s[(n << 2)+1];
- p[1] = s[(n << 2)+3];
- p += 2;
- dwPos += dwInc;
- }
-}
-
-
-void X86_Cvt8S_8S(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- signed char *s = (signed char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- UINT n = dwPos >> 16;
- p[0] = (char)(s[n << 1] - 0x80);
- p[1] = (char)(s[(n << 1)+1] - 0x80);
- p += 2;
- dwPos += dwInc;
- }
-}
-
-
-void X86_Cvt16M_8S(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//-------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- signed char *s = (signed char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- UINT n = dwPos >> 16;
- p[1] = p[0] = (char)s[(n << 1)+1];
- p += 2;
- dwPos += dwInc;
- }
-}
-
-
-void X86_Cvt8M_8S(LPBYTE lpSrc, signed char *lpDest, UINT nSamples, DWORD dwInc)
-//------------------------------------------------------------------------------
-{
- DWORD dwPos = 0;
- signed char *p = lpDest;
- signed char *s = (signed char *)lpSrc;
- for (UINT i=0; i<nSamples; i++)
- {
- p[1] = p[0] = (char)(s[dwPos >> 16] - 0x80);
- p += 2;
- dwPos += dwInc;
- }
-}
-
-
-
-UINT CSoundFile::WaveConvert(LPBYTE lpSrc, signed char *lpDest, UINT nSamples)
-//----------------------------------------------------------------------------
-{
- DWORD dwInc;
- if ((!lpSrc) || (!lpDest) || (!nSamples)) return 0;
- dwInc = _muldiv(gdwMixingFreq, 0x10000, 22050);
- if (gnChannels >= 2)
- {
- if (gnBitsPerSample == 16)
- {
- // Stereo, 16-bit
- X86_Cvt16S_8M(lpSrc, lpDest, nSamples, dwInc);
- } else
- {
- // Stereo, 8-bit
- X86_Cvt8S_8M(lpSrc, lpDest, nSamples, dwInc);
- }
- } else
- {
- if (gnBitsPerSample == 16)
- {
- // Mono, 16-bit
- X86_Cvt16M_8M(lpSrc, lpDest, nSamples, dwInc);
- } else
- {
- // Mono, 8-bit
- X86_Cvt8M_8M(lpSrc, lpDest, nSamples, dwInc);
- }
- }
- return nSamples;
-}
-
-
-UINT CSoundFile::WaveStereoConvert(LPBYTE lpSrc, signed char *lpDest, UINT nSamples)
-//----------------------------------------------------------------------------------
-{
- DWORD dwInc;
- if ((!lpSrc) || (!lpDest) || (!nSamples)) return 0;
- dwInc = _muldiv(gdwMixingFreq, 0x10000, 22050);
- if (gnChannels >= 2)
- {
- if (gnBitsPerSample == 16)
- {
- // Stereo, 16-bit
- X86_Cvt16S_8S(lpSrc, lpDest, nSamples, dwInc);
- } else
- {
- // Stereo, 8-bit
- X86_Cvt8S_8S(lpSrc, lpDest, nSamples, dwInc);
- }
- } else
- {
- if (gnBitsPerSample == 16)
- {
- // Mono, 16-bit
- X86_Cvt16M_8S(lpSrc, lpDest, nSamples, dwInc);
- } else
- {
- // Mono, 8-bit
- X86_Cvt8M_8S(lpSrc, lpDest, nSamples, dwInc);
- }
- }
- return nSamples;
-}
-
-///////////////////////////////////////////////////////////////////////
-// Spectrum Analyzer
-
-extern int SpectrumSinusTable[256*2];
-
-
-void X86_Spectrum(signed char *pBuffer, UINT nSamples, UINT nInc, UINT nSmpSize, LPLONG lpSinCos)
-//-----------------------------------------------------------------------------------------------
-{
- signed char *p = pBuffer;
- UINT wt = 0x40;
- LONG ecos = 0, esin = 0;
- for (UINT i=0; i<nSamples; i++)
- {
- int a = *p;
- ecos += a*SpectrumSinusTable[wt & 0x1FF];
- esin += a*SpectrumSinusTable[(wt+0x80) & 0x1FF];
- wt += nInc;
- p += nSmpSize;
- }
- lpSinCos[0] = esin;
- lpSinCos[1] = ecos;
-}
-
-
-extern void __cdecl MMX_Spectrum(signed char *pBuffer, UINT nSamples, UINT nInc, UINT nSmpSize, LPLONG lpSinCos);
-
-
-LONG CSoundFile::SpectrumAnalyzer(signed char *pBuffer, UINT nSamples, UINT nInc, UINT nChannels)
-//-----------------------------------------------------------------------------------------------
-{
- LONG sincos[2];
- UINT n = nSamples & (~3);
- if ((pBuffer) && (n))
- {
- sincos[0] = sincos[1] = 0;
-#ifdef ENABLE_MMX
- if ((gdwSysInfo & SYSMIX_ENABLEMMX) && (gdwSoundSetup & SNDMIX_ENABLEMMX))
- MMX_Spectrum(pBuffer, n, nInc, nChannels, sincos);
- else
-#endif
- X86_Spectrum(pBuffer, n, nInc, nChannels, sincos);
- LONG esin = sincos[0], ecos = sincos[1];
- if (ecos < 0) ecos = -ecos;
- if (esin < 0) esin = -esin;
- int bug = 64*8 + (64*64 / (nInc+5));
- if (ecos > bug) ecos -= bug; else ecos = 0;
- if (esin > bug) esin -= bug; else esin = 0;
- return ((ecos + esin) << 2) / nSamples;
- }
- return 0;
-}
-
#ifndef FASTSOUNDLIB
#define ASM_NORMALIZE
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|