Skip to content

Clean up U8TO*_LE macro implementations #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 12 additions & 19 deletions mph_hv_macro.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#endif

/*-----------------------------------------------------------------------------
* Endianess, misalignment capabilities and util macros
* Endianess and util macros
*
* The following 3 macros are defined in this section. The other macros defined
* are only needed to help derive these 3.
Expand All @@ -20,29 +20,22 @@
* ROTR64(x,r) Rotate x right by r bits
*/

#ifndef U32_ALIGNMENT_REQUIRED
#ifndef U8TO16_LE
#if (BYTEORDER == 0x1234 || BYTEORDER == 0x12345678)
#define U8TO16_LE(ptr) (*((const U16*)(ptr)))
#define U8TO32_LE(ptr) (*((const U32*)(ptr)))
#define U8TO64_LE(ptr) (*((const U64*)(ptr)))
#define U8TO16_LE(ptr) ((U32)(ptr)[0]|(U32)(ptr)[1]<<8)
#define U8TO32_LE(ptr) ((U32)(ptr)[0]|(U32)(ptr)[1]<<8|(U32)(ptr)[2]<<16|(U32)(ptr)[3]<<24)
#define U8TO64_LE(ptr) ((U64)(ptr)[0]|(U64)(ptr)[1]<<8|(U64)(ptr)[2]<<16|(U64)(ptr)[3]<<24|\
(U64)(ptr)[4]<<32|(U64)(ptr)[5]<<40|\
(U64)(ptr)[6]<<48|(U64)(ptr)[7]<<56)
#elif (BYTEORDER == 0x4321 || BYTEORDER == 0x87654321)
#if defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3))
#define U8TO16_LE(ptr) (__builtin_bswap16(*((U16*)(ptr))))
#define U8TO32_LE(ptr) (__builtin_bswap32(*((U32*)(ptr))))
#define U8TO64_LE(ptr) (__builtin_bswap64(*((U64*)(ptr))))
#endif
#define U8TO16_LE(ptr) ((U32)(ptr)[1]|(U32)(ptr)[0]<<8)
#define U8TO32_LE(ptr) ((U32)(ptr)[3]|(U32)(ptr)[2]<<8|(U32)(ptr)[1]<<16|(U32)(ptr)[0]<<24)
#define U8TO64_LE(ptr) ((U64)(ptr)[7]|(U64)(ptr)[6]<<8|(U64)(ptr)[5]<<16|(U64)(ptr)[4]<<24|\
(U64)(ptr)[3]<<32|(U64)(ptr)[2]<<40|\
(U64)(ptr)[1]<<48|(U64)(ptr)[0]<<56)
#endif
#endif

#ifndef U8TO16_LE
/* Without a known fast bswap32 we're just as well off doing this */
#define U8TO16_LE(ptr) ((U32)(ptr)[0]|(U32)(ptr)[1]<<8)
#define U8TO32_LE(ptr) ((U32)(ptr)[0]|(U32)(ptr)[1]<<8|(U32)(ptr)[2]<<16|(U32)(ptr)[3]<<24)
#define U8TO64_LE(ptr) ((U64)(ptr)[0]|(U64)(ptr)[1]<<8|(U64)(ptr)[2]<<16|(U64)(ptr)[3]<<24|\
(U64)(ptr)[4]<<32|(U64)(ptr)[5]<<40|\
(U64)(ptr)[6]<<48|(U64)(ptr)[7]<<56)
#endif

#ifdef CAN64BITHASH
#ifndef U64TYPE
/* This probably isn't going to work, but failing with a compiler error due to
Expand Down