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