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