Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25078
Modified Files: Tag: desiredata builtins_dsp.c Log Message: added PERFORM macro
Index: builtins_dsp.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/builtins_dsp.c,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -C2 -d -r1.1.2.4 -r1.1.2.5 *** builtins_dsp.c 3 Jan 2007 21:26:39 -0000 1.1.2.4 --- builtins_dsp.c 3 Jan 2007 21:46:15 -0000 1.1.2.5 *************** *** 47,106 **** }
! t_int *plus_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--) *out++ = *in1++ + *in2++; ! return (w+5); ! } ! ! t_int *plus_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] = f0 + g0; out[1] = f1 + g1; out[2] = f2 + g2; out[3] = f3 + g3; ! out[4] = f4 + g4; out[5] = f5 + g5; out[6] = f6 + g6; out[7] = f7 + g7; ! } ! return (w+5); ! } ! ! t_int *scalarplus_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]); ! while (n--) *out++ = *in++ + f; ! return (w+5); ! } ! ! t_int *scalarplus_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]); ! 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); ! }
void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n) --- 47,94 ---- }
! #define PERFORM(NAME,EXPR) \ ! t_int *NAME##_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--) {t_float a=*in1++, b=*in2++; *out++ = (EXPR);} \ ! return w+5;} \ ! t_int *NAME##_perf8(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]; \ ! for (; n; n -= 8, in1 += 8, in2 += 8, out += 8) { \ ! {t_float a=in1[0], b=in2[0]; out[0] = (EXPR);} \ ! {t_float a=in1[1], b=in2[1]; out[1] = (EXPR);} \ ! {t_float a=in1[2], b=in2[2]; out[2] = (EXPR);} \ ! {t_float a=in1[3], b=in2[3]; out[3] = (EXPR);} \ ! {t_float a=in1[4], b=in2[4]; out[4] = (EXPR);} \ ! {t_float a=in1[5], b=in2[5]; out[5] = (EXPR);} \ ! {t_float a=in1[6], b=in2[6]; out[6] = (EXPR);} \ ! {t_float a=in1[7], b=in2[7]; out[7] = (EXPR);}} \ ! return w+5;} \ ! t_int *scalar##NAME##_perform(t_int *w) { \ ! t_float *in = (t_float *)w[1]; t_float b = *(t_float *)w[2]; t_float *out = (t_float *)w[3]; \ ! int n = (int)w[4]; \ ! while (n--) {t_float a=*in++; *out++ = (EXPR);} \ ! return w+5;} \ ! t_int *scalar##NAME##_perf8(t_int *w) { \ ! t_float *in = (t_float *)w[1]; t_float b = *(t_float *)w[2]; t_float *out = (t_float *)w[3]; \ ! int n = (int)w[4]; \ ! for (; n; n -= 8, in += 8, out += 8) { \ ! {t_float a=in[0]; out[0] = (EXPR);} \ ! {t_float a=in[1]; out[1] = (EXPR);} \ ! {t_float a=in[2]; out[2] = (EXPR);} \ ! {t_float a=in[3]; out[3] = (EXPR);} \ ! {t_float a=in[4]; out[4] = (EXPR);} \ ! {t_float a=in[5]; out[5] = (EXPR);} \ ! {t_float a=in[6]; out[6] = (EXPR);} \ ! {t_float a=in[7]; out[7] = (EXPR);}} \ ! return w+5;}
! PERFORM(plus,a+b) ! PERFORM(minus,a-b) ! PERFORM(times,a*b) ! //PERFORM(over,a/b) ! PERFORM(min,a<b?a:b) ! PERFORM(max,a>b?a:b)
void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n) *************** *** 176,236 **** }
- t_int *minus_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--) *out++ = *in1++ - *in2++; - return (w+5); - } - - t_int *minus_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] = f0 - g0; out[1] = f1 - g1; out[2] = f2 - g2; out[3] = f3 - g3; - out[4] = f4 - g4; out[5] = f5 - g5; out[6] = f6 - g6; out[7] = f7 - g7; - } - return (w+5); - } - - t_int *scalarminus_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]); - while (n--) *out++ = *in++ - f; - return (w+5); - } - - t_int *scalarminus_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]); - 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 minus_dsp(t_minus *x, t_signal **sp) { --- 164,167 ---- *************** *** 298,331 **** }
- t_int *times_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--) *out++ = *in1++ * *in2++; - return (w+5); - } - - t_int *times_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] = f0 * g0; out[1] = f1 * g1; out[2] = f2 * g2; out[3] = f3 * g3; - out[4] = f4 * g4; out[5] = f5 * g5; out[6] = f6 * g6; out[7] = f7 * g7; - } - return (w+5); - } - /* T.Grill - squaring: optimized * for equal input signals */ t_int *sqr_perf8(t_int *w) --- 229,232 ---- *************** *** 346,376 **** }
- t_int *scalartimes_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]); - while (n--) *out++ = *in++ * f; - return (w+5); - } - - t_int *scalartimes_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]); - 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); - } - /* T.Grill - added optimization for equal input signals */ static void times_dsp(t_times *x, t_signal **sp) --- 247,250 ---- *************** *** 583,654 **** }
- t_int *max_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 f = *in1++, g = *in2++; - *out++ = (f > g ? f : g); - } - return (w+5); - } - - t_int *max_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] = (f0 > g0 ? f0 : g0); out[1] = (f1 > g1 ? f1 : g1); - out[2] = (f2 > g2 ? f2 : g2); out[3] = (f3 > g3 ? f3 : g3); - out[4] = (f4 > g4 ? f4 : g4); out[5] = (f5 > g5 ? f5 : g5); - out[6] = (f6 > g6 ? f6 : g6); out[7] = (f7 > g7 ? f7 : g7); - } - return (w+5); - } - - t_int *scalarmax_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]); - while (n--) - { - t_float g = *in++; - *out++ = (f > g ? f : g); - } - return (w+5); - } - - t_int *scalarmax_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]); - 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 ? f0 : g); out[1] = (f1 > g ? f1 : g); - out[2] = (f2 > g ? f2 : g); out[3] = (f3 > g ? f3 : g); - out[4] = (f4 > g ? f4 : g); out[5] = (f5 > g ? f5 : g); - out[6] = (f6 > g ? f6 : g); out[7] = (f7 > g ? f7 : g); - } - return (w+5); - }
static void max_dsp(t_max *x, t_signal **sp) --- 457,460 ---- *************** *** 716,788 **** }
- t_int *min_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 f = *in1++, g = *in2++; - *out++ = (f < g ? f : g); - } - return (w+5); - } - - t_int *min_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] = (f0 < g0 ? f0 : g0); out[1] = (f1 < g1 ? f1 : g1); - out[2] = (f2 < g2 ? f2 : g2); out[3] = (f3 < g3 ? f3 : g3); - out[4] = (f4 < g4 ? f4 : g4); out[5] = (f5 < g5 ? f5 : g5); - out[6] = (f6 < g6 ? f6 : g6); out[7] = (f7 < g7 ? f7 : g7); - } - return (w+5); - } - - t_int *scalarmin_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]); - while (n--) - { - t_float g = *in++; - *out++ = (f < g ? f : g); - } - return (w+5); - } - - t_int *scalarmin_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]); - 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 ? f0 : g); out[1] = (f1 < g ? f1 : g); - out[2] = (f2 < g ? f2 : g); out[3] = (f3 < g ? f3 : g); - out[4] = (f4 < g ? f4 : g); out[5] = (f5 < g ? f5 : g); - out[6] = (f6 < g ? f6 : g); out[7] = (f7 < g ? f7 : g); - } - return (w+5); - } - static void min_dsp(t_min *x, t_signal **sp) { --- 522,525 ----