[PD-cvs] pd/src m_simd_sse_gcc.c,1.1.4.8,1.1.4.9 m_simd_sse_vc.h,1.1.4.4,1.1.4.5 m_simd_sse_gcc.h,1.1.4.4,1.1.4.5 m_simd_ve_gcc.h,1.1.4.2,1.1.4.3 m_simd.c,1.1.4.2,1.1.4.3 d_ctl.c,1.3.4.4,1.3.4.5
Tim Blechmann
timblech at users.sourceforge.net
Sat Jan 8 23:13:43 CET 2005
- Previous message: [PD-cvs] pd/src d_ctl.c,1.3.4.3,1.3.4.4 m_simd.c,1.1.4.1,1.1.4.2 m_simd_sse_gcc.c,1.1.4.7,1.1.4.8 m_simd_sse_gcc.h,1.1.4.3,1.1.4.4 m_simd_sse_vc.h,1.1.4.3,1.1.4.4 m_simd_ve_gcc.h,1.1.4.1,1.1.4.2 m_pd.h,1.4.4.5,1.4.4.6
- Next message: [PD-cvs] externals/tb/volctl~ volctl~.c,1.2,1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25230
Modified Files:
Tag: devel_0_38
m_simd_sse_gcc.c m_simd_sse_vc.h m_simd_sse_gcc.h
m_simd_ve_gcc.h m_simd.c d_ctl.c
Log Message:
oops ... reversed hanning ... this should work
Index: m_simd.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd.c,v
retrieving revision 1.1.4.2
retrieving revision 1.1.4.3
diff -C2 -d -r1.1.4.2 -r1.1.4.3
*** m_simd.c 8 Jan 2005 19:43:52 -0000 1.1.4.2
--- m_simd.c 8 Jan 2005 22:13:40 -0000 1.1.4.3
***************
*** 111,112 ****
--- 111,161 ----
#endif /* DONTUSESIMD */
+
+ float sumvec_8(t_float* in, t_int n)
+ {
+ int i;
+ float result = 0;
+
+ n>>=3;
+ for (i = 0; i != n; ++i)
+ {
+ result += *in++;
+ result += *in++;
+ result += *in++;
+ result += *in++;
+ result += *in++;
+ result += *in++;
+ result += *in++;
+ result += *in++;
+ }
+ return result;
+ }
+
+ float env_tilde_accum(t_float* in, t_float* hp, t_int n)
+ {
+ float ret = 0;
+ int i;
+
+ n>>=3;
+ for (i = 0; i !=n; ++i)
+ {
+ in--;
+ ret += *hp++ * (*in * *in);
+ in--;
+ ret += *hp++ * (*in * *in);
+ in--;
+ ret += *hp++ * (*in * *in);
+ in--;
+ ret += *hp++ * (*in * *in);
+ in--;
+ ret += *hp++ * (*in * *in);
+ in--;
+ ret += *hp++ * (*in * *in);
+ in--;
+ ret += *hp++ * (*in * *in);
+ in--;
+ ret += *hp++ * (*in * *in);
+ }
+
+ return ret;
+ }
Index: d_ctl.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_ctl.c,v
retrieving revision 1.3.4.4
retrieving revision 1.3.4.5
diff -C2 -d -r1.3.4.4 -r1.3.4.5
*** d_ctl.c 8 Jan 2005 19:43:51 -0000 1.3.4.4
--- d_ctl.c 8 Jan 2005 22:13:40 -0000 1.3.4.5
***************
*** 653,658 ****
float x_sumbuf[MAXOVERLAP]; /* summing buffer */
float x_f;
- float *x_tmpbuf; /* tb: temporary buffer for simd */
- int x_blocksize; /* tb: only for freealignedbytes */
} t_sigenv;
--- 653,656 ----
***************
*** 689,694 ****
x->x_outlet = outlet_new(&x->x_obj, gensym("float"));
x->x_f = 0;
- x->x_blocksize = 64;
- x->x_tmpbuf = getalignedbytes(x->x_blocksize * sizeof(float));
return (x);
}
--- 687,690 ----
***************
*** 734,757 ****
/* tb: loop unrolling and simd */
! float sumvec_8(t_float* in, t_int n)
! {
! int i;
! float result = 0;
!
! n>>=3;
! for (i = 0; i != n; ++i)
! {
! result += *in++;
! result += *in++;
! result += *in++;
! result += *in++;
! result += *in++;
! result += *in++;
! result += *in++;
! result += *in++;
! }
! return result;
! }
!
static t_int *env_tilde_perf8(t_int *w)
--- 730,734 ----
/* tb: loop unrolling and simd */
! float env_tilde_accum(t_float* in, t_float* hp, t_int n);
static t_int *env_tilde_perf8(t_int *w)
***************
*** 762,788 ****
int count;
float *sump;
for (count = x->x_phase, sump = x->x_sumbuf;
count < x->x_npoints; count += x->x_realperiod, sump++)
{
float *hp = x->x_buf + count;
- float *fp = in;
- float sum = *sump;
- float *tmp = x->x_tmpbuf;
- int i;
- t_int sqrargs[4];
- t_int timesargs[5];
! sqrargs[1] = (t_int)in;
! sqrargs[2] = (t_int)tmp;
! sqrargs[3] = (t_int) n;
! timesargs[1] = (t_int)tmp;
! timesargs[2] = (t_int)hp;
! timesargs[3] = (t_int)tmp;
! timesargs[4] = (t_int)n;
!
! sqr_perf8(sqrargs);
! times_perf8(timesargs);
!
! *sump += sumvec_8(tmp,n);
}
sump[0] = 0;
--- 739,749 ----
int count;
float *sump;
+ in += n;
for (count = x->x_phase, sump = x->x_sumbuf;
count < x->x_npoints; count += x->x_realperiod, sump++)
{
float *hp = x->x_buf + count;
! *sump += env_tilde_accum(in, hp, n);
}
sump[0] = 0;
***************
*** 808,834 ****
int count;
float *sump;
for (count = x->x_phase, sump = x->x_sumbuf;
count < x->x_npoints; count += x->x_realperiod, sump++)
{
float *hp = x->x_buf + count;
- float *fp = in;
- float sum = *sump;
- float *tmp = x->x_tmpbuf;
- int i;
- t_int sqrargs[4];
- t_int timesargs[5];
-
- sqrargs[1] = (t_int)in;
- sqrargs[2] = (t_int)tmp;
- sqrargs[3] = (t_int) n;
- timesargs[1] = (t_int)tmp;
- timesargs[2] = (t_int)hp;
- timesargs[3] = (t_int)tmp;
- timesargs[4] = (t_int)n;
! sqr_perf_simd(sqrargs);
! times_perf_simd(timesargs);
!
! *sump += sumvec_simd(tmp,n);
}
sump[0] = 0;
--- 769,779 ----
int count;
float *sump;
+ in += n;
for (count = x->x_phase, sump = x->x_sumbuf;
count < x->x_npoints; count += x->x_realperiod, sump++)
{
float *hp = x->x_buf + count;
! *sump += env_tilde_accum_simd(in, hp, n);
}
sump[0] = 0;
***************
*** 863,868 ****
if (sp[0]->s_n > MAXVSTAKEN) bug("env_tilde_dsp");
-
- x->x_blocksize = sp[0]->s_n;
}
--- 808,811 ----
Index: m_simd_sse_vc.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_vc.h,v
retrieving revision 1.1.4.4
retrieving revision 1.1.4.5
diff -C2 -d -r1.1.4.4 -r1.1.4.5
*** m_simd_sse_vc.h 8 Jan 2005 19:43:52 -0000 1.1.4.4
--- m_simd_sse_vc.h 8 Jan 2005 22:13:40 -0000 1.1.4.5
***************
*** 42,45 ****
--- 42,46 ----
#define sum_vecsimd sumvec_8
+ #define env_tilde_accum_simd env_tilde_accum
#define sigwrap_perf_simd sigwrap_perform /* SIMD not implemented */
Index: m_simd_sse_gcc.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_gcc.c,v
retrieving revision 1.1.4.8
retrieving revision 1.1.4.9
diff -C2 -d -r1.1.4.8 -r1.1.4.9
*** m_simd_sse_gcc.c 8 Jan 2005 19:43:52 -0000 1.1.4.8
--- m_simd_sse_gcc.c 8 Jan 2005 22:13:40 -0000 1.1.4.9
***************
*** 815,819 ****
float sumvec_simd(t_float* in, t_int n)
{
! float ret = 0;
asm(
".set T_FLOAT,4 \n"
--- 815,819 ----
float sumvec_simd(t_float* in, t_int n)
{
! float ret;
asm(
".set T_FLOAT,4 \n"
***************
*** 859,862 ****
--- 859,929 ----
+ float env_tilde_accum_simd(t_float* in, t_float* hp, t_int n)
+ {
+ float ret;
+ asm(
+ ".set T_FLOAT,4 \n"
+
+ "shrl $4, %2 \n" /* divide by 16 */
+ "xorps %%xmm2, %%xmm2 \n" /* zero values */
+ "xorps %%xmm3, %%xmm3 \n"
+ "xorps %%xmm4, %%xmm4 \n"
+ "xorps %0, %0 \n"
+
+ "1: \n"
+ "movaps -4*T_FLOAT(%1), %%xmm0 \n"
+ "movhlps %%xmm0, %%xmm1 \n" /* reversing xmm0 CHECK!!!*/
+ "shufps $68, %%xmm1, %%xmm0 \n"
+ "movaps (%3), %%xmm1 \n"
+ "mulps %%xmm0, %%xmm0 \n"
+ "mulps %%xmm1, %%xmm0 \n"
+ "addps %%xmm0, %%xmm2 \n"
+
+ "movaps -8*T_FLOAT(%1), %%xmm0 \n"
+ "movhlps %%xmm0, %%xmm1 \n" /* reversing xmm0 */
+ "shufps $68, %%xmm1, %%xmm0 \n"
+ "movaps 4*T_FLOAT(%3), %%xmm1 \n"
+ "mulps %%xmm0, %%xmm0 \n"
+ "mulps %%xmm1, %%xmm0 \n"
+ "addps %%xmm0, %%xmm2 \n"
+
+ "movaps -12*T_FLOAT(%1), %%xmm0 \n"
+ "movhlps %%xmm0, %%xmm1 \n" /* reversing xmm0 */
+ "shufps $68, %%xmm1, %%xmm0 \n"
+ "movaps 8*T_FLOAT(%3), %%xmm1 \n"
+ "mulps %%xmm0, %%xmm0 \n"
+ "mulps %%xmm1, %%xmm0 \n"
+ "addps %%xmm0, %%xmm2 \n"
+
+ "movaps -16*T_FLOAT(%1), %%xmm0 \n"
+ "movhlps %%xmm0, %%xmm1 \n" /* reversing xmm0 */
+ "shufps $68, %%xmm1, %%xmm0 \n"
+ "movaps 12*T_FLOAT(%3), %%xmm1 \n"
+ "mulps %%xmm0, %%xmm0 \n"
+ "mulps %%xmm1, %%xmm0 \n"
+ "addps %%xmm0, %%xmm2 \n"
+
+ "addl $-16*T_FLOAT,%1 \n"
+ "addl $16*T_FLOAT,%3 \n"
+ "loop 1b \n"
+
+ "movhlps %%xmm2, %%xmm3 \n"
+ "movups %%xmm2, %%xmm4 \n"
+ "movups %%xmm3, %0 \n"
+ "shufps $81, %%xmm4, %%xmm4 \n"
+ "shufps $81, %0, %0 \n"
+
+ "addss %%xmm2, %%xmm3 \n"
+ "addss %%xmm3, %%xmm4 \n"
+ "addss %%xmm4, %0 \n"
+
+
+ :"=x"(ret)
+ :"r"(in),"c"(n), "r"(hp)
+ :"%xmm0","%xmm1","%xmm2","%xmm3", "%xmm4", "%xmm5");
+ return ret;
+ }
+
+
#endif
Index: m_simd_sse_gcc.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_gcc.h,v
retrieving revision 1.1.4.4
retrieving revision 1.1.4.5
diff -C2 -d -r1.1.4.4 -r1.1.4.5
*** m_simd_sse_gcc.h 8 Jan 2005 19:43:52 -0000 1.1.4.4
--- m_simd_sse_gcc.h 8 Jan 2005 22:13:40 -0000 1.1.4.5
***************
*** 19,22 ****
--- 19,23 ----
/* functions in d_ctl.c */
t_int *sig_tilde_perf_simd(t_int *w);
+ float env_tilde_accum_simd(t_float* in, t_float* hp, t_int n);
/* functions in d_arithmetic.c */
Index: m_simd_ve_gcc.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_ve_gcc.h,v
retrieving revision 1.1.4.2
retrieving revision 1.1.4.3
diff -C2 -d -r1.1.4.2 -r1.1.4.3
*** m_simd_ve_gcc.h 8 Jan 2005 19:43:52 -0000 1.1.4.2
--- m_simd_ve_gcc.h 8 Jan 2005 22:13:40 -0000 1.1.4.3
***************
*** 41,44 ****
--- 41,45 ----
t_int *sigrsqrt_perf_simd(t_int *w);
+ #define env_tilde_accum_simdc env_tilde_accum
#define sum_vecsimd sumvec_8 /* SIMD not implemented */
- Previous message: [PD-cvs] pd/src d_ctl.c,1.3.4.3,1.3.4.4 m_simd.c,1.1.4.1,1.1.4.2 m_simd_sse_gcc.c,1.1.4.7,1.1.4.8 m_simd_sse_gcc.h,1.1.4.3,1.1.4.4 m_simd_sse_vc.h,1.1.4.3,1.1.4.4 m_simd_ve_gcc.h,1.1.4.1,1.1.4.2 m_pd.h,1.4.4.5,1.4.4.6
- Next message: [PD-cvs] externals/tb/volctl~ volctl~.c,1.2,1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list