Concurrency::precise_math::signbit(), and only as of VS 2012 runtimes. This is an awfully high bar for such a simple function.
On Mon, Sep 24, 2012 at 1:43 PM, Matt Turner <matts...@gmail.com> wrote: > On Mon, Sep 24, 2012 at 11:02 AM, Brian Paul <bri...@vmware.com> wrote: > > On 09/24/2012 10:49 AM, Matt Turner wrote: > >> > >> Module: Mesa > >> Branch: master > >> Commit: 0f3ba405eada72e1ab4371948315b28608903927 > >> URL: > >> > http://cgit.freedesktop.org/mesa/mesa/commit/?id=0f3ba405eada72e1ab4371948315b28608903927 > >> > >> Author: Matt Turner<matts...@gmail.com> > >> Date: Fri Sep 14 16:04:40 2012 -0700 > >> > >> Use signbit() in IS_NEGATIVE and DIFFERENT_SIGNS > >> > >> signbit() appears to be available everywhere (even MSVC according to > >> MSDN), so let's use it instead of open-coding some messy and confusing > >> bit twiddling macros. > >> > >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54805 > >> Reviewed-by: Paul Berry<stereotype...@gmail.com> > >> Suggested-by: Ian Romanick<ian.d.roman...@intel.com> > >> > >> --- > >> > >> configure.ac | 7 +++++++ > >> src/mesa/main/macros.h | 21 ++------------------- > >> 2 files changed, 9 insertions(+), 19 deletions(-) > >> > >> diff --git a/configure.ac b/configure.ac > >> index 4193496..cb65467 100644 > >> --- a/configure.ac > >> +++ b/configure.ac > >> @@ -499,6 +499,13 @@ AC_SUBST([DLOPEN_LIBS]) > >> dnl See if posix_memalign is available > >> AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES > >> -DHAVE_POSIX_MEMALIGN"]) > >> > >> +dnl signbit() is a macro in glibc's math.h, so AC_CHECK_FUNC fails. To > >> handle > >> +dnl this, use AC_CHECK_DECLS and fallback to AC_CHECK_FUNC in case it > >> fails. > >> +AC_CHECK_DECLS([signbit],[], > >> + AC_CHECK_FUNC([signbit],[], > >> + AC_MSG_ERROR([could not find signbit()])), > >> + [#include<math.h>]) > >> + > >> dnl SELinux awareness. > >> AC_ARG_ENABLE([selinux], > >> [AS_HELP_STRING([--enable-selinux], > >> diff --git a/src/mesa/main/macros.h b/src/mesa/main/macros.h > >> index 04d59d7..7b7fd1b 100644 > >> --- a/src/mesa/main/macros.h > >> +++ b/src/mesa/main/macros.h > >> @@ -693,31 +693,14 @@ NORMALIZE_3FV(GLfloat v[3]) > >> static inline GLboolean > >> IS_NEGATIVE(float x) > >> { > >> -#if defined(USE_IEEE) > >> - fi_type fi; > >> - fi.f = x; > >> - return fi.i< 0; > >> -#else > >> - return x< 0.0F; > >> -#endif > >> + return signbit(x) != 0; > >> } > >> > >> - > >> /** Test two floats have opposite signs */ > >> static inline GLboolean > >> DIFFERENT_SIGNS(GLfloat x, GLfloat y) > >> { > >> -#if defined(USE_IEEE) > >> - fi_type xfi, yfi; > >> - xfi.f = x; > >> - yfi.f = y; > >> - return !!((xfi.i ^ yfi.i)& (1u<< 31)); > >> -#else > >> - /* Could just use (x*y<0) except for the flatshading requirements. > >> - * Maybe there's a better way? > >> - */ > >> - return ((x) * (y)<= 0.0F&& (x) - (y) != 0.0F); > >> -#endif > >> + return signbit(x) != signbit(y); > >> } > >> > >> > > > > Looks like we don't have signbit() on Windows. We build with scons > there so > > the autoconf check isn't applicable. I'll post a patch in a bit. > > > > -Brian > > MSDN claims that Windows does have signbit(): > http://msdn.microsoft.com/en-us/library/hh308342.aspx > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev