Hello, I have solved this problem in the splay mp3 decoder with this: In the header: #if (__GNUC__ < 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ < 91 ) ) #warning "inline code disabled! (buggy egcs version)" #undef __NO_MATH_INLINES #define __NO_MATH_INLINES 1 #endif #include <math.h> In the makefile: CXXFLAGS=@CXXFLAGS@ -fno-strength-reduce (Opt level is 2) and in the excutable: pow(6.0,3.0); Then it did work. regards, Martin --- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/
> I have solved this problem in the splay mp3 decoder with this: > > In the header: > > #if (__GNUC__ < 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ < 91 ) ) > #warning "inline code disabled! (buggy egcs version)" > #undef __NO_MATH_INLINES > #define __NO_MATH_INLINES 1 > #endifInsufficient! The bug is *not* in the compiler. It is in the glibc headers. I can make bleededing edge GCC break very easily with the bad glibc.> #include <math.h> > > In the makefile: > > CXXFLAGS=@CXXFLAGS@ -fno-strength-reduce > > (Opt level is 2)Not needed in vorbis. My code doesn't break in strength reduction (and this option is only needed if you're doing non-ANSI 'optimizations' in your C)> and in the excutable: > > pow(6.0,3.0); > > Then it did work.All you did was cause a shift in optimization that changed FPU stack usage, giving the illusion of the problem going away. If you'd done none of that but just a printf() of the value after the pow() it would also appear to have fixed the bug (by forcing a float store, also reducing the stack usage). Monty --- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/