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