1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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)
|