port.h: Make READ_DWORD a real function instead of a macro

This commit is contained in:
GOUJON Alexandre 2013-07-09 12:39:57 +02:00
parent 4d6bbf85f9
commit a8f4390dd1
2 changed files with 19 additions and 3 deletions

View File

@ -189,7 +189,6 @@
***********************************************************************************/
#undef READ_DWORD(s)
#undef WRITE_DWORD(s, d)
#define ZLIB

21
port.h
View File

@ -423,11 +423,28 @@ static inline void WRITE_3WORD(uint8 *out, uint32 in)
#endif
}
static inline uint32 READ_DWORD(uint8 *in)
{
union DWORD out;
#if defined(LSB_FIRST)
out.u8[0] = in[0];
out.u8[1] = in[1];
out.u8[2] = in[2];
out.u8[3] = in[3];
#else
out.u8[0] = in[3];
out.u8[1] = in[2];
out.u8[2] = in[1];
out.u8[3] = in[0];
#endif
return (out.u32);
}
#ifdef FAST_LSB_WORD_ACCESS
#define READ_DWORD(s) (*(uint32 *) (s))
#define WRITE_DWORD(s, d) *(uint32 *) (s) = (d)
#else
#define READ_DWORD(s) (*(uint8 *) (s) | (*((uint8 *) (s) + 1) << 8) | (*((uint8 *) (s) + 2) << 16) | (*((uint8 *) (s) + 3) << 24))
#define WRITE_DWORD(s, d) *(uint8 *) (s) = (uint8) (d), *((uint8 *) (s) + 1) = (uint8) ((d) >> 8), *((uint8 *) (s) + 2) = (uint8) ((d) >> 16), *((uint8 *) (s) + 3) = (uint8) ((d) >> 24)
#endif