diff options
-rw-r--r-- | externals/grill/flext/flext.cw | bin | 880367 -> 880367 bytes | |||
-rw-r--r-- | externals/grill/flext/source/flsupport.cpp | 41 | ||||
-rw-r--r-- | externals/grill/xsample/config-pd-msvc.txt | 3 | ||||
-rw-r--r-- | externals/grill/xsample/makefile.pd-msvc | 2 | ||||
-rw-r--r-- | externals/grill/xsample/source/record.cpp | 146 |
5 files changed, 95 insertions, 97 deletions
diff --git a/externals/grill/flext/flext.cw b/externals/grill/flext/flext.cw Binary files differindex 5810f001..157b04d7 100644 --- a/externals/grill/flext/flext.cw +++ b/externals/grill/flext/flext.cw diff --git a/externals/grill/flext/source/flsupport.cpp b/externals/grill/flext/source/flsupport.cpp index 7b30a2b8..f8c6fac2 100644 --- a/externals/grill/flext/source/flsupport.cpp +++ b/externals/grill/flext/source/flsupport.cpp @@ -74,6 +74,15 @@ void flext::Setup() } +#if defined(FLEXT_THREADED) && defined(FLEXT_PDLOCK) +#define SYSLOCK() sys_lock() +#define SYSUNLOCK() sys_unlock() +#else +#define SYSLOCK(on) (void)0 +#define SYSUNLOCK(on) (void)0 +#endif + + ///////////////////////////////////////////////////////// // overloaded new/delete memory allocation methods // @@ -101,6 +110,7 @@ void *flext_root::operator new(size_t bytes) void flext_root::operator delete(void *blk) { char *ori = (char *)blk-sizeof(size_t); + #if FLEXT_SYS == FLEXT_SYS_JMAX fts_free(ori); #else @@ -114,11 +124,13 @@ void *flext_root::NewAligned(size_t bytes,int bitalign) const size_t ovh = sizeof(size_t)+sizeof(char *); const unsigned long alignovh = bitalign/8-1; bytes += ovh+alignovh; + #if FLEXT_SYS == FLEXT_SYS_JMAX char *blk = (char *)::fts_malloc(bytes); #else char *blk = (char *)::getbytes(bytes); #endif + char *ablk = reinterpret_cast<char *>((reinterpret_cast<unsigned long>(blk)+ovh+alignovh) & ~alignovh); *(char **)(ablk-sizeof(size_t)-sizeof(char *)) = blk; *(size_t *)(ablk-sizeof(size_t)) = bytes; @@ -184,46 +196,25 @@ int flext::Int2Bits(unsigned long n) void flext_root::post(const char *fmt, ...) { -#ifdef FLEXT_THREADS - static flext::ThrMutex mutex; - mutex.Lock(); -#endif va_list ap; va_start(ap, fmt); -#if FLEXT_SYS == FLEXT_SYS_MAX + char buf[1024]; // \TODO this is quite unsafe..... vsprintf(buf, fmt, ap); ::post(buf); -#else - vfprintf(stderr, fmt, ap); - ::post(""); -#endif + va_end(ap); -#ifdef FLEXT_THREADS - mutex.Unlock(); -#endif } void flext_root::error(const char *fmt,...) { -#ifdef FLEXT_THREADS - static flext::ThrMutex mutex; - mutex.Lock(); -#endif va_list ap; va_start(ap, fmt); -#if FLEXT_SYS == FLEXT_SYS_MAX + char buf[1024]; // \TODO this is quite unsafe..... STD::sprintf(buf,"error: "); vsprintf(buf+7, fmt, ap); ::post(buf); -#else - fprintf(stderr, "error: "); - vfprintf(stderr, fmt, ap); - ::post(""); -#endif + va_end(ap); -#ifdef FLEXT_THREADS - mutex.Unlock(); -#endif } diff --git a/externals/grill/xsample/config-pd-msvc.txt b/externals/grill/xsample/config-pd-msvc.txt index e69617a7..26aeb5ab 100644 --- a/externals/grill/xsample/config-pd-msvc.txt +++ b/externals/grill/xsample/config-pd-msvc.txt @@ -9,7 +9,8 @@ PDPATH=c:\programme\audio\pd FLEXTPATH=$(PDPATH)\flext # where is MS VC++? -MSVCPATH=c:\programme\prog\microsoft visual studio\VC98 +# (not necessary if the build started with the compiler environment) +# MSVCPATH=c:\programme\prog\microsoft visual studio\VC98 # where should the external be built? OUTPATH=pd-msvc diff --git a/externals/grill/xsample/makefile.pd-msvc b/externals/grill/xsample/makefile.pd-msvc index 2f0ebc52..8b82928b 100644 --- a/externals/grill/xsample/makefile.pd-msvc +++ b/externals/grill/xsample/makefile.pd-msvc @@ -17,7 +17,7 @@ LIBS=pd.lib pthreadVC.lib flext-pdwin.lib # compiler definitions and flags DEFS=/DFLEXT_SYS=2 -CFLAGS=/GR- /GX- /GD /G6 /Ox /ML +CFLAGS=/GR- /GX- /GD /G6 /Ox /EHsc /ML # the rest can stay untouched # ---------------------------------------------- diff --git a/externals/grill/xsample/source/record.cpp b/externals/grill/xsample/source/record.cpp index 51fd56fc..cc9e074b 100644 --- a/externals/grill/xsample/source/record.cpp +++ b/externals/grill/xsample/source/record.cpp @@ -335,52 +335,55 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) else { // don't append switch(mixmode) { - case 0: - for(i = 0; i < ncur; ++i,++si) { - if(*(on++) >= 0) - { - for(int ci = 0; ci < ICHNS; ++ci) - bf[ci] = sig[ci][si]; - bf += BCHNS; - *(pos++) = p,p += pf,++o; - } - else { - *(pos++) = p = scale(o = 0); - bf = buf->Data(); - } - } - break; - case 1: - for(i = 0; i < ncur; ++i,++si) { - register const S g = *(on++); - if(g >= 0) { - for(int ci = 0; ci < ICHNS; ++ci) - bf[ci] = bf[ci]*(1.-g)+sig[ci][si]*g; - bf += BCHNS; - *(pos++) = p,p += pf,++o; - } - else { - *(pos++) = p = scale(o = 0); - bf = buf->Data(); - } - } - break; - case 2: - for(i = 0; i < ncur; ++i,++si) { - if(*(on++) >= 0) - { - for(int ci = 0; ci < ICHNS; ++ci) - bf[ci] += sig[ci][si]; - bf += BCHNS; - *(pos++) = p,p += pf,++o; - } - else { - *(pos++) = p = scale(o = 0); - bf = buf->Data(); - } - } - break; - } + case 0: { + for(i = 0; i < ncur; ++i,++si) { + if(*(on++) >= 0) + { + for(int ci = 0; ci < ICHNS; ++ci) + bf[ci] = sig[ci][si]; + bf += BCHNS; + *(pos++) = p,p += pf,++o; + } + else { + *(pos++) = p = scale(o = 0); + bf = buf->Data(); + } + } + break; + } + case 1: { + for(i = 0; i < ncur; ++i,++si) { + register const S g = *(on++); + if(g >= 0) { + for(int ci = 0; ci < ICHNS; ++ci) + bf[ci] = bf[ci]*(1.-g)+sig[ci][si]*g; + bf += BCHNS; + *(pos++) = p,p += pf,++o; + } + else { + *(pos++) = p = scale(o = 0); + bf = buf->Data(); + } + } + break; + } + case 2: { + for(i = 0; i < ncur; ++i,++si) { + if(*(on++) >= 0) + { + for(int ci = 0; ci < ICHNS; ++ci) + bf[ci] += sig[ci][si]; + bf += BCHNS; + *(pos++) = p,p += pf,++o; + } + else { + *(pos++) = p = scale(o = 0); + bf = buf->Data(); + } + } + break; + } + } } } else { @@ -388,30 +391,33 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) // Altivec optimization for that! switch(mixmode) { - case 0: - for(int ci = 0; ci < ICHNS; ++ci) { - register S *b = bf+ci; - register const F *s = sig[ci]; - for(i = 0; i < ncur; ++i,b += BCHNS,++s) *b = *s; - } - si += ncur; - break; - case 1: - for(i = 0; i < ncur; ++i,++si) { - register const S w = *(on++); - for(int ci = 0; ci < ICHNS; ++ci) - bf[ci] = bf[ci]*(1.-w)+sig[ci][si]*w; - bf += BCHNS; - } - break; - case 2: - for(int ci = 0; ci < ICHNS; ++ci) { - register S *b = bf+ci; - register const F *s = sig[ci]; - for(i = 0; i < ncur; ++i,b += BCHNS,++s) *b += *s; - } - si += ncur; - break; + case 0: { + for(int ci = 0; ci < ICHNS; ++ci) { + register S *b = bf+ci; + register const F *s = sig[ci]; + for(i = 0; i < ncur; ++i,b += BCHNS,++s) *b = *s; + } + si += ncur; + break; + } + case 1: { + for(i = 0; i < ncur; ++i,++si) { + register const S w = *(on++); + for(int ci = 0; ci < ICHNS; ++ci) + bf[ci] = bf[ci]*(1.-w)+sig[ci][si]*w; + bf += BCHNS; + } + break; + } + case 2: { + for(int ci = 0; ci < ICHNS; ++ci) { + register S *b = bf+ci; + register const F *s = sig[ci]; + for(i = 0; i < ncur; ++i,b += BCHNS,++s) *b += *s; + } + si += ncur; + break; + } } for(i = 0; i < ncur; ++i) { |