From 79e16b6188d2972387f76a8761ac49b0d7f45a57 Mon Sep 17 00:00:00 2001 From: musil Date: Fri, 22 Jun 2007 15:46:18 +0000 Subject: new date & debugging of input buffering svn path=/trunk/externals/iem/iem_matrix/; revision=7794 --- src/matrix_diag_mul_line8~.c | 100 +++++++++++++++----------------------- src/matrix_diag_mul_line~.c | 102 +++++++++++++++------------------------ src/matrix_diag_mul_stat~.c | 111 +++++++++++++++---------------------------- 3 files changed, 115 insertions(+), 198 deletions(-) diff --git a/src/matrix_diag_mul_line8~.c b/src/matrix_diag_mul_line8~.c index 5ad0c7b..2fdbff2 100644 --- a/src/matrix_diag_mul_line8~.c +++ b/src/matrix_diag_mul_line8~.c @@ -1,7 +1,7 @@ /* For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. -iem_matrix written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ +iem_matrix written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */ #include "m_pd.h" #include "iemlib.h" @@ -160,13 +160,11 @@ static t_int *matrix_diag_mul_line8_tilde_perf8(t_int *w) t_matrix_diag_mul_line8_tilde *x = (t_matrix_diag_mul_line8_tilde *)(w[1]); int n = (int)(w[2]); t_float **io = x->x_io; - t_float *buf; + t_float *buf = x->x_buf; t_float *matcur, *matend; t_float *inc8, *biginc, inc; int n_io = x->x_n_io; - int hn_io = n_io / 2; - int dn_io = 2 * n_io; - t_float *in, *out1, *out2, mul; + t_float *in, *out, mul; int i, j; if(x->x_retarget) @@ -207,16 +205,16 @@ static t_int *matrix_diag_mul_line8_tilde_perf8(t_int *w) inc = inc8[j]; mul = matcur[j]; in = io[j]; - for(i=n; i; i -= 8, in += 8) + for(i=n; i; i -= 8, in += 8, buf += 8) { - in[0] *= mul; - in[1] *= mul; - in[2] *= mul; - in[3] *= mul; - in[4] *= mul; - in[5] *= mul; - in[6] *= mul; - in[7] *= mul; + buf[0] = in[0] * mul; + buf[1] = in[1] * mul; + buf[2] = in[2] * mul; + buf[3] = in[3] * mul; + buf[4] = in[4] * mul; + buf[5] = in[5] * mul; + buf[6] = in[6] * mul; + buf[7] = in[7] * mul; mul += inc; } matcur[j] += biginc[j]; @@ -237,57 +235,34 @@ static t_int *matrix_diag_mul_line8_tilde_perf8(t_int *w) { mul = matend[j]; in = io[j]; - for(i=n; i; i -= 8, in += 8) + for(i=n; i; i -= 8, in += 8, buf += 8) { - in[0] *= mul; - in[1] *= mul; - in[2] *= mul; - in[3] *= mul; - in[4] *= mul; - in[5] *= mul; - in[6] *= mul; - in[7] *= mul; + buf[0] = in[0] * mul; + buf[1] = in[1] * mul; + buf[2] = in[2] * mul; + buf[3] = in[3] * mul; + buf[4] = in[4] * mul; + buf[5] = in[5] * mul; + buf[6] = in[6] * mul; + buf[7] = in[7] * mul; } } } - for(j=0; jx_buf; + for(j=0; jx_buf; - for(i=n; i; i -= 8, buf += 8, in += 8) + out = io[j+n_io]; + for(i=n; i; i -= 8, buf += 8, out += 8) { - buf[0] = in[0]; - buf[1] = in[1]; - buf[2] = in[2]; - buf[3] = in[3]; - buf[4] = in[4]; - buf[5] = in[5]; - buf[6] = in[6]; - buf[7] = in[7]; - } - in = io[n_io-j-1]; - out1 = io[j+n_io]; - out2 = io[dn_io-j-1]; - buf = x->x_buf; - for(i=n; i; i -= 8, buf += 8, in += 8, out1 += 8, out2 += 8) - { - out2[0] = in[0]; - out2[1] = in[1]; - out2[2] = in[2]; - out2[3] = in[3]; - out2[4] = in[4]; - out2[5] = in[5]; - out2[6] = in[6]; - out2[7] = in[7]; - out1[0] = buf[0]; - out1[1] = buf[1]; - out1[2] = buf[2]; - out1[3] = buf[3]; - out1[4] = buf[4]; - out1[5] = buf[5]; - out1[6] = buf[6]; - out1[7] = buf[7]; + out[0] = buf[0]; + out[1] = buf[1]; + out[2] = buf[2]; + out[3] = buf[3]; + out[4] = buf[4]; + out[5] = buf[5]; + out[6] = buf[6]; + out[7] = buf[7]; } } return (w+3); @@ -296,16 +271,17 @@ static t_int *matrix_diag_mul_line8_tilde_perf8(t_int *w) static void matrix_diag_mul_line8_tilde_dsp(t_matrix_diag_mul_line8_tilde *x, t_signal **sp) { int i, n=sp[0]->s_n; + int bufsize = sp[0]->s_n*x->x_n_io; if(!x->x_buf) { - x->x_bufsize = n; + x->x_bufsize = bufsize; x->x_buf = (t_float *)getbytes(x->x_bufsize * sizeof(t_float)); } - else if(x->x_bufsize != n) + else if(x->x_bufsize != bufsize) { - x->x_buf = (t_float *)resizebytes(x->x_buf, x->x_bufsize*sizeof(t_float), n*sizeof(t_float)); - x->x_bufsize = n; + x->x_buf = (t_float *)resizebytes(x->x_buf, x->x_bufsize*sizeof(t_float), bufsize*sizeof(t_float)); + x->x_bufsize = bufsize; } n = 2 * x->x_n_io; diff --git a/src/matrix_diag_mul_line~.c b/src/matrix_diag_mul_line~.c index a9d0286..61e9368 100644 --- a/src/matrix_diag_mul_line~.c +++ b/src/matrix_diag_mul_line~.c @@ -1,7 +1,7 @@ /* For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. -iem_matrix written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ +iem_matrix written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */ #include "m_pd.h" #include "iemlib.h" @@ -159,13 +159,11 @@ static t_int *matrix_diag_mul_line_tilde_perf8(t_int *w) t_matrix_diag_mul_line_tilde *x = (t_matrix_diag_mul_line_tilde *)(w[1]); int n = (int)(w[2]); t_float **io = x->x_io; - t_float *buf; + t_float *buf=x->x_buf; t_float *matcur, *matend; t_float *incp, *biginc, inc; int n_io = x->x_n_io; - int hn_io = n_io / 2; - int dn_io = 2 * n_io; - t_float *in, *out1, *out2, mul; + t_float *in, *out, mul; int i, j; if(x->x_retarget) @@ -206,23 +204,23 @@ static t_int *matrix_diag_mul_line_tilde_perf8(t_int *w) inc = incp[j]; mul = matcur[j]; in = io[j]; - for(i=n; i; i -= 8, in += 8) + for(i=n; i; i -= 8, in += 8, buf += 8) { - in[0] *= mul; + buf[0] = in[0] * mul; mul += inc; - in[1] *= mul; + buf[1] = in[1] * mul; mul += inc; - in[2] *= mul; + buf[2] = in[2] * mul; mul += inc; - in[3] *= mul; + buf[3] = in[3] * mul; mul += inc; - in[4] *= mul; + buf[4] = in[4] * mul; mul += inc; - in[5] *= mul; + buf[5] = in[5] * mul; mul += inc; - in[6] *= mul; + buf[6] = in[6] * mul; mul += inc; - in[7] *= mul; + buf[7] = in[7] * mul; mul += inc; } matcur[j] += biginc[j]; @@ -243,57 +241,34 @@ static t_int *matrix_diag_mul_line_tilde_perf8(t_int *w) { mul = matend[j]; in = io[j]; - for(i=n; i; i -= 8, in += 8) + for(i=n; i; i -= 8, in += 8, buf += 8) { - in[0] *= mul; - in[1] *= mul; - in[2] *= mul; - in[3] *= mul; - in[4] *= mul; - in[5] *= mul; - in[6] *= mul; - in[7] *= mul; + buf[0] = in[0] * mul; + buf[1] = in[1] * mul; + buf[2] = in[2] * mul; + buf[3] = in[3] * mul; + buf[4] = in[4] * mul; + buf[5] = in[5] * mul; + buf[6] = in[6] * mul; + buf[7] = in[7] * mul; } } } - - for(j=0; jx_buf; + for(j=0; jx_buf; - for(i=n; i; i -= 8, buf += 8, in += 8) - { - buf[0] = in[0]; - buf[1] = in[1]; - buf[2] = in[2]; - buf[3] = in[3]; - buf[4] = in[4]; - buf[5] = in[5]; - buf[6] = in[6]; - buf[7] = in[7]; - } - in = io[n_io-j-1]; - out1 = io[j+n_io]; - out2 = io[dn_io-j-1]; - buf = x->x_buf; - for(i=n; i; i -= 8, buf += 8, in += 8, out1 += 8, out2 += 8) + out = io[j+n_io]; + for(i=n; i; i -= 8, buf += 8, out += 8) { - out2[0] = in[0]; - out2[1] = in[1]; - out2[2] = in[2]; - out2[3] = in[3]; - out2[4] = in[4]; - out2[5] = in[5]; - out2[6] = in[6]; - out2[7] = in[7]; - out1[0] = buf[0]; - out1[1] = buf[1]; - out1[2] = buf[2]; - out1[3] = buf[3]; - out1[4] = buf[4]; - out1[5] = buf[5]; - out1[6] = buf[6]; - out1[7] = buf[7]; + out[0] = buf[0]; + out[1] = buf[1]; + out[2] = buf[2]; + out[3] = buf[3]; + out[4] = buf[4]; + out[5] = buf[5]; + out[6] = buf[6]; + out[7] = buf[7]; } } return (w+3); @@ -302,16 +277,17 @@ static t_int *matrix_diag_mul_line_tilde_perf8(t_int *w) static void matrix_diag_mul_line_tilde_dsp(t_matrix_diag_mul_line_tilde *x, t_signal **sp) { int i, n=sp[0]->s_n; + int bufsize = sp[0]->s_n*x->x_n_io; if(!x->x_buf) { - x->x_bufsize = n; + x->x_bufsize = bufsize; x->x_buf = (t_float *)getbytes(x->x_bufsize * sizeof(t_float)); } - else if(x->x_bufsize != n) + else if(x->x_bufsize != bufsize) { - x->x_buf = (t_float *)resizebytes(x->x_buf, x->x_bufsize*sizeof(t_float), n*sizeof(t_float)); - x->x_bufsize = n; + x->x_buf = (t_float *)resizebytes(x->x_buf, x->x_bufsize*sizeof(t_float), bufsize*sizeof(t_float)); + x->x_bufsize = bufsize; } n = 2 * x->x_n_io; diff --git a/src/matrix_diag_mul_stat~.c b/src/matrix_diag_mul_stat~.c index a7c3aeb..e7e3a00 100644 --- a/src/matrix_diag_mul_stat~.c +++ b/src/matrix_diag_mul_stat~.c @@ -1,7 +1,7 @@ /* For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. -iem_matrix written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ +iem_matrix written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2007 */ #include "m_pd.h" #include "iemlib.h" @@ -78,9 +78,7 @@ static t_int *matrix_diag_mul_stat_tilde_perform(t_int *w) t_float *buf = x->x_buf; t_float *mat = x->x_matbuf; int n_io = x->x_n_io; - int hn_io = n_io / 2; - int dn_io = 2 * n_io; - t_float *in, *out1, *out2, mul; + t_float *in, *out, mul; int i, j; for(j=0; jx_buf; + for(j=0; jx_io; - t_float *buf; + t_float *buf = x->x_buf; t_float *mat = x->x_matbuf; int n_io = x->x_n_io; - int hn_io = n_io / 2; - int dn_io = 2 * n_io; - t_float *in, *out1, *out2, mul; + t_float *in, *out, mul; int i, j; for(j=0; jx_buf; + for(j=0; jx_buf; - for(i=n; i; i -= 8, buf += 8, in += 8) - { - buf[0] = in[0]; - buf[1] = in[1]; - buf[2] = in[2]; - buf[3] = in[3]; - buf[4] = in[4]; - buf[5] = in[5]; - buf[6] = in[6]; - buf[7] = in[7]; - } - in = io[n_io-j-1]; - out1 = io[j+n_io]; - out2 = io[dn_io-j-1]; - buf = x->x_buf; - for(i=n; i; i -= 8, buf += 8, in += 8, out1 += 8, out2 += 8) + out = io[j+n_io]; + for(i=n; i; i -= 8, buf += 8, out += 8) { - out2[0] = in[0]; - out2[1] = in[1]; - out2[2] = in[2]; - out2[3] = in[3]; - out2[4] = in[4]; - out2[5] = in[5]; - out2[6] = in[6]; - out2[7] = in[7]; - out1[0] = buf[0]; - out1[1] = buf[1]; - out1[2] = buf[2]; - out1[3] = buf[3]; - out1[4] = buf[4]; - out1[5] = buf[5]; - out1[6] = buf[6]; - out1[7] = buf[7]; + out[0] = buf[0]; + out[1] = buf[1]; + out[2] = buf[2]; + out[3] = buf[3]; + out[4] = buf[4]; + out[5] = buf[5]; + out[6] = buf[6]; + out[7] = buf[7]; } } return (w+3); @@ -185,23 +149,24 @@ static t_int *matrix_diag_mul_stat_tilde_perf8(t_int *w) static void matrix_diag_mul_stat_tilde_dsp(t_matrix_diag_mul_stat_tilde *x, t_signal **sp) { int i, n=sp[0]->s_n; + int bufsize = sp[0]->s_n*x->x_n_io; if(!x->x_buf) { - x->x_bufsize = n; + x->x_bufsize = bufsize; x->x_buf = (t_float *)getbytes(x->x_bufsize * sizeof(t_float)); } - else if(x->x_bufsize != n) + else if(x->x_bufsize != bufsize) { - x->x_buf = (t_float *)resizebytes(x->x_buf, x->x_bufsize*sizeof(t_float), n*sizeof(t_float)); - x->x_bufsize = n; + x->x_buf = (t_float *)resizebytes(x->x_buf, x->x_bufsize*sizeof(t_float), bufsize*sizeof(t_float)); + x->x_bufsize = bufsize; } n = 2 * x->x_n_io; for(i=0; ix_io[i] = sp[i]->s_vec; - // post("iovec_addr = %d", (unsigned int)x->x_io[i]); +// post("iovec_addr = %d", (unsigned int)x->x_io[i]); } n = sp[0]->s_n; -- cgit v1.2.1