aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/flsimd.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-03-10 04:56:41 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-03-10 04:56:41 +0000
commit5e3101f8a1a5cf78f86635da6a78d8564aa85483 (patch)
tree763ad92aa6a6d86d3af474b2b478854876c1c70c /externals/grill/flext/source/flsimd.cpp
parente854889b99b9e515dc69d237b1031b5705e83b60 (diff)
new lock-free lifo and fifo
fixed buggy unbinding of receive symbols no more static assignment of symbols (problems with Metrowerks) fixed bugs in SIMD code for non-power-of-2 lengths Max: use high-priority click instead of qelem for message-posting added method for clicks into object box svn path=/trunk/; revision=2614
Diffstat (limited to 'externals/grill/flext/source/flsimd.cpp')
-rwxr-xr-xexternals/grill/flext/source/flsimd.cpp39
1 files changed, 31 insertions, 8 deletions
diff --git a/externals/grill/flext/source/flsimd.cpp b/externals/grill/flext/source/flsimd.cpp
index fdb9c2d2..efeae6e3 100755
--- a/externals/grill/flext/source/flsimd.cpp
+++ b/externals/grill/flext/source/flsimd.cpp
@@ -429,9 +429,8 @@ void flext::CopySamples(t_sample *dst,const t_sample *src,int cnt)
// single precision
int n = cnt>>4;
- cnt -= n<<4;
-
if(!n) goto zero;
+ cnt -= n<<4;
__asm {
mov eax,dword ptr [src]
@@ -535,7 +534,9 @@ loopuu:
}
}
}
-zero:
+
+ src += n<<4,dst += n<<4;
+zero:
while(cnt--) *(dst++) = *(src++);
}
else
@@ -749,8 +750,8 @@ void flext::SetSamples(t_sample *dst,int cnt,t_sample s)
// single precision
int n = cnt>>4;
- cnt -= n<<4;
if(!n) goto zero;
+ cnt -= n<<4;
__asm {
movss xmm0,xmmword ptr [s]
@@ -787,6 +788,8 @@ loopu:
loop loopu
}
}
+
+ dst += n<<4;
zero:
while(cnt--) *(dst++) = s;
}
@@ -830,9 +833,8 @@ void flext::MulSamples(t_sample *dst,const t_sample *src,t_sample op,int cnt)
__m128 a = _mm_load1_ps(&op);
int n = cnt>>4;
- cnt -= n<<4;
-
if(!n) goto zero;
+ cnt -= n<<4;
__asm {
mov eax,dword ptr [src]
@@ -905,6 +907,8 @@ loopu:
loop loopu
}
}
+
+ src += n<<4,dst += n<<4;
zero:
while(cnt--) *(dst++) = *(src++)*op;
}
@@ -964,9 +968,8 @@ void flext::MulSamples(t_sample *dst,const t_sample *src,const t_sample *op,int
if(GetSIMDCapabilities()&simd_sse) {
// single precision
int n = cnt>>4;
- cnt -= n<<4;
-
if(!n) goto zero;
+ cnt -= n<<4;
__asm {
mov eax,[src]
@@ -1133,6 +1136,8 @@ loopuu:
}
}
}
+
+ src += n<<4,dst += n<<4,op += n<<4;
zero:
while(cnt--) *(dst++) = *(src++) * *(op++);
}
@@ -1194,6 +1199,7 @@ void flext::AddSamples(t_sample *dst,const t_sample *src,t_sample op,int cnt)
if(GetSIMDCapabilities()&simd_sse) {
// single precision
int n = cnt>>4;
+ if(!n) goto zero;
cnt -= n<<4;
__asm {
@@ -1267,6 +1273,8 @@ loopu:
loop loopu
}
}
+ src += n<<4,dst += n<<4,op += n<<4;
+zero:
while(cnt--) *(dst++) = *(src++)+op;
}
else
@@ -1330,6 +1338,7 @@ void flext::AddSamples(t_sample *dst,const t_sample *src,const t_sample *op,int
// single precision
int n = cnt>>4;
+ if(!n) goto zero;
cnt -= n<<4;
if(VectorsAligned(src,dst)) {
@@ -1488,6 +1497,9 @@ void flext::AddSamples(t_sample *dst,const t_sample *src,const t_sample *op,int
}
}
}
+
+ src += n<<4,dst += n<<4,op += n<<4;
+zero:
while(cnt--) *(dst++) = *(src++) + *(op++);
}
else
@@ -1550,6 +1562,7 @@ void flext::ScaleSamples(t_sample *dst,const t_sample *src,t_sample opmul,t_samp
if(GetSIMDCapabilities()&simd_sse) {
// single precision
int n = cnt>>4;
+ if(!n) goto zero;
cnt -= n<<4;
__asm {
@@ -1633,6 +1646,9 @@ loopu:
loop loopu
}
}
+
+ src += n<<4,dst += n<<4;
+zero:
while(cnt--) *(dst++) = *(src++)*opmul+opadd;
}
else
@@ -1676,6 +1692,7 @@ void flext::ScaleSamples(t_sample *dst,const t_sample *src,t_sample opmul,const
if(GetSIMDCapabilities()&simd_sse) {
// single precision
int n = cnt>>4;
+ if(!n) goto zero;
cnt -= n<<4;
__asm {
@@ -1773,6 +1790,9 @@ loopu:
loop loopu
}
}
+
+ src += n<<4,dst += n<<4,opadd += n<<4;
+zero:
while(cnt--) *(dst++) = *(src++) * opmul + *(opadd++);
}
else
@@ -1828,6 +1848,7 @@ void flext::ScaleSamples(t_sample *dst,const t_sample *src,const t_sample *opmul
if(GetSIMDCapabilities()&simd_sse) {
// single precision
int n = cnt>>4;
+ if(!n) goto zero;
cnt -= n<<4;
__asm {
@@ -1938,6 +1959,8 @@ loopu:
loop loopu
}
}
+ src += n<<4,dst += n<<4,opmul += n<<4,opadd += n<<4;
+zero:
while(cnt--) *(dst++) = *(src++) * *(opmul++) + *(opadd++);
}
else