Opened 12 years ago
Last modified 12 years ago
#4784 new Tasks
numeric/interval/hw_rounding for __amd64__
Reported by: | Owned by: | Boris Gubenko | |
---|---|---|---|
Milestone: | To Be Determined | Component: | interval |
Version: | Boost Development Trunk | Severity: | Problem |
Keywords: | hardware rounding control __amd64__ regression | Cc: | jim@… |
Description
Interval fails regression tests requiring numeric/interval/hw_rounding.hpp. It gives
../boost/numeric/interval/hw_rounding.hpp:40:4: error: #error Boost.Numeric.Interval: Please specify rounding control mechanism.
My compiler defines amd64 (note the double underscores before and after). How do I determine the hardware rounding control mechanism?
Here's the AMD64 manual (pdf), but I don't understand things well enough to say which mechanism it uses.
Change History (7)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
Component: | None → interval |
---|---|
Owner: | set to |
comment:3 by , 12 years ago
Severity: | Problem → Regression |
---|
Per GCC's install notes, amd64-*-* is an alias for x86_64-*-*, so the same treatment should apply, I think.
comment:4 by , 12 years ago
Jim - did this work in a previous release, and is broken now? I'm trying to understand why this is a "regression".
comment:5 by , 12 years ago
I marked it 'regression' because it's putting yellow on the regression matrix for at least one platform (FBSD-64) and possibly more. Would another severity be more appropriate?
Either way, it seems documented in gcc and a very small change would fix it.
comment:6 by , 12 years ago
Sandia-pgi-10.1, which fails the same set of regressions, is also run on the amd64 chip. The pgCC command-line (from the regression runner) is:
pgcpp1 --llalign -Dunix -D__unix -D__unix__ -Dlinux -D__linux -D__linux__ -D__NO_MATH_INLINES -D__x86_64__ -D__LONG_MAX__=9223372036854775807L '-D__SIZE_TYPE__=unsigned long int' '-D__PTRDIFF_TYPE__=long int' -D__THROW= -D__extension__= -D__amd64__ -D__SSE__ -D__MMX__ -D__SSE2__ -D__SSE3__ -D__SSSE3__ -D__PGI -I/sierra/Sntools/extras/compilers/pgi/linux86-64/10.1/include/CC -I/sierra/Sntools/extras/compilers/pgi/linux86-64/10.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include -I/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include -I/usr/include --gnu_version=40102 --preprocess -q foo.cpp
So both these macros are defined, which seems consistent with GCC:
__x86_64__ __amd64__
comment:7 by , 12 years ago
Keywords: | regression added |
---|---|
Severity: | Regression → Problem |
Per fesetround() man page on FreeBSD,
The fegetround() and fesetround() functions conform to ISO/IEC 9899:1999 (``ISO C99'').
See also fenv().
Can't the C99 case, then, be chosen in hw_rounding.hpp for FreeBSD?
Wiki-formatting zapped my compiler define: