diff options
author | Matt Oliver <protogonoi@gmail.com> | 2015-11-09 20:19:32 +1100 |
---|---|---|
committer | Matt Oliver <protogonoi@gmail.com> | 2015-11-12 16:53:44 +1100 |
commit | 9b9c9ef3b42116e7ad2111fc8145f4eca12d657b (patch) | |
tree | da505e855fc925630eae03d4d32b541a834d254e | |
parent | edd0c1d78a89ed41f70ed6d7e2f189d8156a871c (diff) | |
download | ffmpeg-streaming-9b9c9ef3b42116e7ad2111fc8145f4eca12d657b.zip ffmpeg-streaming-9b9c9ef3b42116e7ad2111fc8145f4eca12d657b.tar.gz |
avutil/x86/bswap: Add msvc bswap instrinsics.
This adds msvc optimisations as well as fixing an error in icl whereby it will generate invalid code otherwise.
Signed-off-by: Matt Oliver <protogonoi@gmail.com>
-rw-r--r-- | libavutil/x86/bswap.h | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/libavutil/x86/bswap.h b/libavutil/x86/bswap.h index 3efd578..11d143b 100644 --- a/libavutil/x86/bswap.h +++ b/libavutil/x86/bswap.h @@ -28,7 +28,30 @@ #include "config.h" #include "libavutil/attributes.h" -#if HAVE_INLINE_ASM +#if defined(_MSC_VER) + +#define av_bswap16 av_bswap16 +static av_always_inline av_const uint16_t av_bswap16(uint16_t x) +{ + return _rotr16(x, 8); +} + +#define av_bswap32 av_bswap32 +static av_always_inline av_const uint32_t av_bswap32(uint32_t x) +{ + return _byteswap_ulong(x); +} + +#if ARCH_X86_64 +#define av_bswap64 av_bswap64 +static inline uint64_t av_const av_bswap64(uint64_t x) +{ + return _byteswap_uint64(x); +} +#endif + + +#elif HAVE_INLINE_ASM #if AV_GCC_VERSION_AT_MOST(4,0) #define av_bswap16 av_bswap16 |