Chris@41: dnl @synopsis AC_C_CLIP_MODE Chris@41: dnl Chris@41: dnl Determine the clipping mode when converting float to int. Chris@41: dnl @version 1.0 May 17 2003 Chris@41: dnl @author Erik de Castro Lopo Chris@41: dnl Chris@41: dnl Permission to use, copy, modify, distribute, and sell this file for any Chris@41: dnl purpose is hereby granted without fee, provided that the above copyright Chris@41: dnl and this permission notice appear in all copies. No representations are Chris@41: dnl made about the suitability of this software for any purpose. It is Chris@41: dnl provided "as is" without express or implied warranty. Chris@41: Chris@41: Chris@41: Chris@41: Chris@41: Chris@41: Chris@41: Chris@41: dnl Find the clipping mode in the following way: Chris@41: dnl 1) If we are not cross compiling test it. Chris@41: dnl 2) IF we are cross compiling, assume that clipping isn't done correctly. Chris@41: Chris@41: AC_DEFUN([AC_C_CLIP_MODE], Chris@41: [AC_CACHE_CHECK(processor clipping capabilities, Chris@41: ac_cv_c_clip_type, Chris@41: Chris@41: # Initialize to unknown Chris@41: ac_cv_c_clip_positive=unknown Chris@41: ac_cv_c_clip_negative=unknown Chris@41: Chris@41: Chris@41: if test $ac_cv_c_clip_positive = unknown ; then Chris@41: AC_TRY_RUN( Chris@41: [[ Chris@41: #define _ISOC9X_SOURCE 1 Chris@41: #define _ISOC99_SOURCE 1 Chris@41: #define __USE_ISOC99 1 Chris@41: #define __USE_ISOC9X 1 Chris@41: #include Chris@41: int main (void) Chris@41: { double fval ; Chris@41: int k, ival ; Chris@41: Chris@41: fval = 1.0 * 0x7FFFFFFF ; Chris@41: for (k = 0 ; k < 100 ; k++) Chris@41: { ival = (lrint (fval)) >> 24 ; Chris@41: if (ival != 127) Chris@41: return 1 ; Chris@41: Chris@41: fval *= 1.2499999 ; Chris@41: } ; Chris@41: Chris@41: return 0 ; Chris@41: } Chris@41: ]], Chris@41: ac_cv_c_clip_positive=yes, Chris@41: ac_cv_c_clip_positive=no, Chris@41: ac_cv_c_clip_positive=unknown Chris@41: ) Chris@41: Chris@41: AC_TRY_RUN( Chris@41: [[ Chris@41: #define _ISOC9X_SOURCE 1 Chris@41: #define _ISOC99_SOURCE 1 Chris@41: #define __USE_ISOC99 1 Chris@41: #define __USE_ISOC9X 1 Chris@41: #include Chris@41: int main (void) Chris@41: { double fval ; Chris@41: int k, ival ; Chris@41: Chris@41: fval = -8.0 * 0x10000000 ; Chris@41: for (k = 0 ; k < 100 ; k++) Chris@41: { ival = (lrint (fval)) >> 24 ; Chris@41: if (ival != -128) Chris@41: return 1 ; Chris@41: Chris@41: fval *= 1.2499999 ; Chris@41: } ; Chris@41: Chris@41: return 0 ; Chris@41: } Chris@41: ]], Chris@41: ac_cv_c_clip_negative=yes, Chris@41: ac_cv_c_clip_negative=no, Chris@41: ac_cv_c_clip_negative=unknown Chris@41: ) Chris@41: fi Chris@41: Chris@41: if test $ac_cv_c_clip_positive = yes ; then Chris@41: ac_cv_c_clip_positive=1 Chris@41: else Chris@41: ac_cv_c_clip_positive=0 Chris@41: fi Chris@41: Chris@41: if test $ac_cv_c_clip_negative = yes ; then Chris@41: ac_cv_c_clip_negative=1 Chris@41: else Chris@41: ac_cv_c_clip_negative=0 Chris@41: fi Chris@41: Chris@41: [[ Chris@41: case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in Chris@41: "00") Chris@41: ac_cv_c_clip_type="none" Chris@41: ;; Chris@41: "10") Chris@41: ac_cv_c_clip_type="positive" Chris@41: ;; Chris@41: "01") Chris@41: ac_cv_c_clip_type="negative" Chris@41: ;; Chris@41: "11") Chris@41: ac_cv_c_clip_type="both" Chris@41: ;; Chris@41: esac Chris@41: ]] Chris@41: Chris@41: ) Chris@41: ] Chris@41: Chris@41: )# AC_C_CLIP_MODE Chris@41: Chris@41: