aboutsummaryrefslogtreecommitdiffstats
path: root/include/bit_ops.h
diff options
context:
space:
mode:
authorlloyd <[email protected]>2008-03-09 05:35:48 +0000
committerlloyd <[email protected]>2008-03-09 05:35:48 +0000
commit478710c5f35dabcb81a4ae2c26052b68606570ed (patch)
tree9df0bce2f80a245c1d30d364f3e3b419bfb43eaa /include/bit_ops.h
parent9f63fc79701df7e6b659908f5f8ae7efba7c7720 (diff)
Alas, my definition of the new improved reverse_bytes for 64-bit values was
wrong, and didn't work at all. New corrected (and tested) version.
Diffstat (limited to 'include/bit_ops.h')
-rw-r--r--include/bit_ops.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/include/bit_ops.h b/include/bit_ops.h
index ec46dbf43..7081ee3e5 100644
--- a/include/bit_ops.h
+++ b/include/bit_ops.h
@@ -39,8 +39,11 @@ inline u32bit reverse_bytes(u32bit input)
inline u64bit reverse_bytes(u64bit input)
{
- return rotate_left(static_cast<u32bit>(input ), 16) |
- rotate_left(static_cast<u32bit>(input >> 32), 16);
+ u32bit hi = ((input >> 40) & 0x00FF00FF) | ((input >> 24) & 0xFF00FF00);
+ u32bit lo = ((input & 0xFF00FF00) >> 8) | ((input & 0x00FF00FF) << 8);
+ hi = (hi << 16) | (hi >> 16);
+ lo = (lo << 16) | (lo >> 16);
+ return (static_cast<u64bit>(lo) << 32) | hi;
}
/*************************************************