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