[PD-cvs] pd/src builtins_dsp.c,1.1.2.6,1.1.2.7
Mathieu Bouchard
matju at users.sourceforge.net
Wed Jan 3 23:28:59 CET 2007
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8813
Modified Files:
Tag: desiredata
builtins_dsp.c
Log Message:
merged setup procs into DSPNEW
Index: builtins_dsp.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/builtins_dsp.c,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -C2 -d -r1.1.2.6 -r1.1.2.7
*** builtins_dsp.c 3 Jan 2007 22:15:19 -0000 1.1.2.6
--- builtins_dsp.c 3 Jan 2007 22:28:57 -0000 1.1.2.7
***************
*** 69,95 ****
outlet_new(x, &s_signal); \
x->a = 0; \
! return x;}
#define DSPDSP(NAME) \
static void NAME##_dsp(t_minus *x, t_signal **sp) { \
! const int n = sp[0]->s_n; \
! if(n&7) \
! dsp_add(NAME##_perform, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n); \
! else if(SIMD_CHECK3(n,sp[0]->s_vec,sp[1]->s_vec,sp[2]->s_vec)) \
! dsp_add(NAME##_perf_simd, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n); \
! else \
! dsp_add(NAME##_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n); \
! }\
! \
! static void scalar##NAME##_dsp(t_scalarminus *x, t_signal **sp) \
! { \
! const int n = sp[0]->s_n;\
! if(n&7)\
! dsp_add(scalar##NAME##_perform, 4, sp[0]->s_vec, &x->b,sp[1]->s_vec, n);\
! else if(SIMD_CHECK2(n,sp[0]->s_vec,sp[1]->s_vec))\
! dsp_add(scalar##NAME##_perf_simd, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);\
! else \
! dsp_add(scalar##NAME##_perf8, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);\
! }
#define PERFORM(NAME,EXPR) \
--- 69,96 ----
outlet_new(x, &s_signal); \
x->a = 0; \
! return x;} \
! static void NAME##_setup(void) { \
! t_class *c = NAME##_class = class_new(gensym("+~"), (t_newmethod)NAME##_new, 0, sizeof(t_dop), 0, A_GIMME, 0); \
! class_addmethod(c, (t_method)NAME##_dsp, gensym("dsp"), 0); \
! CLASS_MAINSIGNALIN(c, t_dop, a); \
! class_sethelpsymbol(NAME##_class, gensym("sigbinops")); \
! c = scalar##NAME##_class = class_new(gensym("+~"), 0, 0, sizeof(t_dop), 0, 0); \
! CLASS_MAINSIGNALIN(c, t_dop, a); \
! class_addmethod(c, (t_method)scalar##NAME##_dsp, gensym("dsp"), 0); \
! class_sethelpsymbol(scalar##NAME##_class, gensym("sigbinops"));}
#define DSPDSP(NAME) \
static void NAME##_dsp(t_minus *x, t_signal **sp) { \
! const int n = sp[0]->s_n; \
! if(n&7) dsp_add(NAME##_perform, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n); \
! else if(SIMD_CHECK3(n,sp[0]->s_vec,sp[1]->s_vec,sp[2]->s_vec)) \
! dsp_add(NAME##_perf_simd, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n); \
! else dsp_add(NAME##_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n);} \
! static void scalar##NAME##_dsp(t_scalarminus *x, t_signal **sp) { \
! const int n = sp[0]->s_n;\
! if(n&7) dsp_add(scalar##NAME##_perform, 4, sp[0]->s_vec, &x->b,sp[1]->s_vec, n);\
! else if(SIMD_CHECK2(n,sp[0]->s_vec,sp[1]->s_vec)) \
! dsp_add(scalar##NAME##_perf_simd, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);\
! else dsp_add(scalar##NAME##_perf8, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);}
#define PERFORM(NAME,EXPR) \
***************
*** 131,141 ****
return w+5;}
- PERFORM(plus ,a+b) DSPNEW(plus) DSPDSP(plus)
- PERFORM(minus,a-b) DSPNEW(minus) DSPDSP(minus)
- PERFORM(times,a*b) DSPNEW(times) /*DSPDSP(times)*/
- /*PERFORM(over,a/b)*/ DSPNEW(over) DSPDSP(over)
- PERFORM(min ,a<b?a:b) DSPNEW(min) DSPDSP(min)
- PERFORM(max ,a>b?a:b) DSPNEW(max) DSPDSP(max)
-
void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n) {
if (n&7) dsp_add(plus_perform, 4, in1, in2, out, n);
--- 132,135 ----
***************
*** 144,177 ****
}
- static void plus_setup(void)
- {
- plus_class = class_new(gensym("+~"), (t_newmethod)plus_new, 0,
- sizeof(t_plus), 0, A_GIMME, 0);
- class_addmethod(plus_class, (t_method)plus_dsp, gensym("dsp"), 0);
- CLASS_MAINSIGNALIN(plus_class, t_plus, a);
- class_sethelpsymbol(plus_class, gensym("sigbinops"));
- scalarplus_class = class_new(gensym("+~"), 0, 0,
- sizeof(t_scalarplus), 0, 0);
- CLASS_MAINSIGNALIN(scalarplus_class, t_scalarplus, a);
- class_addmethod(scalarplus_class, (t_method)scalarplus_dsp, gensym("dsp"),
- 0);
- class_sethelpsymbol(scalarplus_class, gensym("sigbinops"));
- }
-
- static void minus_setup(void)
- {
- minus_class = class_new(gensym("-~"), (t_newmethod)minus_new, 0,
- sizeof(t_minus), 0, A_GIMME, 0);
- CLASS_MAINSIGNALIN(minus_class, t_minus, a);
- class_addmethod(minus_class, (t_method)minus_dsp, gensym("dsp"), 0);
- class_sethelpsymbol(minus_class, gensym("sigbinops"));
- scalarminus_class = class_new(gensym("-~"), 0, 0,
- sizeof(t_scalarminus), 0, 0);
- CLASS_MAINSIGNALIN(scalarminus_class, t_scalarminus, a);
- class_addmethod(scalarminus_class, (t_method)scalarminus_dsp, gensym("dsp"),
- 0);
- class_sethelpsymbol(scalarminus_class, gensym("sigbinops"));
- }
-
/* T.Grill - squaring: optimized * for equal input signals */
t_int *sqr_perf8(t_int *w)
--- 138,141 ----
***************
*** 193,272 ****
/* T.Grill - added optimization for equal input signals */
! static void times_dsp(t_times *x, t_signal **sp)
! {
const int n = sp[0]->s_n;
! if (n&7)
! dsp_add(times_perform, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n);
! else
! if(sp[0]->s_vec == sp[1]->s_vec)
! {
! if(SIMD_CHECK2(n,sp[0]->s_vec,sp[2]->s_vec))
! dsp_add(sqr_perf_simd, 3, sp[0]->s_vec, sp[2]->s_vec, n);
! else
! dsp_add(sqr_perf8, 3, sp[0]->s_vec, sp[2]->s_vec, n);
! }
! else
! {
! if(SIMD_CHECK3(n,sp[0]->s_vec,sp[1]->s_vec,sp[2]->s_vec))
! dsp_add(times_perf_simd, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n);
! else
! dsp_add(times_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n);
! }
}
!
! static void scalartimes_dsp(t_scalartimes *x, t_signal **sp)
! {
! const int n = sp[0]->s_n;
! if (n&7)
! dsp_add(scalartimes_perform, 4, sp[0]->s_vec, &x->b,sp[1]->s_vec, n);
! else if(SIMD_CHECK2(n,sp[0]->s_vec,sp[1]->s_vec))
! dsp_add(scalartimes_perf_simd, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);
! else
! dsp_add(scalartimes_perf8, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);
}
! static void times_setup(void)
! {
! times_class = class_new(gensym("*~"), (t_newmethod)times_new, 0,
! sizeof(t_times), 0, A_GIMME, 0);
! CLASS_MAINSIGNALIN(times_class, t_times, a);
! class_addmethod(times_class, (t_method)times_dsp, gensym("dsp"), 0);
! class_sethelpsymbol(times_class, gensym("sigbinops"));
! scalartimes_class = class_new(gensym("*~"), 0, 0,
! sizeof(t_scalartimes), 0, 0);
! CLASS_MAINSIGNALIN(scalartimes_class, t_scalartimes, a);
! class_addmethod(scalartimes_class, (t_method)scalartimes_dsp, gensym("dsp"),
! 0);
! class_sethelpsymbol(scalartimes_class, gensym("sigbinops"));
! }
! t_int *over_perform(t_int *w)
! {
! t_float *in1 = (t_float *)(w[1]);
! t_float *in2 = (t_float *)(w[2]);
! t_float *out = (t_float *)(w[3]);
! int n = (int)(w[4]);
! while (n--)
! {
float g = *in2++;
*out++ = (g ? *in1++ / g : 0);
}
! return (w+5);
}
!
! t_int *over_perf8(t_int *w)
! {
! t_float *in1 = (t_float *)(w[1]);
! t_float *in2 = (t_float *)(w[2]);
! t_float *out = (t_float *)(w[3]);
! int n = (int)(w[4]);
! for (; n; n -= 8, in1 += 8, in2 += 8, out += 8)
! {
float f0 = in1[0], f1 = in1[1], f2 = in1[2], f3 = in1[3];
float f4 = in1[4], f5 = in1[5], f6 = in1[6], f7 = in1[7];
-
float g0 = in2[0], g1 = in2[1], g2 = in2[2], g3 = in2[3];
float g4 = in2[4], g5 = in2[5], g6 = in2[6], g7 = in2[7];
-
out[0] = (g0? f0 / g0 : 0);
out[1] = (g1? f1 / g1 : 0);
--- 157,207 ----
/* T.Grill - added optimization for equal input signals */
! static void times_dsp(t_times *x, t_signal **sp) {
const int n = sp[0]->s_n;
! if (n&7) dsp_add(times_perform, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n);
! else if(sp[0]->s_vec == sp[1]->s_vec) {
! if(SIMD_CHECK2(n,sp[0]->s_vec,sp[2]->s_vec))
! dsp_add(sqr_perf_simd, 3, sp[0]->s_vec, sp[2]->s_vec, n);
! else dsp_add(sqr_perf8, 3, sp[0]->s_vec, sp[2]->s_vec, n);
! } else {
! if(SIMD_CHECK3(n,sp[0]->s_vec,sp[1]->s_vec,sp[2]->s_vec))
! dsp_add(times_perf_simd, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n);
! else dsp_add(times_perf8, 4, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, n);
! }
}
! static void scalartimes_dsp(t_scalartimes *x, t_signal **sp) {
! const int n = sp[0]->s_n;
! if (n&7) dsp_add(scalartimes_perform, 4, sp[0]->s_vec, &x->b,sp[1]->s_vec, n);
! else if(SIMD_CHECK2(n,sp[0]->s_vec,sp[1]->s_vec))
! dsp_add(scalartimes_perf_simd, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);
! else dsp_add(scalartimes_perf8, 4, sp[0]->s_vec, &x->b, sp[1]->s_vec, n);
}
! PERFORM(plus ,a+b) DSPDSP(plus) DSPNEW(plus)
! PERFORM(minus,a-b) DSPDSP(minus) DSPNEW(minus)
! PERFORM(times,a*b) /*DSPDSP(times)*/ DSPNEW(times)
! /*PERFORM(over,a/b)*/ DSPDSP(over) DSPNEW(over)
! PERFORM(min ,a<b?a:b) DSPDSP(min) DSPNEW(min)
! PERFORM(max ,a>b?a:b) DSPDSP(max) DSPNEW(max)
! t_int *over_perform(t_int *w) {
! t_float *in1 = (t_float *)w[1], *in2 = (t_float *)w[2], *out = (t_float *)w[3];
! int n = (int)w[4];
! while (n--) {
float g = *in2++;
*out++ = (g ? *in1++ / g : 0);
}
! return w+5;
}
! t_int *over_perf8(t_int *w) {
! t_float *in1 = (t_float *)w[1];
! t_float *in2 = (t_float *)w[2];
! t_float *out = (t_float *)w[3];
! int n = (int)w[4];
! for (; n; n -= 8, in1 += 8, in2 += 8, out += 8) {
float f0 = in1[0], f1 = in1[1], f2 = in1[2], f3 = in1[3];
float f4 = in1[4], f5 = in1[5], f6 = in1[6], f7 = in1[7];
float g0 = in2[0], g1 = in2[1], g2 = in2[2], g3 = in2[3];
float g4 = in2[4], g5 = in2[5], g6 = in2[6], g7 = in2[7];
out[0] = (g0? f0 / g0 : 0);
out[1] = (g1? f1 / g1 : 0);
***************
*** 278,357 ****
out[7] = (g7? f7 / g7 : 0);
}
! return (w+5);
}
-
/* T.Grill - added check for zero */
! t_int *scalarover_perform(t_int *w)
! {
! t_float *in = (t_float *)(w[1]);
! t_float f = *(t_float *)(w[2]);
! t_float *out = (t_float *)(w[3]);
! int n = (int)(w[4]);
if(f) f = 1./f;
while (n--) *out++ = *in++ * f;
return (w+5);
}
!
! t_int *scalarover_perf8(t_int *w)
! {
! t_float *in = (t_float *)(w[1]);
! t_float g = *(t_float *)(w[2]);
! t_float *out = (t_float *)(w[3]);
! int n = (int)(w[4]);
if (g) g = 1.f / g;
! for (; n; n -= 8, in += 8, out += 8)
! {
float f0 = in[0], f1 = in[1], f2 = in[2], f3 = in[3];
float f4 = in[4], f5 = in[5], f6 = in[6], f7 = in[7];
-
out[0] = f0 * g; out[1] = f1 * g; out[2] = f2 * g; out[3] = f3 * g;
out[4] = f4 * g; out[5] = f5 * g; out[6] = f6 * g; out[7] = f7 * g;
}
! return (w+5);
! }
!
! static void over_setup(void)
! {
! over_class = class_new(gensym("/~"), (t_newmethod)over_new, 0,
! sizeof(t_over), 0, A_GIMME, 0);
! CLASS_MAINSIGNALIN(over_class, t_over, a);
! class_addmethod(over_class, (t_method)over_dsp, gensym("dsp"), 0);
! class_sethelpsymbol(over_class, gensym("sigbinops"));
! scalarover_class = class_new(gensym("/~"), 0, 0,
! sizeof(t_scalarover), 0, 0);
! CLASS_MAINSIGNALIN(scalarover_class, t_scalarover, a);
! class_addmethod(scalarover_class, (t_method)scalarover_dsp, gensym("dsp"),
! 0);
! class_sethelpsymbol(scalarover_class, gensym("sigbinops"));
! }
!
! static void max_setup(void)
! {
! max_class = class_new(gensym("max~"), (t_newmethod)max_new, 0,
! sizeof(t_max), 0, A_GIMME, 0);
! CLASS_MAINSIGNALIN(max_class, t_max, a);
! class_addmethod(max_class, (t_method)max_dsp, gensym("dsp"), 0);
! class_sethelpsymbol(max_class, gensym("sigbinops"));
! scalarmax_class = class_new(gensym("max~"), 0, 0,
! sizeof(t_scalarmax), 0, 0);
! CLASS_MAINSIGNALIN(scalarmax_class, t_scalarmax, a);
! class_addmethod(scalarmax_class, (t_method)scalarmax_dsp, gensym("dsp"),
! 0);
! class_sethelpsymbol(scalarmax_class, gensym("sigbinops"));
! }
!
! static void min_setup(void)
! {
! min_class = class_new(gensym("min~"), (t_newmethod)min_new, 0,
! sizeof(t_min), 0, A_GIMME, 0);
! CLASS_MAINSIGNALIN(min_class, t_min, a);
! class_addmethod(min_class, (t_method)min_dsp, gensym("dsp"), 0);
! class_sethelpsymbol(min_class, gensym("sigbinops"));
! scalarmin_class = class_new(gensym("min~"), 0, 0,
! sizeof(t_scalarmin), 0, 0);
! CLASS_MAINSIGNALIN(scalarmin_class, t_scalarmin, a);
! class_addmethod(scalarmin_class, (t_method)scalarmin_dsp, gensym("dsp"),
! 0);
! class_sethelpsymbol(scalarmin_class, gensym("sigbinops"));
}
--- 213,241 ----
out[7] = (g7? f7 / g7 : 0);
}
! return w+5;
}
/* T.Grill - added check for zero */
! t_int *scalarover_perform(t_int *w) {
! t_float *in = (t_float *)w[1];
! t_float f = *(t_float *)w[2];
! t_float *out = (t_float *)w[3];
! int n = (int)w[4];
if(f) f = 1./f;
while (n--) *out++ = *in++ * f;
return (w+5);
}
! t_int *scalarover_perf8(t_int *w) {
! t_float *in = (t_float *)w[1];
! t_float g = *(t_float *)w[2];
! t_float *out = (t_float *)w[3];
! int n = (int)w[4];
if (g) g = 1.f / g;
! for (; n; n -= 8, in += 8, out += 8) {
float f0 = in[0], f1 = in[1], f2 = in[2], f3 = in[3];
float f4 = in[4], f5 = in[5], f6 = in[6], f7 = in[7];
out[0] = f0 * g; out[1] = f1 * g; out[2] = f2 * g; out[3] = f3 * g;
out[4] = f4 * g; out[5] = f5 * g; out[6] = f6 * g; out[7] = f7 * g;
}
! return w+5;
}
More information about the Pd-cvs
mailing list