[PD-dev] freeverb's type-punned pointers
Martin Peach
martin.peach at sympatico.ca
Sat Dec 8 01:05:46 CET 2007
Hans-Christoph Steiner wrote:
> Hey,
>
> I want to fix the type-punned pointer problem in freeverb~ so it can
> be compiled with full optimization. Here's the code snippets in
> question, with the warnings being issued for the FIX_DENORM_NAN_FLOAT
> () lines:
>
> #define IS_DENORM_FLOAT(v) ((((*(unsigned long*)&(v))&0x7f800000)==0)
> &&((v)!=0.f))
> #define FIX_DENORM_NAN_FLOAT(v) ((v)=IS_DENORM_NAN_FLOAT(v)?0.f:(v))
>
>
> static inline t_float comb_processR(t_freeverb *x, int filteridx,
> t_float input)
> {
> t_float output;
> int bufidx = x->x_combidxR[filteridx];
>
> output = x->x_bufcombR[filteridx][bufidx];
> FIX_DENORM_NAN_FLOAT(output);
>
> x->x_filterstoreR[filteridx] = (output*x->x_combdamp2) + (x-
> >x_filterstoreR[filteridx]*x->x_combdamp1);
> FIX_DENORM_NAN_FLOAT(x->x_filterstoreR[filteridx]);
>
> [snip]
>
>
> Could I just cast things to (unsigned long)? Or is there a better way?
>
>
I think the proper way is to use a union, so you can refer to the same
thing as two different types.
Martin
More information about the Pd-dev
mailing list