Fixes for older gcc. Fixes for big endian machines.

This commit is contained in:
Beman
2013-05-13 10:09:25 -04:00
parent 4c0bd87c18
commit 2f6dba3ab6
2 changed files with 10 additions and 10 deletions

View File

@@ -169,10 +169,10 @@ namespace endian
# ifdef BOOST_ENDIAN_NO_INTRINSICS
uint64_t step32, step16;
step32 = static_cast<uint64_t>(x) << 32 | static_cast<uint64_t>(x) >> 32;
step16 = (step32 & 0x0000FFFF0000FFFF) << 16
| (step32 & 0xFFFF0000FFFF0000) >> 16;
return static_cast<int64_t>((step16 & 0x00FF00FF00FF00FF) << 8
| (step16 & 0xFF00FF00FF00FF00) >> 8);
step16 = (step32 & 0x0000FFFF0000FFFFULL) << 16
| (step32 & 0xFFFF0000FFFF0000ULL) >> 16;
return static_cast<int64_t>((step16 & 0x00FF00FF00FF00FFULL) << 8
| (step16 & 0xFF00FF00FF00FF00ULL) >> 8);
# else
return BOOST_ENDIAN_INTRINSIC_BYTE_SWAP_8(static_cast<uint64_t>(x));
# endif
@@ -206,10 +206,10 @@ namespace endian
# ifdef BOOST_ENDIAN_NO_INTRINSICS
uint64_t step32, step16;
step32 = x << 32 | x >> 32;
step16 = (step32 & 0x0000FFFF0000FFFF) << 16
| (step32 & 0xFFFF0000FFFF0000) >> 16;
return (step16 & 0x00FF00FF00FF00FF) << 8
| (step16 & 0xFF00FF00FF00FF00) >> 8;
step16 = (step32 & 0x0000FFFF0000FFFFULL) << 16
| (step32 & 0xFFFF0000FFFF0000ULL) >> 16;
return (step16 & 0x00FF00FF00FF00FFULL) << 8
| (step16 & 0xFF00FF00FF00FF00ULL) >> 8;
# else
return BOOST_ENDIAN_INTRINSIC_BYTE_SWAP_8(x);
# endif
@@ -406,7 +406,7 @@ namespace endian
// Effects: none if native endian order is little, otherwise reverse(x)
{
# ifndef BOOST_LITTLE_ENDIAN
x = reverse(x);
reverse(x);
# endif
}

View File

@@ -28,4 +28,4 @@
#define BOOST_ENDIAN_NO_INTRINSICS
#endif
#endif BOOST_ENDIAN_INTRINSIC_HPP
#endif // BOOST_ENDIAN_INTRINSIC_HPP