On Wed, 2009-04-29 at 08:58 -0700, Greg Wright wrote:
> Sheldon fu wrote:
> > sizeof() can not be used in the pre-compiling constant expression. e.g.
> > you can not do:
> >
> > #if sizeof(int) == 4
>
> did you mean '#if' or 'if' here?
'#if'. the pre-compiling phase.
>
> > This is not just for debug build. I checked the assembly code compiled
> > for Android with original logic, even in release build setting, the
> > compiler (gcc 4.2 arm-eabi) doesn't optimize away that if with constant
> > expression.
>
> It seems that:
>
> const unsigned int NBITS_PER_AUDIOSAMPLE=sizeof(tAudioSample)<<3;
> ...
> if( NBITS_PER_AUDIOSAMPLE==16 )
> {memcpy}
> else
> {for-loop}
>
> should work right? I don't see how the compiler could
> not evaluate NBITS_PER_AUDIOSAMPLE at compile time and
> be left with:
>
> if( 16 == 16 )
>
> Does that work on your compiler? If that is broken as
> well, then we don't have much choice. How big of a hit
> is the 'if( sizeof()==16 )' comparison?
I checked "if( NBITS_PER_AUDIOSAMPLE==32 )" in the cvt32 before this
changed and no, the compiler doesn't optimized it away.
It's not 'broken'. C/C++ never says how compiler should optimize or how
much it should do. We can only second guess what a compiler will do.
It's better to not rely on compiler optimization if we know better what
we want.
fxd
>
>
> --greg.
>
>
>
> >
> > fxd
> >
> > On Wed, 2009-04-29 at 08:14 -0700, Greg Wright wrote:
> >> Sheldon fu wrote:
> >>> Overview:
> >>>
> >>> This is a small effort to improve the efficiency of sampler converter. A
> >>> direct memcpy bypass is added for 16bit to 16bit converting case,
> >>> similar to what we already have for 32bit to 32bit conversion. Also
> >>> memcpy bypass is turned on by conditional pre-compiling macro now,
> >>> instead of 'if' statement. This enables memcpy bypass on compilers that
> >>> don't do aggressive constant expression optimization and debug build.
> >>>
> >>> Head and Atlas310
> >>>
> >>> fxd
> >> -#define NBITS_PER_AUDIOSAMPLE (sizeof(tAudioSample)<<3)
> >>
> >> Why exactly does that not work? I like it better that
> >> way since it it less prone to future bugs if/when the
> >> datatypes for audio samples are added or changed, especially
> >> if this is only needed for DEBUG builds. Does not using
> >> a const int, or something besides a #define let you use a
> >> 'if'?
> >>
> >> --greg.
> >>
> >>
> >>
> >>
> >>
> >
> >
>
_______________________________________________
Audio-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/audio-dev