Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7145
Modified Files:
Tag: devel_0_38
d_array.c d_ctl.c d_delay.c d_global.c d_soundfile.c m_pd.h
m_sched.c m_simd.c m_simd_sse_gcc.c m_simd_sse_gcc.h
m_simd_sse_vc.c m_simd_sse_vc.h m_simd_ve_gcc.c
m_simd_ve_gcc.h s_audio.c s_entry.c x_net.c
Log Message:
mainly simd changes for gcc/i386
Index: m_simd.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd.c,v
retrieving revision 1.1.4.3
retrieving revision 1.1.4.4
diff -C2 -d -r1.1.4.3 -r1.1.4.4
*** m_simd.c 8 Jan 2005 22:13:40 -0000 1.1.4.3
--- m_simd.c 11 Jan 2005 21:41:14 -0000 1.1.4.4
***************
*** 37,115 ****
}
- void testcopyvec_8(t_float *dst,const t_float *src,int n)
- {
- while(n--) {
- *(dst++) = (PD_BIGORSMALL(*src) ? 0 : *src); src++;
- }
- }
! void testaddvec_8(t_float *dst,const t_float *src,int n)
{
! while(n--) {
! *(dst++) += (PD_BIGORSMALL(*src) ? 0 : *src); src++;
! }
}
! int simd_check1(t_int n, t_float* ptr1)
{
! return SIMD_CHECK1(n,ptr1);
}
- int simd_check2(t_int n, t_float* ptr1, t_float* ptr2)
- {
- return SIMD_CHECK2(n,ptr1,ptr2);
- }
! int simd_check3(t_int n, t_float* ptr1, t_float* ptr2, t_float* ptr3)
! {
! return SIMD_CHECK3(n,ptr1,ptr2,ptr3);
! }
!
! #ifdef DONTUSESIMD
! int simd_runtime_check()
{
! return 0;
}
! /* tb: wrapper for simd functions */
! void zerovec_simd(t_float *dst,int n)
{
! zerovec_8(dst,n);
}
! void setvec_simd(t_float *dst,t_float v,int n)
{
! setvec_8(dst,v,n);
}
! void copyvec_simd(t_float *dst,const t_float *src,int n)
{
! copyvec_8(dst,src,n);
}
- void addvec_simd(t_float *dst,const t_float *src,int n)
- {
- addvec_8(dst,src,n);
- }
! void testcopyvec_simd(t_float *dst,const t_float *src,int n)
{
! testcopyvec_8(dst,src,n);
}
! void testaddvec_simd(t_float *dst,const t_float *src,int n)
{
! testaddvec_8(dst,src,n);
}
! float sumvec_simd(t_float* in, t_int n)
{
! return sumvec_8(in,n);
}
- #endif /* DONTUSESIMD */
-
-
float sumvec_8(t_float* in, t_int n)
{
--- 37,95 ----
}
! void copyvec(t_float *dst,const t_float *src,int n)
{
! while(n--)
! *dst++ = *src++;
}
! void addvec(t_float *dst,const t_float *src,int n)
{
! while(n--)
! *dst++ += *src++;
}
! void testcopyvec_8(t_float *dst,const t_float *src,int n)
{
! while(n--) {
! *(dst++) = (PD_BIGORSMALL(*src) ? 0 : *src); src++;
! }
}
! void testcopyvec(t_float *dst,const t_float *src,int n)
{
! testcopyvec_8(dst, src, n);
}
! void testaddvec_8(t_float *dst,const t_float *src,int n)
{
! while(n--) {
! *(dst++) += (PD_BIGORSMALL(*src) ? 0 : *src); src++;
! }
}
! void testaddvec(t_float *dst,const t_float *src,int n)
{
! testaddvec_8(dst, src, n);
}
! int simd_check1(t_int n, t_float* ptr1)
{
! return SIMD_CHECK1(n,ptr1);
}
! int simd_check2(t_int n, t_float* ptr1, t_float* ptr2)
{
! return SIMD_CHECK2(n,ptr1,ptr2);
}
! int simd_check3(t_int n, t_float* ptr1, t_float* ptr2, t_float* ptr3)
{
! return SIMD_CHECK3(n,ptr1,ptr2,ptr3);
}
float sumvec_8(t_float* in, t_int n)
{
***************
*** 132,136 ****
}
! float env_tilde_accum(t_float* in, t_float* hp, t_int n)
{
float ret = 0;
--- 112,116 ----
}
! float env_tilde_accum_8(t_float* in, t_float* hp, t_int n)
{
float ret = 0;
***************
*** 157,161 ****
ret += *hp++ * (*in * *in);
}
-
return ret;
}
--- 137,246 ----
ret += *hp++ * (*in * *in);
}
return ret;
}
+
+ float peakvec(t_float* vec, t_int n, t_float cur_max)
+ {
+ int i;
+ for (i = 0; i != n; ++i)
+ {
+ float f = *vec++;
+ if (f > cur_max) cur_max = f;
+ else if (-f > cur_max) cur_max = -f;
+ }
+ return cur_max;
+ }
+
+ void line_tilde_slope(t_float* out, t_int n, t_float* value,
+ t_float* slopes, t_float* slopestep)
+ {
+ n>>=3;
+ t_float slope = slopes[0];
+ t_float f = *value;
+ while (n--)
+ {
+ *out++ = f;
+ f += slope;
+ *out++ = f;
+ f += slope;
+ *out++ = f;
+ f += slope;
+ *out++ = f;
+ f += slope;
+ *out++ = f;
+ f += slope;
+ *out++ = f;
+ f += slope;
+ *out++ = f;
+ f += slope;
+ *out++ = f;
+ f += slope;
+ }
+ }
+
+
+ #ifdef DONTUSESIMD
+ int simd_runtime_check()
+ {
+ return 0;
+ }
+
+ /* tb: wrapper for simd functions */
+ void zerovec_simd(t_float *dst,int n)
+ {
+ zerovec_8(dst,n);
+ }
+
+ void setvec_simd(t_float *dst,t_float v,int n)
+ {
+ setvec_8(dst,v,n);
+ }
+
+ void copyvec_simd(t_float *dst,const t_float *src,int n)
+ {
+ copyvec_8(dst,src,n);
+ }
+
+ void copyvec_simd_unalignedsrc(t_float *dst,const t_float *src,int n)
+ {
+ copyvec_8(dst,src,n);
+ }
+
+ void addvec_simd(t_float *dst,const t_float *src,int n)
+ {
+ addvec_8(dst,src,n);
+ }
+
+ void testcopyvec_simd(t_float *dst,const t_float *src,int n)
+ {
+ testcopyvec_8(dst,src,n);
+ }
+
+ void testaddvec_simd(t_float *dst,const t_float *src,int n)
+ {
+ testaddvec_8(dst,src,n);
+ }
+
+ float sumvec_simd(t_float* in, t_int n)
+ {
+ return sumvec_8(in,n);
+ }
+
+ float env_tilde_accum_simd(t_float* in, t_float* hp, t_int n)
+ {
+ return env_tilde_accum_8(in, hp, n);
+ }
+
+ float peakvec_simd(t_float* vec, t_int n, t_float cur_max)
+ {
+ return peakvec(vec, n, cur_max);
+ }
+
+
+ /* float testfloat_simd(t_float f) */
+ /* { */
+ /* testfloat(f); */
+ /* } */
+
+ #endif /* DONTUSESIMD */
+
Index: s_entry.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_entry.c,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -C2 -d -r1.2.4.1 -r1.2.4.2
*** s_entry.c 10 Nov 2004 10:52:15 -0000 1.2.4.1
--- s_entry.c 11 Jan 2005 21:41:14 -0000 1.2.4.2
***************
*** 7,11 ****
#include <windows.h>
#include <stdio.h>
- #include <stdlib.h>
int WINAPI WinMain(HINSTANCE hInstance,
--- 7,10 ----
***************
*** 14,20 ****
int nCmdShow)
{
! __try
! {
! sys_main(__argc,__argv); /* use preparsed arguments */
}
__finally
--- 13,18 ----
int nCmdShow)
{
! __try {
! sys_main(__argc,__argv);
}
__finally
Index: d_ctl.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_ctl.c,v
retrieving revision 1.3.4.5
retrieving revision 1.3.4.6
diff -C2 -d -r1.3.4.5 -r1.3.4.6
*** d_ctl.c 8 Jan 2005 22:13:40 -0000 1.3.4.5
--- d_ctl.c 11 Jan 2005 21:41:14 -0000 1.3.4.6
***************
*** 107,110 ****
--- 107,112 ----
int x_ticksleft;
int x_retarget;
+ float* x_slopes; /* tb: for simd-optimized line */
+ float x_slopestep; /* tb: 4*x->x_inc */
} t_line;
***************
*** 130,134 ****
{
float f = x->x_value;
! while (n--) *out++ = f, f += x->x_inc;
x->x_value += x->x_biginc;
x->x_ticksleft--;
--- 132,137 ----
{
float f = x->x_value;
! float slope = x->x_inc; /* tb: make sure, x->inc is loaded to a register */
! while (n--) *out++ = f, f += slope;
x->x_value += x->x_biginc;
x->x_ticksleft--;
***************
*** 167,188 ****
float f = x->x_value;
n >>= 3;
while (n--)
{
*out++ = f;
! f += x->x_inc;
*out++ = f;
! f += x->x_inc;
*out++ = f;
! f += x->x_inc;
*out++ = f;
! f += x->x_inc;
*out++ = f;
! f += x->x_inc;
*out++ = f;
! f += x->x_inc;
*out++ = f;
! f += x->x_inc;
*out++ = f;
! f += x->x_inc;
}
--- 170,192 ----
float f = x->x_value;
n >>= 3;
+ float slope = x->x_inc;
while (n--)
{
*out++ = f;
! f += slope;
*out++ = f;
! f += slope;
*out++ = f;
! f += slope;
*out++ = f;
! f += slope;
*out++ = f;
! f += slope;
*out++ = f;
! f += slope;
*out++ = f;
! f += slope;
*out++ = f;
! f += slope;
}
***************
*** 211,214 ****
--- 215,220 ----
{
int nticks = x->x_inletwas * x->x_dspticktomsec;
+ int i;
+
if (!nticks) nticks = 1;
x->x_ticksleft = nticks;
***************
*** 216,243 ****
x->x_inc = x->x_1overn * x->x_biginc;
x->x_retarget = 0;
}
if (x->x_ticksleft)
{
float f = x->x_value;
! n >>= 3;
! while (n--)
! {
! *out++ = f;
! f += x->x_inc;
! *out++ = f;
! f += x->x_inc;
! *out++ = f;
! f += x->x_inc;
! *out++ = f;
! f += x->x_inc;
! *out++ = f;
! f += x->x_inc;
! *out++ = f;
! f += x->x_inc;
! *out++ = f;
! f += x->x_inc;
! *out++ = f;
! f += x->x_inc;
! }
x->x_value += x->x_biginc;
x->x_ticksleft--;
--- 222,238 ----
x->x_inc = x->x_1overn * x->x_biginc;
x->x_retarget = 0;
+
+ for (i = 0; i != 4; ++i)
+ {
+ x->x_slopes[i] = i*x->x_inc;
+ }
+ x->x_slopestep = 4 * x->x_inc;
}
if (x->x_ticksleft)
{
float f = x->x_value;
!
! line_tilde_slope_simd(out, n, &x->x_value, x->x_slopes, &x->x_slopestep);
!
x->x_value += x->x_biginc;
x->x_ticksleft--;
***************
*** 246,250 ****
{
float f = x->x_value = x->x_target;
! setvec_8(out,f,n);
}
return (w+4);
--- 241,245 ----
{
float f = x->x_value = x->x_target;
! setvec_simd(out,f,n);
}
return (w+4);
***************
*** 289,292 ****
--- 284,288 ----
}
+ /* tb: modified for simd-optimized line~ */
static void *line_tilde_new(void)
{
***************
*** 296,306 ****
x->x_ticksleft = x->x_retarget = 0;
x->x_value = x->x_target = x->x_inletvalue = x->x_inletwas = 0;
return (x);
}
static void line_tilde_setup(void)
{
! line_tilde_class = class_new(gensym("line~"), line_tilde_new, 0,
! sizeof(t_line), 0, 0);
class_addfloat(line_tilde_class, (t_method)line_tilde_float);
class_addmethod(line_tilde_class, (t_method)line_tilde_dsp,
--- 292,308 ----
x->x_ticksleft = x->x_retarget = 0;
x->x_value = x->x_target = x->x_inletvalue = x->x_inletwas = 0;
+ x->x_slopes = getalignedbytes(4*sizeof(t_float));
return (x);
}
+ static void *line_tilde_free(t_line * x)
+ {
+ freealignedbytes(x->x_slopes, 4*sizeof(t_float));
+ }
+
static void line_tilde_setup(void)
{
! line_tilde_class = class_new(gensym("line~"), (t_newmethod)line_tilde_new,
! (t_method)line_tilde_free, sizeof(t_line), 0, 0);
class_addfloat(line_tilde_class, (t_method)line_tilde_float);
class_addmethod(line_tilde_class, (t_method)line_tilde_dsp,
***************
*** 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)
--- 732,736 ----
/* tb: loop unrolling and simd */
! float env_tilde_accum_8(t_float* in, t_float* hp, t_int n);
static t_int *env_tilde_perf8(t_int *w)
***************
*** 745,749 ****
float *hp = x->x_buf + count;
! *sump += env_tilde_accum(in, hp, n);
}
sump[0] = 0;
--- 747,751 ----
float *hp = x->x_buf + count;
! *sump += env_tilde_accum_8(in, hp, n);
}
sump[0] = 0;
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.3
retrieving revision 1.1.4.4
diff -C2 -d -r1.1.4.3 -r1.1.4.4
*** m_simd_ve_gcc.h 8 Jan 2005 22:13:40 -0000 1.1.4.3
--- m_simd_ve_gcc.h 11 Jan 2005 21:41:14 -0000 1.1.4.4
***************
*** 41,46 ****
t_int *sigrsqrt_perf_simd(t_int *w);
! #define env_tilde_accum_simdc env_tilde_accum
#define sum_vecsimd sumvec_8 /* SIMD not implemented */
#endif /* __M_SIMD_VE_GCC_H */
--- 41,49 ----
t_int *sigrsqrt_perf_simd(t_int *w);
! #define env_tilde_accum_simd env_tilde_accum /* SIMD not implemented */
! #define copyvec_simd_unalignedsrc copyvec_8
#define sum_vecsimd sumvec_8 /* SIMD not implemented */
+ #define line_tilde_slope_simd line_tilde_slope_simd /* SIMD not implemented */
+
#endif /* __M_SIMD_VE_GCC_H */
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.5
retrieving revision 1.1.4.6
diff -C2 -d -r1.1.4.5 -r1.1.4.6
*** m_simd_sse_gcc.h 8 Jan 2005 22:13:40 -0000 1.1.4.5
--- m_simd_sse_gcc.h 11 Jan 2005 21:41:14 -0000 1.1.4.6
***************
*** 20,23 ****
--- 20,25 ----
t_int *sig_tilde_perf_simd(t_int *w);
float env_tilde_accum_simd(t_float* in, t_float* hp, t_int n);
+ void line_tilde_slope_simd(t_float* out, t_int n, t_float* value,
+ t_float* slopes, t_float* slopestep);
/* functions in d_arithmetic.c */
Index: d_delay.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_delay.c,v
retrieving revision 1.2.4.3
retrieving revision 1.2.4.4
diff -C2 -d -r1.2.4.3 -r1.2.4.4
*** d_delay.c 7 Jan 2005 15:14:36 -0000 1.2.4.3
--- d_delay.c 11 Jan 2005 21:41:14 -0000 1.2.4.4
***************
*** 136,140 ****
}
else
! copyvec_8(bp, in, n);
c->c_phase = phase;
return (w+4);
--- 136,140 ----
}
else
! testcopyvec_8(bp, in, n);
c->c_phase = phase;
return (w+4);
***************
*** 167,171 ****
}
else
! copyvec_simd(bp, in, n);
c->c_phase = phase;
return (w+4);
--- 167,171 ----
}
else
! testcopyvec_simd(bp, in, n);
c->c_phase = phase;
return (w+4);
***************
*** 220,223 ****
--- 220,224 ----
t_float x_n; /* vector size */
int x_zerodel; /* 0 or vecsize depending on read/write order */
+ void (*x_copy_fp)(t_float*, const t_float*, int); /* tb: copy function */
} t_sigdelread;
***************
*** 251,257 ****
x->x_delsamps = delwriter->x_cspace.c_n - DEFDELVS;
}
! #ifdef DEL_SIMD
! x->x_delsamps += (SIMD_BYTEALIGN - x->x_delsamps) % SIMD_BYTEALIGN;
! #endif
}
--- 252,259 ----
x->x_delsamps = delwriter->x_cspace.c_n - DEFDELVS;
}
! if ( SIMD_CHKCNT(x->x_delsamps))
! x->x_copy_fp = copyvec_simd;
! else
! x->x_copy_fp = copyvec_simd_unalignedsrc;
}
***************
*** 305,308 ****
--- 307,311 ----
int delsamps = *(int *)(w[3]);
int n = (int)(w[4]);
+ t_sigdelread * x = (t_sigdelread *)(w[5]);
int phase = c->c_phase - delsamps, nsamps = c->c_n;
float *vp = c->c_vec, *bp, *ep = vp + (c->c_n + XTRASAMPS);
***************
*** 318,324 ****
else
{
! copyvec_simd(out, bp, n);
}
! return (w+5);
}
--- 321,327 ----
else
{
! x->x_copy_fp(out, bp, n);
}
! return (w+6);
}
***************
*** 335,339 ****
0 : delwriter->x_vecsize);
sigdelread_float(x, x->x_deltime);
- #ifdef DEL_SIMD
if (sp[0]->s_n & 7)
dsp_add(sigdelread_perform, 4,
--- 338,341 ----
***************
*** 341,353 ****
else
if (SIMD_CHECK1(sp[0]->s_n, sp[0]->s_vec))
! dsp_add(sigdelread_perfsimd, 4,
! sp[0]->s_vec, &delwriter->x_cspace, &x->x_delsamps, sp[0]->s_n);
else
dsp_add(sigdelread_perf8, 4,
sp[0]->s_vec, &delwriter->x_cspace, &x->x_delsamps, sp[0]->s_n);
- #else
- dsp_add(sigdelread_perform, 4,
- sp[0]->s_vec, &delwriter->x_cspace, &x->x_delsamps, sp[0]->s_n);
- #endif
}
else if (*x->x_sym->s_name)
--- 343,351 ----
else
if (SIMD_CHECK1(sp[0]->s_n, sp[0]->s_vec))
! dsp_add(sigdelread_perfsimd, 5,
! sp[0]->s_vec, &delwriter->x_cspace, &x->x_delsamps, sp[0]->s_n, x);
else
dsp_add(sigdelread_perf8, 4,
sp[0]->s_vec, &delwriter->x_cspace, &x->x_delsamps, sp[0]->s_n);
}
else if (*x->x_sym->s_name)
Index: d_soundfile.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_soundfile.c,v
retrieving revision 1.4.4.9
retrieving revision 1.4.4.10
diff -C2 -d -r1.4.4.9 -r1.4.4.10
*** d_soundfile.c 14 Dec 2004 09:29:54 -0000 1.4.4.9
--- d_soundfile.c 11 Jan 2005 21:41:14 -0000 1.4.4.10
***************
*** 1074,1078 ****
soundfiler_queue->begin=soundfiler_queue->end=NULL;
! pthread_mutex_unlock(&(soundfiler_queue->mutex));
// initialize thread
--- 1074,1078 ----
soundfiler_queue->begin=soundfiler_queue->end=NULL;
! /* pthread_mutex_unlock(&(soundfiler_queue->mutex)); */
// initialize thread
***************
*** 1383,1387 ****
w[3] = (t_int)(&resume_after_callback);
! set_callback(&soundfiler_read_update_garray, w, 4);
pthread_cond_wait(&resume_after_callback, &resume_after_callback_mutex);
--- 1383,1387 ----
w[3] = (t_int)(&resume_after_callback);
! sys_callback(&soundfiler_read_update_garray, w, 4);
pthread_cond_wait(&resume_after_callback, &resume_after_callback_mutex);
***************
*** 1400,1404 ****
w[0] = (t_int)(garrays[i]);
w[1] = (t_int)finalsize;
! set_callback(&soundfiler_read_update_graphics, w, 2);
}
--- 1400,1404 ----
w[0] = (t_int)(garrays[i]);
w[1] = (t_int)finalsize;
! sys_callback(&soundfiler_read_update_graphics, w, 2);
}
***************
*** 1426,1430 ****
outargs[0] = (t_int)x->x_obj.ob_outlet;
outargs[1] = (t_int)itemsread;
! set_callback(&soundfiler_read_output, outargs, 2);
}
--- 1426,1430 ----
outargs[0] = (t_int)x->x_obj.ob_outlet;
outargs[1] = (t_int)itemsread;
! sys_callback(&soundfiler_read_output, outargs, 2);
}
Index: m_pd.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_pd.h,v
retrieving revision 1.4.4.6
retrieving revision 1.4.4.7
diff -C2 -d -r1.4.4.6 -r1.4.4.7
*** m_pd.h 8 Jan 2005 19:43:52 -0000 1.4.4.6
--- m_pd.h 11 Jan 2005 21:41:14 -0000 1.4.4.7
***************
*** 669,672 ****
--- 669,677 ----
EXTERN void testaddvec_simd(t_float *dst,const t_float *src,int n);
EXTERN float sumvec_simd(t_float* in, t_int n);
+ EXTERN void copyvec_simd_unalignedsrc(t_float *dst,const t_float *src,int n);
+
+ /* general, non-simd functions */
+ EXTERN void copyvec(t_float *dst,const t_float *src,int n);
+ EXTERN void addvec(t_float *dst,const t_float *src,int n);
EXTERN int simd_runtime_check(void);
***************
*** 768,771 ****
--- 773,783 ----
#endif
+
+ /* tb: wrapper for PD_BIGORSMALL macro */
+ EXTERN void testcopyvec(t_float *dst,const t_float *src,int n);
+ EXTERN void testaddvec(t_float *dst,const t_float *src,int n);
+
+
+
#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
}
Index: m_simd_sse_vc.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_sse_vc.c,v
retrieving revision 1.1.4.5
retrieving revision 1.1.4.6
diff -C2 -d -r1.1.4.5 -r1.1.4.6
*** m_simd_sse_vc.c 29 Nov 2004 18:11:38 -0000 1.1.4.5
--- m_simd_sse_vc.c 11 Jan 2005 21:41:14 -0000 1.1.4.6
***************
*** 149,152 ****
--- 149,153 ----
}
+
t_int *zero_perf_simd(t_int *w)
{
Index: x_net.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/x_net.c,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -C2 -d -r1.2.4.1 -r1.2.4.2
*** x_net.c 8 Nov 2004 17:54:02 -0000 1.2.4.1
--- x_net.c 11 Jan 2005 21:41:15 -0000 1.2.4.2
***************
*** 82,86 ****
intarg = 1;
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY,
! (char *)&intarg, sizeof(intarg)) < 0)
post("setsockopt (TCP_NODELAY) failed\n");
}
--- 82,86 ----
intarg = 1;
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY,
! &intarg, sizeof(intarg)) < 0)
post("setsockopt (TCP_NODELAY) failed\n");
}
***************
*** 274,278 ****
intarg = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
! (char *)&intarg, sizeof(intarg)) < 0)
post("setsockopt (SO_REUSEADDR) failed\n");
#endif
--- 274,278 ----
intarg = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
! &intarg, sizeof(intarg)) < 0)
post("setsockopt (SO_REUSEADDR) failed\n");
#endif
***************
*** 288,292 ****
intarg = 1;
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY,
! (char *)&intarg, sizeof(intarg)) < 0)
post("setsockopt (TCP_NODELAY) failed\n");
}
--- 288,292 ----
intarg = 1;
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY,
! &intarg, sizeof(intarg)) < 0)
post("setsockopt (TCP_NODELAY) failed\n");
}
Index: m_simd_ve_gcc.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/m_simd_ve_gcc.c,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -C2 -d -r1.1.4.1 -r1.1.4.2
*** m_simd_ve_gcc.c 5 Nov 2004 13:33:19 -0000 1.1.4.1
--- m_simd_ve_gcc.c 11 Jan 2005 21:41:14 -0000 1.1.4.2
***************
*** 110,113 ****
--- 110,114 ----
}
+
t_int *zero_perf_simd(t_int *w)
{
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.5
retrieving revision 1.1.4.6
diff -C2 -d -r1.1.4.5 -r1.1.4.6
*** m_simd_sse_vc.h 8 Jan 2005 22:13:40 -0000 1.1.4.5
--- m_simd_sse_vc.h 11 Jan 2005 21:41:14 -0000 1.1.4.6
***************
*** 41,47 ****
t_int *sigrsqrt_perf_simd(t_int *w);
! #define sum_vecsimd sumvec_8
! #define env_tilde_accum_simd env_tilde_accum
#define sigwrap_perf_simd sigwrap_perform /* SIMD not implemented */
--- 41,49 ----
t_int *sigrsqrt_perf_simd(t_int *w);
! #define sum_vecsimd sumvec_8 /* SIMD not implemented */
! #define env_tilde_accum_simd env_tilde_accum /* SIMD not implemented */
! #define copyvec_simd_unalignedsrc copyvec_8 /* SIMD not implemented */
#define sigwrap_perf_simd sigwrap_perform /* SIMD not implemented */
+ #define line_tilde_slope_simd line_tilde_slope_simd /* 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.9
retrieving revision 1.1.4.10
diff -C2 -d -r1.1.4.9 -r1.1.4.10
*** m_simd_sse_gcc.c 8 Jan 2005 22:13:40 -0000 1.1.4.9
--- m_simd_sse_gcc.c 11 Jan 2005 21:41:14 -0000 1.1.4.10
***************
*** 86,89 ****
--- 86,116 ----
}
+ /* dst is assumed to be aligned */
+ void copyvec_simd_unalignedsrc(t_float *dst,const t_float *src,int n)
+ {
+ asm(
+ ".set T_FLOAT,4 \n" /* sizeof(t_float) */
+ "shr $4, %0 \n"
+
+ /* loop: *dst = *src */
+ "1: \n"
+ "movups (%1), %%xmm0 \n"
+ "movups 4*T_FLOAT(%1), %%xmm1 \n"
+ "movups 8*T_FLOAT(%1), %%xmm2 \n"
+ "movups 12*T_FLOAT(%1), %%xmm3 \n"
+ "movaps %%xmm0, (%2) \n"
+ "movaps %%xmm1, 4*T_FLOAT(%2) \n"
+ "movaps %%xmm2, 8*T_FLOAT(%2) \n"
+ "movaps %%xmm3, 12*T_FLOAT(%2) \n"
+
+
+ "addl $16*T_FLOAT,%1 \n"
+ "addl $16*T_FLOAT,%2 \n"
+ "loop 1b \n"
+ :
+ :"c"(n),"r"(src),"r"(dst)
+ :"%xmm0","%xmm1","%xmm2","%xmm3");
+ }
+
/* dst and src are assumed to be aligned */
***************
*** 123,170 ****
}
! /* dst is assumed to be aligned */
! void testvec_simd(t_float *dst,t_float v,int n)
{
! asm(
! ".set T_FLOAT,4 \n" /* sizeof(t_float) */
! "shufps $0,%2,%2 \n" /* load value */
! "shr $4,%0 \n"
- /* should we do more loop unrolling? */
- /* *dst = v */
"1: \n"
! "movaps %2, (%1) \n"
! "movaps %2, 4*T_FLOAT(%1) \n"
! "movaps %2, 8*T_FLOAT(%1) \n"
! "movaps %2, 12*T_FLOAT(%1) \n"
"addl $16*T_FLOAT,%1 \n"
! "loop 1b \n"
:
! :"c"(n),"r"(dst),"x"((t_float)v)
! );
}
- /*
- * if we switch on DAZ, we shouldn't have problems with denormals
- * any more ... tb
- */
- void testcopyvec_simd(t_float *dst,const t_float *src,int n)
- {
- #if 0 //def DAZ
- copyvec_simd(dst,src,n);
- #else
- testcopyvec_8(dst,src,n); /* SIMD not implemented */
- #endif
- }
-
void testaddvec_simd(t_float *dst,const t_float *src,int n)
{
! #if 0 //DAZ
! addvec_simd(dst,src,n);
! #else
! testaddvec_8(dst,src,n); /* SIMD not implemented */
! #endif
}
--- 150,302 ----
}
!
! void testcopyvec_simd(t_float *dst,const t_float *src,int n)
{
!
! asm(
! ".section .rodata \n"
! ".align 16 \n"
! "2: \n"
! ".long 1610612736 \n" /* bitmask */
! ".long 1610612736 \n" /* 0x60000000 */
! ".long 1610612736 \n"
! ".long 1610612736 \n"
!
! ".set T_FLOAT,4 \n"
! ".text \n"
!
! "shr $4, %0 \n"
! "movaps (2b), %%xmm0 \n" /* xmm0 = bitmask */
! "xorps %%xmm1, %%xmm1 \n" /* xmm1 = 0x0 */
!
"1: \n"
! "movaps (%1), %%xmm2 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "movaps %%xmm2, (%2) \n"
!
! "movaps 4*T_FLOAT(%1), %%xmm2 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "movaps %%xmm2, 4*T_FLOAT(%2) \n"
!
! "movaps 8*T_FLOAT(%1), %%xmm2 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "movaps %%xmm2, 8*T_FLOAT(%2) \n"
!
! "movaps 12*T_FLOAT(%1), %%xmm2 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "movaps %%xmm2, 12*T_FLOAT(%2) \n"
!
"addl $16*T_FLOAT,%1 \n"
! "addl $16*T_FLOAT,%2 \n"
! "decl %0 \n"
! "jne 1b \n"
:
! :"c"(n),"r"(src),"r"(dst)
! :"%xmm0","%xmm1","%xmm2","%xmm3", "%xmm4");
}
void testaddvec_simd(t_float *dst,const t_float *src,int n)
{
! asm(
! ".section .rodata \n"
! ".align 16 \n"
! "2: \n"
! ".long 1610612736 \n" /* bitmask */
! ".long 1610612736 \n" /* 0x60000000 */
! ".long 1610612736 \n"
! ".long 1610612736 \n"
!
! ".set T_FLOAT,4 \n"
! ".text \n"
!
! "shr $4, %0 \n"
! "movaps (2b), %%xmm0 \n" /* xmm0 = bitmask */
! "xorps %%xmm1, %%xmm1 \n" /* xmm1 = 0x0 */
!
!
! "1: \n"
! "movaps (%1), %%xmm2 \n"
! "movaps (%2), %%xmm5 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "addps %%xmm2, %%xmm5 \n"
! "movaps %%xmm5, (%2) \n"
!
! "movaps 4*T_FLOAT(%1), %%xmm2 \n"
! "movaps 4*T_FLOAT(%2), %%xmm5 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "addps %%xmm2, %%xmm5 \n"
! "movaps %%xmm5, 4*T_FLOAT(%2) \n"
!
! "movaps 8*T_FLOAT(%1), %%xmm2 \n"
! "movaps 8*T_FLOAT(%2), %%xmm5 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "addps %%xmm2, %%xmm5 \n"
! "movaps %%xmm5, 8*T_FLOAT(%2) \n"
!
! "movaps 12*T_FLOAT(%1), %%xmm2 \n"
! "movaps 12*T_FLOAT(%2), %%xmm5 \n"
! "movaps %%xmm2, %%xmm3 \n"
! "andps %%xmm0, %%xmm3 \n"
! "movaps %%xmm3, %%xmm4 \n"
! "cmpneqps %%xmm0, %%xmm3 \n"
! "cmpneqps %%xmm1, %%xmm4 \n"
! "andps %%xmm4, %%xmm3 \n"
! "andps %%xmm3, %%xmm2 \n"
! "addps %%xmm2, %%xmm5 \n"
! "movaps %%xmm5, 12*T_FLOAT(%2) \n"
!
!
! "addl $16*T_FLOAT,%1 \n"
! "addl $16*T_FLOAT,%2 \n"
! "decl %0 \n"
! "jne 1b \n"
! :
! :"c"(n),"r"(src),"r"(dst)
! :"%xmm0","%xmm1","%xmm2","%xmm3", "%xmm4", "%xmm5");
}
***************
*** 234,238 ****
".set T_FLOAT,4 \n"
! "shufps $0, %1, %1 \n"
"shrl $4, %3 \n" /* divide by 16 */
--- 366,370 ----
".set T_FLOAT,4 \n"
! "shufps $0, %1, %1 \n"
"shrl $4, %3 \n" /* divide by 16 */
***************
*** 908,912 ****
"loop 1b \n"
! "movhlps %%xmm2, %%xmm3 \n"
"movups %%xmm2, %%xmm4 \n"
"movups %%xmm3, %0 \n"
--- 1040,1044 ----
"loop 1b \n"
! "movhlps %%xmm2, %%xmm3 \n" /* unpack xmm0 */
"movups %%xmm2, %%xmm4 \n"
"movups %%xmm3, %0 \n"
***************
*** 926,929 ****
--- 1058,1157 ----
+ float peakvec_simd(t_float* vec, t_int n, t_float cur_max)
+ {
+ asm(
+ ".section .rodata \n"
+ ".align 16 \n"
+ "2: \n"
+ ".long 2147483647 \n" /* bitmask for abs */
+ ".long 2147483647 \n" /* 0x7fffffff */
+ ".long 2147483647 \n"
+ ".long 2147483647 \n"
+
+ ".set T_FLOAT,4 \n"
+ ".text \n"
+
+ "shrl $4, %2 \n" /* divide by 16 */
+ "movaps (2b), %%xmm0 \n"
+ "shufps $0, %0, %0 \n"
+
+ "1: \n"
+ "movaps (%1), %%xmm1 \n"
+ "andps %%xmm0, %%xmm1 \n"
+ "maxps %%xmm1, %0 \n"
+
+ "movaps 4*T_FLOAT(%1), %%xmm1 \n"
+ "andps %%xmm0, %%xmm1 \n"
+ "maxps %%xmm1, %0 \n"
+
+ "movaps 8*T_FLOAT(%1), %%xmm1 \n"
+ "andps %%xmm0, %%xmm1 \n"
+ "maxps %%xmm1, %0 \n"
+
+ "movaps 12*T_FLOAT(%1), %%xmm1 \n"
+ "andps %%xmm0, %%xmm1 \n"
+ "maxps %%xmm1, %0 \n"
+
+ "addl $16*T_FLOAT, %1 \n"
+ "loop 1b \n"
+
+ "movhlps %0, %%xmm2 \n"
+ "movaps %0, %%xmm3 \n"
+ "movaps %%xmm2, %%xmm4 \n"
+ "shufps $81, %%xmm3, %%xmm3 \n"
+ "shufps $81, %%xmm4, %%xmm4 \n"
+
+ "maxss %%xmm2, %%xmm3 \n"
+ "maxss %%xmm3, %%xmm4 \n"
+ "maxss %%xmm4, %0 \n"
+
+ :"=x"(cur_max)
+ :"r"(vec),"c"(n), "0"(cur_max)
+ :"%xmm0","%xmm1","%xmm2","%xmm3", "%xmm4", "%xmm5");
+
+ return cur_max;
+ }
+
+ void line_tilde_slope_simd(t_float* out, t_int n, t_float* value,
+ t_float* slopes, t_float* slopestep)
+ {
+ asm(
+ ".set T_FLOAT,4 \n"
+ "movss (%2),%%xmm0 \n" /* value */
+ "shufps $0, %%xmm0, %%xmm0 \n"
+ "movaps (%3), %%xmm1 \n" /* slopes */
+
+ "addps %%xmm1, %%xmm0 \n" /* compute first output */
+
+ "movss (%4), %%xmm2 \n" /* slopestep */
+ "shufps $0, %%xmm2, %%xmm2 \n"
+
+ "shrl $4, %1 \n" /* n>>4 */
+
+ "1: \n"
+ "movaps %%xmm0, (%0) \n"
+ "addps %%xmm2, %%xmm0 \n"
+
+ "movaps %%xmm0, 4*T_FLOAT(%0) \n"
+ "addps %%xmm2, %%xmm0 \n"
+
+ "movaps %%xmm0, 8*T_FLOAT(%0) \n"
+ "addps %%xmm2, %%xmm0 \n"
+
+ "movaps %%xmm0, 12*T_FLOAT(%0) \n"
+ "addps %%xmm2, %%xmm0 \n"
+
+
+ "addl $16*T_FLOAT, %0 \n"
+ "loop 1b \n"
+
+
+ :
+ :"r"(out),"c"(n), "r"(value), "r"(slopes),
+ "r"(slopestep)
+ :"%xmm0", "%xmm1", "%xmm2");
+
+ }
+
#endif
Index: s_audio.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_audio.c,v
retrieving revision 1.5.4.5
retrieving revision 1.5.4.6
diff -C2 -d -r1.5.4.5 -r1.5.4.6
*** s_audio.c 27 Dec 2004 16:02:33 -0000 1.5.4.5
--- s_audio.c 11 Jan 2005 21:41:14 -0000 1.5.4.6
***************
*** 9,12 ****
--- 9,13 ----
#include "m_pd.h"
#include "s_stuff.h"
+ #include "m_simd.h"
#include <stdio.h>
#ifdef UNISTD
***************
*** 67,70 ****
--- 68,77 ----
extern int sys_callbackscheduler;
+ float peakvec_simd(t_float* vec, t_int n, t_float cur_max);
+ float peakvec(t_float* vec, t_int n, t_float cur_max);
+
+ static float (*peak_fp)(t_float*, t_int, t_float) = peakvec;
+
+
static int audio_isopen(void)
{
***************
*** 165,168 ****
--- 172,182 ----
memset(sys_soundout, 0, outbytes);
+ /* tb: modification for simd-optimized peak finding */
+ if (SIMD_CHKCNT(sys_inchannels * sys_dacblocksize) &&
+ SIMD_CHKCNT(sys_outchannels * sys_dacblocksize))
+ peak_fp = peakvec_simd;
+ else
+ peak_fp = peakvec;
+
if (sys_verbose)
post("input channels = %d, output channels = %d",
***************
*** 448,469 ****
if (sys_meters)
{
! int i, n;
! float maxsamp;
! for (i = 0, n = sys_inchannels * sys_dacblocksize, maxsamp = sys_inmax;
! i < n; i++)
! {
! float f = sys_soundin[i];
! if (f > maxsamp) maxsamp = f;
! else if (-f > maxsamp) maxsamp = -f;
! }
! sys_inmax = maxsamp;
! for (i = 0, n = sys_outchannels * sys_dacblocksize, maxsamp = sys_outmax;
! i < n; i++)
! {
! float f = sys_soundout[i];
! if (f > maxsamp) maxsamp = f;
! else if (-f > maxsamp) maxsamp = -f;
! }
! sys_outmax = maxsamp;
}
--- 462,469 ----
if (sys_meters)
{
! sys_inmax = peak_fp(sys_soundin,sys_inchannels * sys_dacblocksize,
! sys_inmax);
! sys_outmax = peak_fp(sys_soundout,sys_outchannels * sys_dacblocksize,
! sys_outmax);
}
Index: d_global.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_global.c,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -C2 -d -r1.2.4.1 -r1.2.4.2
*** d_global.c 5 Nov 2004 13:55:58 -0000 1.2.4.1
--- d_global.c 11 Jan 2005 21:41:14 -0000 1.2.4.2
***************
*** 37,49 ****
static t_int *sigsend_perform(t_int *w)
{
! t_float *in = (t_float *)(w[1]);
! t_float *out = (t_float *)(w[2]);
! int n = (int)(w[3]);
! while (n--)
! {
! *out = (PD_BIGORSMALL(*in) ? 0 : *in);
! out++;
! in++;
! }
return (w+4);
}
--- 37,42 ----
static t_int *sigsend_perform(t_int *w)
{
! testcopyvec((t_float *)w[2],(t_float *)w[1],w[3]);
!
return (w+4);
}
***************
*** 306,321 ****
{
t_sigthrow *x = (t_sigthrow *)(w[1]);
- t_float *in = (t_float *)(w[2]);
- int n = (int)(w[3]);
t_float *out = x->x_whereto;
! if (out)
! {
! while (n--)
! {
! *out += (PD_BIGORSMALL(*in) ? 0 : *in);
! out++;
! in++;
! }
! }
return (w+4);
}
--- 299,305 ----
{
t_sigthrow *x = (t_sigthrow *)(w[1]);
t_float *out = x->x_whereto;
! if(out) testaddvec(out,(t_float *)w[2],w[3]);
!
return (w+4);
}
Index: d_array.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_array.c,v
retrieving revision 1.3.4.2
retrieving revision 1.3.4.3
diff -C2 -d -r1.3.4.2 -r1.3.4.3
*** d_array.c 11 Nov 2004 22:30:41 -0000 1.3.4.2
--- d_array.c 11 Jan 2005 21:41:14 -0000 1.3.4.3
***************
*** 56,66 ****
if (nxfer > n) nxfer = n;
phase += nxfer;
! while (nxfer--)
{
! float f = *in++;
! if (PD_BIGORSMALL(f))
! f = 0;
! *fp++ = f;
}
if (phase >= endphase)
{
--- 56,92 ----
if (nxfer > n) nxfer = n;
phase += nxfer;
!
! testcopyvec(fp, in, nxfer);
! if (phase >= endphase)
{
! tabwrite_tilde_redraw(x);
! phase = 0x7fffffff;
}
+ x->x_phase = phase;
+ }
+ else x->x_phase = 0x7fffffff;
+ bad:
+ return (w+4);
+ }
+
+
+ static t_int *tabwrite_tilde_perf_simd(t_int *w)
+ {
+ t_tabwrite_tilde *x = (t_tabwrite_tilde *)(w[1]);
+ t_float *in = (t_float *)(w[2]);
+ int n = (int)(w[3]), phase = x->x_phase, endphase = x->x_nsampsintab;
+ if (!x->x_vec) goto bad;
+
+ if (endphase > phase)
+ {
+ int nxfer = endphase - phase;
+ float *fp = x->x_vec + phase;
+ if (nxfer > n) nxfer = n;
+ phase += nxfer;
+
+ if (SIMD_CHKCNT(nxfer))
+ testcopyvec_simd(fp, in, nxfer);
+ else
+ testcopyvec(fp, in, nxfer);
if (phase >= endphase)
{
***************
*** 75,78 ****
--- 101,105 ----
}
+
void tabwrite_tilde_set(t_tabwrite_tilde *x, t_symbol *s)
{
***************
*** 97,101 ****
{
tabwrite_tilde_set(x, x->x_arrayname);
! dsp_add(tabwrite_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n);
}
--- 124,131 ----
{
tabwrite_tilde_set(x, x->x_arrayname);
! if (SIMD_CHECK1(sp[0]->s_n, sp[0]->s_vec))
! dsp_add(tabwrite_tilde_perf_simd, 3, x, sp[0]->s_vec, sp[0]->s_n);
! else
! dsp_add(tabwrite_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n);
}
***************
*** 732,747 ****
if (!x->x_vec) goto bad;
! if(n&7)
! while (n--)
! {
! float f = *in++;
! if (PD_BIGORSMALL(f))
! f = 0;
! *dest++ = f;
}
! else if(SIMD_CHECK2(n,in,dest))
! testcopyvec_simd(dest,in,n);
! else
! testcopyvec_8(dest,in,n);
if (!i--)
--- 762,791 ----
if (!x->x_vec) goto bad;
! testcopyvec(dest,in,n);
!
! if (!i--)
! {
! t_garray *a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class);
! if (!a)
! bug("tabsend_dsp");
! else garray_redraw(a);
! i = x->x_graphperiod;
}
! x->x_graphcount = i;
! bad:
! return (w+4);
! }
!
!
! static t_int *tabsend_perf_simd(t_int *w)
! {
! t_tabsend *x = (t_tabsend *)(w[1]);
! t_float *in = (t_float *)(w[2]);
! int n = w[3];
! t_float *dest = x->x_vec;
! int i = x->x_graphcount;
! if (!x->x_vec) goto bad;
!
! testcopyvec_simd(dest,in,n);
if (!i--)
***************
*** 758,761 ****
--- 802,806 ----
}
+
static void tabsend_dsp(t_tabsend *x, t_signal **sp)
{
***************
*** 779,783 ****
if (n < vecsize) vecsize = n;
garray_usedindsp(a);
! dsp_add(tabsend_perform, 3, x, sp[0]->s_vec, vecsize);
}
}
--- 824,831 ----
if (n < vecsize) vecsize = n;
garray_usedindsp(a);
! if(SIMD_CHECK1(vecsize,sp[0]->s_vec))
! dsp_add(tabsend_perf_simd, 3, x, sp[0]->s_vec, vecsize);
! else
! dsp_add(tabsend_perform, 3, x, sp[0]->s_vec, vecsize);
}
}
Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.12
retrieving revision 1.5.4.13
diff -C2 -d -r1.5.4.12 -r1.5.4.13
*** m_sched.c 2 Dec 2004 16:40:24 -0000 1.5.4.12
--- m_sched.c 11 Jan 2005 21:41:14 -0000 1.5.4.13
***************
*** 633,637 ****
static t_sched_callback * idle_callback = NULL;
! void set_callback(t_int (*callback) (t_int* argv), t_int* argv, t_int argc)
{
t_sched_callback* new = (t_sched_callback*) getbytes
--- 633,637 ----
static t_sched_callback * idle_callback = NULL;
! void sys_callback(t_int (*callback) (t_int* argv), t_int* argv, t_int argc)
{
t_sched_callback* new = (t_sched_callback*) getbytes