From: Marc Glisse Date: Fri, 5 Oct 2012 19:10:22 +0000 (+0200) Subject: re PR target/54686 (std::abs (long long) resorts to std::abs (double) if llabs is... X-Git-Tag: misc/gccgo-go1_1_2~384 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b1cd14dd034dec421712abbd95111a2c4fb08e1;p=thirdparty%2Fgcc.git re PR target/54686 (std::abs (long long) resorts to std::abs (double) if llabs is absent) 2012-10-05 Marc Glisse 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 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9342f56f8992..45c6e69172b9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2012-10-05 Marc Glisse + + 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 * 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 8a5aaf16b075..729a639c6e7e 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;