aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/flsimd.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-01-26 05:02:06 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-01-26 05:02:06 +0000
commitdcbc90c265de6782a1dc6f2e5e7e9fa3c4743f87 (patch)
tree1945ec1d26aaba80a35073c1e40bf8c395740e2f /externals/grill/flext/source/flsimd.cpp
parent329c9b00931e368ff4b16177bfc7a70b033689b9 (diff)
- fixed typos and 64-bit compatibility
usage of symbols for method and attribute adding fixed buggy unbinding of receive symbols reconsidered flext::buffer:Update some restructuring added object construction and destruction flags better templates, some minor changes build system: added profiler mode, more fixes added method for clicks into object box - conform to idle callback functionality in devel_0_38 oops, forgot about SIMD for Windows fix for ToOut calls in dsp time svn path=/trunk/; revision=2540
Diffstat (limited to 'externals/grill/flext/source/flsimd.cpp')
-rwxr-xr-xexternals/grill/flext/source/flsimd.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/externals/grill/flext/source/flsimd.cpp b/externals/grill/flext/source/flsimd.cpp
index 9ed22de7..7b35903b 100755
--- a/externals/grill/flext/source/flsimd.cpp
+++ b/externals/grill/flext/source/flsimd.cpp
@@ -1592,3 +1592,58 @@ loopu:
#endif
}
+void flext::ScaleSamples(t_sample *dst,const t_sample *src,t_sample opmul,const t_sample *add,int cnt)
+{
+ {
+ int n = cnt>>3;
+ cnt -= n<<3;
+ if(dst == add) {
+ while(n--) {
+ dst[0] += src[0]*opmul; dst[1] += src[1]*opmul;
+ dst[2] += src[2]*opmul; dst[3] += src[3]*opmul;
+ dst[4] += src[4]*opmul; dst[5] += src[5]*opmul;
+ dst[6] += src[6]*opmul; dst[7] += src[7]*opmul;
+ src += 8,dst += 8;
+ }
+ while(cnt--) *(dst++) += *(src++)*opmul;
+ }
+ else {
+ while(n--) {
+ dst[0] = src[0]*opmul+add[0]; dst[1] = src[1]*opmul+add[1];
+ dst[2] = src[2]*opmul+add[2]; dst[3] = src[3]*opmul+add[3];
+ dst[4] = src[4]*opmul+add[4]; dst[5] = src[5]*opmul+add[5];
+ dst[6] = src[6]*opmul+add[6]; dst[7] = src[7]*opmul+add[7];
+ src += 8,dst += 8,add += 8;
+ }
+ while(cnt--) *(dst++) = *(src++)*opmul+*(add++);
+ }
+ }
+}
+
+void flext::ScaleSamples(t_sample *dst,const t_sample *src,const t_sample *mul,const t_sample *add,int cnt)
+{
+ {
+ int n = cnt>>3;
+ cnt -= n<<3;
+ if(dst == add) {
+ while(n--) {
+ dst[0] += src[0]*mul[0]; dst[1] += src[1]*mul[1];
+ dst[2] += src[2]*mul[2]; dst[3] += src[3]*mul[3];
+ dst[4] += src[4]*mul[4]; dst[5] += src[5]*mul[5];
+ dst[6] += src[6]*mul[6]; dst[7] += src[7]*mul[7];
+ src += 8,dst += 8,mul += 8;
+ }
+ while(cnt--) *(dst++) += *(src++) * *(mul++);
+ }
+ else {
+ while(n--) {
+ dst[0] = src[0]*mul[0]+add[0]; dst[1] = src[1]*mul[1]+add[1];
+ dst[2] = src[2]*mul[2]+add[2]; dst[3] = src[3]*mul[3]+add[3];
+ dst[4] = src[4]*mul[4]+add[4]; dst[5] = src[5]*mul[5]+add[5];
+ dst[6] = src[6]*mul[6]+add[6]; dst[7] = src[7]*mul[7]+add[7];
+ src += 8,dst += 8,mul += 8,add += 8;
+ }
+ while(cnt--) *(dst++) = *(src++)* *(mul++) + *(add++);
+ }
+ }
+}