diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2012-10-05 21:10:22 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2012-10-05 19:10:22 +0000 |
commit | 3b1cd14dd034dec421712abbd95111a2c4fb08e1 (patch) | |
tree | 8b8cdfa1b8934bc66cd9efe395649ab2032c1033 | |
parent | 67dd8d59381b8f0c3edf1191d408e13187392a21 (diff) | |
download | gcc-3b1cd14dd034dec421712abbd95111a2c4fb08e1.zip gcc-3b1cd14dd034dec421712abbd95111a2c4fb08e1.tar.gz gcc-3b1cd14dd034dec421712abbd95111a2c4fb08e1.tar.bz2 |
re PR target/54686 (std::abs (long long) resorts to std::abs (double) if llabs is absent)
2012-10-05 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/54686
* include/c_global/cstdlib (abs(long long)): Define with
__builtin_llabs when we have long long.
(abs(long)): Use __builtin_labs.
(abs(__int128)): Define when we have __int128.
From-SVN: r192138
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/c_global/cstdlib | 16 |
2 files changed, 19 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9342f56..45c6e69 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2012-10-05 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/54686 + * include/c_global/cstdlib (abs(long long)): Define with + __builtin_llabs when we have long long. + (abs(long)): Use __builtin_labs. + (abs(__int128)): Define when we have __int128. + 2012-10-05 Paolo Carlini <paolo.carlini@oracle.com> * include/c_global/cstdlib: Remove redundant pasto code protected diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib index 8a5aaf1..729a639 100644 --- a/libstdc++-v3/include/c_global/cstdlib +++ b/libstdc++-v3/include/c_global/cstdlib @@ -135,12 +135,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO inline long - abs(long __i) { return labs(__i); } + abs(long __i) { return __builtin_labs(__i); } inline ldiv_t div(long __i, long __j) { return ldiv(__i, __j); } #endif +#ifdef _GLIBCXX_USE_LONG_LONG + inline long long + abs(long long __x) { return __builtin_llabs (__x); } +#endif + +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) + inline __int128 + abs(__int128 __x) { return __x >= 0 ? __x : -__x; } +#endif + _GLIBCXX_END_NAMESPACE_VERSION } // namespace @@ -169,9 +179,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using ::_Exit; #endif - inline long long - abs(long long __x) { return __x >= 0 ? __x : -__x; } - #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC using ::llabs; @@ -206,7 +213,6 @@ namespace std using ::__gnu_cxx::lldiv_t; #endif using ::__gnu_cxx::_Exit; - using ::__gnu_cxx::abs; #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC using ::__gnu_cxx::llabs; using ::__gnu_cxx::div; |