Implementation notes:
x86_64:
- - Since all x86_64 compilers use SSE by default, it is probably unnecessary
- to use these macros there. We define them anyway since we are too lazy
- to differentiate the architecture. Also, the compiler option -mfpmath=i387
- justifies this decision.
+ - Since all x86_64 compilers use SSE by default, we do not define these
+ macros there. We ignore the compiler option -mfpmath=i387, because there is
+ no reason to use it on x86_64.
General:
- It would be nice if one could detect whether SSE if used for math via some
MS Visual C:
- Since MSVC users typically don't use autoconf or CMake, we will detect
- MSVC via compile time define. Floating point precision change isn't
- supported on 64 bit platforms, so it's NOP. See
- http://msdn.microsoft.com/en-us/library/c9676k6h(v=vs.110).aspx
+ MSVC via compile time define.
*/
/* MSVC detection (MSVC people usually don't use autoconf) */
# define HAVE__CONTROLFP_S
#endif /* _MSC_VER */
-#ifdef HAVE__CONTROLFP_S
+#if defined(HAVE__CONTROLFP_S) && !defined(__x86_64__)
/* float.h defines _controlfp_s */
# include <float.h>
return _xpfpa_result; \
} while (0)
-#elif defined(HAVE__CONTROLFP)
+#elif defined(HAVE__CONTROLFP) && !defined(__x86_64__)
/* float.h defines _controlfp */
# include <float.h>
return _xpfpa_result; \
} while (0)
-#elif defined(HAVE__FPU_SETCW) /* glibc systems */
+#elif defined(HAVE__FPU_SETCW) && !defined(__x86_64__) /* glibc systems */
/* fpu_control.h defines _FPU_[GS]ETCW */
# include <fpu_control.h>
return _xpfpa_result; \
} while (0)
-#elif defined(HAVE_FPSETPREC) /* FreeBSD */
+#elif defined(HAVE_FPSETPREC) && !defined(__x86_64__) /* FreeBSD */
/* fpu_control.h defines _FPU_[GS]ETCW */
# include <machine/ieeefp.h>
return _xpfpa_result; \
} while (0)
-#elif defined(HAVE_FPU_INLINE_ASM_X86)
+#elif defined(HAVE_FPU_INLINE_ASM_X86) && !defined(__x86_64__)
/*
Custom x86 inline assembler implementation.