93 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
|   | include (CheckCSourceRuns)
 | ||
|  | include (CMakePushCheckState)
 | ||
|  | 
 | ||
|  | macro (CLIP_MODE)
 | ||
|  | 	if ((NOT DEFINED CPU_CLIPS_NEGATIVE) AND (NOT DEFINED CPU_CLIPS_POSITIVE))
 | ||
|  | 		set (CLIP_MODE_POSITIVE_MESSAGE "Target processor clips on positive float to int conversion")
 | ||
|  | 		set (CLIP_MODE_NEGATIVE_MESSAGE "Target processor clips on negative float to int conversion")
 | ||
|  | 
 | ||
|  | 		message (STATUS "Checking processor clipping capabilities...")
 | ||
|  | 
 | ||
|  | 		if (CMAKE_CROSSCOMPILING)
 | ||
|  | 
 | ||
|  | 			set (CLIP_MSG "disabled")
 | ||
|  | 			set (CPU_CLIPS_POSITIVE FALSE CACHE BOOL ${CLIP_MODE_POSITIVE_MESSAGE})
 | ||
|  | 			set (CPU_CLIPS_NEGATIVE FALSE CACHE BOOL ${CLIP_MODE_NEGATIVE_MESSAGE})
 | ||
|  | 
 | ||
|  | 		else (NOT CMAKE_CROSSCOMPILING)
 | ||
|  | 
 | ||
|  | 			cmake_push_check_state ()
 | ||
|  | 			
 | ||
|  | 			set (CMAKE_REQUIRED_QUIET TRUE)
 | ||
|  | 			if (LIBM_REQUIRED)
 | ||
|  | 				set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${M_LIBRARY})
 | ||
|  | 			endif ()
 | ||
|  | 			
 | ||
|  | 			check_c_source_runs ( | ||
|  | 			"
 | ||
|  | 			#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 ;
 | ||
|  | 				}
 | ||
|  | 			"
 | ||
|  | 			CPU_CLIPS_POSITIVE)
 | ||
|  | 			
 | ||
|  | 			check_c_source_runs ( | ||
|  | 			"
 | ||
|  | 			#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 ;
 | ||
|  | 				}
 | ||
|  | 			"
 | ||
|  | 			CPU_CLIPS_NEGATIVE)
 | ||
|  | 
 | ||
|  | 			cmake_pop_check_state ()
 | ||
|  | 
 | ||
|  | 			if (CPU_CLIPS_POSITIVE AND (NOT CPU_CLIPS_NEGATIVE))
 | ||
|  | 				set (CLIP_MSG "positive")
 | ||
|  | 			elseif (CPU_CLIPS_NEGATIVE AND (NOT CPU_CLIPS_POSITIVE))
 | ||
|  | 				set (CLIP_MSG "negative")
 | ||
|  | 			elseif (CPU_CLIPS_POSITIVE AND CPU_CLIPS_NEGATIVE)
 | ||
|  | 				set (CLIP_MSG "both")
 | ||
|  | 			else ()
 | ||
|  | 				set (CLIP_MSG "none")
 | ||
|  | 			endif ()
 | ||
|  | 
 | ||
|  | 		endif (CMAKE_CROSSCOMPILING)
 | ||
|  | 
 | ||
|  | 		message (STATUS "Checking processor clipping capabilities... ${CLIP_MSG}")
 | ||
|  | 	endif ()
 | ||
|  | endmacro (CLIP_MODE)
 |