Asm word swap in tier0/platform.h on Linux

This commit is contained in:
SiPlus 2013-08-31 13:44:06 +04:00
parent d9ac276a95
commit 809c348c2d
2 changed files with 50 additions and 0 deletions

View file

@ -935,6 +935,31 @@ inline T QWordSwapC( T dw )
#pragma warning(pop)
#elif defined( _LINUX )
#define WordSwap WordSwapAsm
#define DWordSwap DWordSwapAsm
template <typename T>
inline T WordSwapAsm( T w )
{
__asm__ (
"xchg %b0, %h0\n"
: "+r" (w)
);
return w;
}
template <typename T>
inline T DWordSwapAsm( T dw )
{
__asm__ (
"bswap %0\n"
: "+r" (dw)
);
return dw;
}
#else
#define WordSwap WordSwapC

View file

@ -935,6 +935,31 @@ inline T QWordSwapC( T dw )
#pragma warning(pop)
#elif defined( _LINUX )
#define WordSwap WordSwapAsm
#define DWordSwap DWordSwapAsm
template <typename T>
inline T WordSwapAsm( T w )
{
__asm__ (
"xchg %b0, %h0\n"
: "+r" (w)
);
return w;
}
template <typename T>
inline T DWordSwapAsm( T dw )
{
__asm__ (
"bswap %0\n"
: "+r" (dw)
);
return dw;
}
#else
#define WordSwap WordSwapC