1dnl @synopsis MN_C_CLIP_MODE 2dnl 3dnl Determine the clipping mode when converting float to int. 4dnl @version 1.0 May 17 2003 5dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com> 6dnl 7dnl Permission to use, copy, modify, distribute, and sell this file for any 8dnl purpose is hereby granted without fee, provided that the above copyright 9dnl and this permission notice appear in all copies. No representations are 10dnl made about the suitability of this software for any purpose. It is 11dnl provided "as is" without express or implied warranty. 12 13 14 15 16 17 18 19dnl Find the clipping mode in the following way: 20dnl 1) If we are not cross compiling test it. 21dnl 2) IF we are cross compiling, assume that clipping isn't done correctly. 22 23AC_DEFUN([MN_C_CLIP_MODE], 24[AC_CACHE_CHECK(processor clipping capabilities, 25 ac_cv_c_clip_type, 26 27# Initialize to unknown 28ac_cv_c_clip_positive=unknown 29ac_cv_c_clip_negative=unknown 30 31 32if test $ac_cv_c_clip_positive = unknown ; then 33 AC_TRY_RUN( 34 [[ 35 #define _ISOC9X_SOURCE 1 36 #define _ISOC99_SOURCE 1 37 #define __USE_ISOC99 1 38 #define __USE_ISOC9X 1 39 #include <math.h> 40 int main (void) 41 { double fval ; 42 int k, ival ; 43 44 fval = 1.0 * 0x7FFFFFFF ; 45 for (k = 0 ; k < 100 ; k++) 46 { ival = (lrint (fval)) >> 24 ; 47 if (ival != 127) 48 return 1 ; 49 50 fval *= 1.2499999 ; 51 } ; 52 53 return 0 ; 54 } 55 ]], 56 ac_cv_c_clip_positive=yes, 57 ac_cv_c_clip_positive=no, 58 ac_cv_c_clip_positive=unknown 59 ) 60 61 AC_TRY_RUN( 62 [[ 63 #define _ISOC9X_SOURCE 1 64 #define _ISOC99_SOURCE 1 65 #define __USE_ISOC99 1 66 #define __USE_ISOC9X 1 67 #include <math.h> 68 int main (void) 69 { double fval ; 70 int k, ival ; 71 72 fval = -8.0 * 0x10000000 ; 73 for (k = 0 ; k < 100 ; k++) 74 { ival = (lrint (fval)) >> 24 ; 75 if (ival != -128) 76 return 1 ; 77 78 fval *= 1.2499999 ; 79 } ; 80 81 return 0 ; 82 } 83 ]], 84 ac_cv_c_clip_negative=yes, 85 ac_cv_c_clip_negative=no, 86 ac_cv_c_clip_negative=unknown 87 ) 88 fi 89 90if test $ac_cv_c_clip_positive = yes ; then 91 ac_cv_c_clip_positive=1 92else 93 ac_cv_c_clip_positive=0 94 fi 95 96if test $ac_cv_c_clip_negative = yes ; then 97 ac_cv_c_clip_negative=1 98else 99 ac_cv_c_clip_negative=0 100 fi 101 102[[ 103case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in 104 "00") 105 ac_cv_c_clip_type="none" 106 ;; 107 "10") 108 ac_cv_c_clip_type="positive" 109 ;; 110 "01") 111 ac_cv_c_clip_type="negative" 112 ;; 113 "11") 114 ac_cv_c_clip_type="both" 115 ;; 116 esac 117 ]] 118 119) 120] 121 122)# MN_C_CLIP_MODE 123 124 125