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