From 0c9b89b1018eb7760708ee5b080cd96846861328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Thu, 2 Jun 2005 18:25:00 +0000 Subject: updated to release-1.16 svn path=/trunk/externals/iemlib/; revision=3102 --- src/iemlib1/sigiem_sqrt4.c | 233 ++++++++++++++++++++++----------------------- 1 file changed, 116 insertions(+), 117 deletions(-) (limited to 'src/iemlib1/sigiem_sqrt4.c') diff --git a/src/iemlib1/sigiem_sqrt4.c b/src/iemlib1/sigiem_sqrt4.c index 49d9982..9787fa1 100644 --- a/src/iemlib1/sigiem_sqrt4.c +++ b/src/iemlib1/sigiem_sqrt4.c @@ -1,117 +1,116 @@ -/* For information on usage and redistribution, and for a DISCLAIMER OF ALL -* WARRANTIES, see the file, "LICENSE.txt," in this distribution. - -iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */ - -#ifdef NT -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - - -#include "m_pd.h" -#include "iemlib.h" -#include -#include -#include - -#define IEMSQRT4TAB1SIZE 256 -#define IEMSQRT4TAB2SIZE 1024 - -/* ------------------------ iem_sqrt4~ ----------------------------- */ - -float *iem_sqrt4_exptab=(float *)0L; -float *iem_sqrt4_mantissatab=(float *)0L; - -static t_class *sigiem_sqrt4_class; - -typedef struct _sigiem_sqrt4 -{ - t_object x_obj; - float x_msi; -} t_sigiem_sqrt4; - -static t_int *sigiem_sqrt4_perform(t_int *w) -{ - t_float *in = (t_float *)(w[1]); - t_float *out = (t_float *)(w[2]); - t_int n = (t_int)(w[3])/4; - - while(n--) - { - float f = *in; - float g, h; - long l = *(long *)(in); - - if(f < 0.0f) - { - *out++ = 0.0f; - *out++ = 0.0f; - *out++ = 0.0f; - *out++ = 0.0f; - } - else - { - g = iem_sqrt4_exptab[(l >> 23) & 0xff] * iem_sqrt4_mantissatab[(l >> 13) & 0x3ff]; - h = f * (1.5f * g - 0.5f * g * g * g * f); - *out++ = h; - *out++ = h; - *out++ = h; - *out++ = h; - } - in += 4; - } - return(w+4); -} - -static void sigiem_sqrt4_dsp(t_sigiem_sqrt4 *x, t_signal **sp) -{ - dsp_add(sigiem_sqrt4_perform, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); -} - -static void sigiem_sqrt4_maketable(void) -{ - int i; - float f; - long l; - - if(!iem_sqrt4_exptab) - { - iem_sqrt4_exptab = (float *)getbytes(sizeof(float) * IEMSQRT4TAB1SIZE); - for(i=0; ix_obj, gensym("signal")); - x->x_msi = 0; - return (x); -} - -void sigiem_sqrt4_setup(void) -{ - sigiem_sqrt4_class = class_new(gensym("iem_sqrt4~"), (t_newmethod)sigiem_sqrt4_new, 0, - sizeof(t_sigiem_sqrt4), 0, 0); - CLASS_MAINSIGNALIN(sigiem_sqrt4_class, t_sigiem_sqrt4, x_msi); - class_addmethod(sigiem_sqrt4_class, (t_method)sigiem_sqrt4_dsp, gensym("dsp"), 0); - sigiem_sqrt4_maketable(); - class_sethelpsymbol(sigiem_sqrt4_class, gensym("iemhelp/help-iem_sqrt4~")); -} - +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ + +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + + +#include "m_pd.h" +#include "iemlib.h" +#include +#include +#include + +#define IEMSQRT4TAB1SIZE 256 +#define IEMSQRT4TAB2SIZE 1024 + +/* ------------------------ iem_sqrt4~ ----------------------------- */ + +float *iem_sqrt4_exptab=(float *)0L; +float *iem_sqrt4_mantissatab=(float *)0L; + +static t_class *sigiem_sqrt4_class; + +typedef struct _sigiem_sqrt4 +{ + t_object x_obj; + float x_msi; +} t_sigiem_sqrt4; + +static t_int *sigiem_sqrt4_perform(t_int *w) +{ + t_float *in = (t_float *)(w[1]); + t_float *out = (t_float *)(w[2]); + t_int n = (t_int)(w[3])/4; + + while(n--) + { + float f = *in; + float g, h; + long l = *(long *)(in); + + if(f < 0.0f) + { + *out++ = 0.0f; + *out++ = 0.0f; + *out++ = 0.0f; + *out++ = 0.0f; + } + else + { + g = iem_sqrt4_exptab[(l >> 23) & 0xff] * iem_sqrt4_mantissatab[(l >> 13) & 0x3ff]; + h = f * (1.5f * g - 0.5f * g * g * g * f); + *out++ = h; + *out++ = h; + *out++ = h; + *out++ = h; + } + in += 4; + } + return(w+4); +} + +static void sigiem_sqrt4_dsp(t_sigiem_sqrt4 *x, t_signal **sp) +{ + dsp_add(sigiem_sqrt4_perform, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + +static void sigiem_sqrt4_maketable(void) +{ + int i; + float f; + long l; + + if(!iem_sqrt4_exptab) + { + iem_sqrt4_exptab = (float *)getbytes(sizeof(float) * IEMSQRT4TAB1SIZE); + for(i=0; ix_obj, gensym("signal")); + x->x_msi = 0; + return (x); +} + +void sigiem_sqrt4_setup(void) +{ + sigiem_sqrt4_class = class_new(gensym("iem_sqrt4~"), (t_newmethod)sigiem_sqrt4_new, 0, + sizeof(t_sigiem_sqrt4), 0, 0); + CLASS_MAINSIGNALIN(sigiem_sqrt4_class, t_sigiem_sqrt4, x_msi); + class_addmethod(sigiem_sqrt4_class, (t_method)sigiem_sqrt4_dsp, gensym("dsp"), 0); + sigiem_sqrt4_maketable(); + class_sethelpsymbol(sigiem_sqrt4_class, gensym("iemhelp/help-iem_sqrt4~")); +} -- cgit v1.2.1