Use __builtin_bit_cast when available

This commit is contained in:
Peter Dimov committed 2023-06-01 02:38:57 +03:00
1 parent 85527c4045
commit 5a3b4df5de
3 files changed
+47

No files matched your search

+22
View File
@@ -43,6 +43,16 @@
# define BOOST_CORE_HAS_BUILTIN_ISCONSTEVAL
#endif
#if defined(__has_builtin)
# if __has_builtin(__builtin_bit_cast)
# define BOOST_CORE_HAS_BUILTIN_BIT_CAST
# endif
#endif
#if defined(BOOST_MSVC) && BOOST_MSVC >= 1926
# define BOOST_CORE_HAS_BUILTIN_BIT_CAST
#endif
namespace boost
{
namespace core
@@ -50,6 +60,16 @@ namespace core
// bit_cast
#if defined(BOOST_CORE_HAS_BUILTIN_BIT_CAST)
template<class To, class From>
BOOST_CONSTEXPR To bit_cast( From const & from ) BOOST_NOEXCEPT
{
return __builtin_bit_cast( To, from );
}
#else
template<class To, class From>
To bit_cast( From const & from ) BOOST_NOEXCEPT
{
@@ -60,6 +80,8 @@ To bit_cast( From const & from ) BOOST_NOEXCEPT
return to;
}
#endif
// countl
#if defined(__GNUC__) || defined(__clang__)