diff options
author | bunnei <ericbunnie@gmail.com> | 2014-04-28 03:49:50 +0200 |
---|---|---|
committer | bunnei <ericbunnie@gmail.com> | 2014-04-28 03:49:50 +0200 |
commit | 81cb80997ac3e0867c954cedcf3b43e7096d35d0 (patch) | |
tree | 37e0a69ed003880a5549f3ec81de9634d9752447 | |
parent | fix for issue Linux build #9, not sure why this is broken but its unused code I'm just getting rid of it (diff) | |
download | yuzu-81cb80997ac3e0867c954cedcf3b43e7096d35d0.tar yuzu-81cb80997ac3e0867c954cedcf3b43e7096d35d0.tar.gz yuzu-81cb80997ac3e0867c954cedcf3b43e7096d35d0.tar.bz2 yuzu-81cb80997ac3e0867c954cedcf3b43e7096d35d0.tar.lz yuzu-81cb80997ac3e0867c954cedcf3b43e7096d35d0.tar.xz yuzu-81cb80997ac3e0867c954cedcf3b43e7096d35d0.tar.zst yuzu-81cb80997ac3e0867c954cedcf3b43e7096d35d0.zip |
-rw-r--r-- | src/common/common.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/common/common.h b/src/common/common.h index 418757855..58de0c7d9 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -159,4 +159,48 @@ enum EMUSTATE_CHANGE EMUSTATE_CHANGE_STOP }; + +#ifdef _MSC_VER +#ifndef _XBOX +inline unsigned long long bswap64(unsigned long long x) { return _byteswap_uint64(x); } +inline unsigned int bswap32(unsigned int x) { return _byteswap_ulong(x); } +inline unsigned short bswap16(unsigned short x) { return _byteswap_ushort(x); } +#else +inline unsigned long long bswap64(unsigned long long x) { return __loaddoublewordbytereverse(0, &x); } +inline unsigned int bswap32(unsigned int x) { return __loadwordbytereverse(0, &x); } +inline unsigned short bswap16(unsigned short x) { return __loadshortbytereverse(0, &x); } +#endif +#else +// TODO: speedup +inline unsigned short bswap16(unsigned short x) { return (x << 8) | (x >> 8); } +inline unsigned int bswap32(unsigned int x) { return (x >> 24) | ((x & 0xFF0000) >> 8) | ((x & 0xFF00) << 8) | (x << 24);} +inline unsigned long long bswap64(unsigned long long x) {return ((unsigned long long)bswap32(x) << 32) | bswap32(x >> 32); } +#endif + +inline float bswapf(float f) { + union { + float f; + unsigned int u32; + } dat1, dat2; + + dat1.f = f; + dat2.u32 = bswap32(dat1.u32); + + return dat2.f; +} + +inline double bswapd(double f) { + union { + double f; + unsigned long long u64; + } dat1, dat2; + + dat1.f = f; + dat2.u64 = bswap64(dat1.u64); + + return dat2.f; +} + +#include "swap.h" + #endif // _COMMON_H_ |