Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv822
Modified Files: Tag: devel_0_37 d_ctl.c Log Message: improvement for line~ and vectorizing
Index: d_ctl.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/d_ctl.c,v retrieving revision 1.1.1.3.2.8 retrieving revision 1.1.1.3.2.9 diff -C2 -d -r1.1.1.3.2.8 -r1.1.1.3.2.9 *** d_ctl.c 23 Jul 2004 08:46:40 -0000 1.1.1.3.2.8 --- d_ctl.c 3 Sep 2004 07:50:40 -0000 1.1.1.3.2.9 *************** *** 135,140 **** else { ! x->x_value = x->x_target; ! while (n--) *out++ = x->x_value; } return (w+4); --- 135,180 ---- else { ! float g = x->x_value = x->x_target; ! while (n--) ! *out++ = g; ! } ! return (w+4); ! } ! ! /* TB: vectorized version */ ! static t_int *line_tilde_perf8(t_int *w) ! { ! t_line *x = (t_line *)(w[1]); ! t_float *out = (t_float *)(w[2]); ! int n = (int)(w[3]); ! float f = x->x_value; ! ! if (PD_BIGORSMALL(f)) ! x->x_value = f = 0; ! if (x->x_retarget) ! { ! int nticks = x->x_inletwas * x->x_dspticktomsec; ! if (!nticks) nticks = 1; ! x->x_ticksleft = nticks; ! x->x_biginc = (x->x_target - x->x_value)/(float)nticks; ! x->x_inc = x->x_1overn * x->x_biginc; ! x->x_retarget = 0; ! } ! if (x->x_ticksleft) ! { ! float f = x->x_value; ! while (n--) *out++ = f, f += x->x_inc; ! x->x_value += x->x_biginc; ! x->x_ticksleft--; ! } ! else ! { ! float f = x->x_value = x->x_target; ! for (; n; n -= 8, out += 8) ! { ! out[0] = f; out[1] = f; out[2] = f; out[3] = f; ! out[4] = f; out[5] = f; out[6] = f; out[7] = f; ! } ! } return (w+4); *************** *** 165,169 **** static void line_tilde_dsp(t_line *x, t_signal **sp) { ! dsp_add(line_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); x->x_1overn = 1./sp[0]->s_n; x->x_dspticktomsec = sp[0]->s_sr / (1000 * sp[0]->s_n); --- 205,212 ---- static void line_tilde_dsp(t_line *x, t_signal **sp) { ! if(sp[0]->s_n&7) ! dsp_add(line_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); ! else ! dsp_add(line_tilde_perf8, 3, x, sp[0]->s_vec, sp[0]->s_n); x->x_1overn = 1./sp[0]->s_n; x->x_dspticktomsec = sp[0]->s_sr / (1000 * sp[0]->s_n);