9#ifndef BOTAN_BYTE_SWAP_H_
10#define BOTAN_BYTE_SWAP_H_
12#include <botan/types.h>
14#if defined(BOTAN_BUILD_COMPILER_IS_MSVC)
27#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) || defined(BOTAN_BUILD_COMPILER_IS_XLC)
28 return __builtin_bswap16(val);
30 return static_cast<uint16_t
>((val << 8) | (val >> 8));
39#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) || defined(BOTAN_BUILD_COMPILER_IS_XLC)
40 return __builtin_bswap32(val);
42#elif defined(BOTAN_BUILD_COMPILER_IS_MSVC)
43 return _byteswap_ulong(val);
45#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_CPU_IS_X86_FAMILY)
48 asm(
"bswapl %0" :
"=r" (val) :
"0" (val));
53 uint16_t hi =
static_cast<uint16_t
>(val >> 16);
54 uint16_t lo =
static_cast<uint16_t
>(val);
59 return (
static_cast<uint32_t
>(lo) << 16) | hi;
68#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) || defined(BOTAN_BUILD_COMPILER_IS_XLC)
69 return __builtin_bswap64(val);
71#elif defined(BOTAN_BUILD_COMPILER_IS_MSVC)
72 return _byteswap_uint64(val);
74#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_ARCH_IS_X86_64)
76 asm(
"bswapq %0" :
"=r" (val) :
"0" (val));
84 uint32_t hi =
static_cast<uint32_t
>(val >> 32);
85 uint32_t lo =
static_cast<uint32_t
>(val);
90 return (
static_cast<uint64_t
>(lo) << 32) | hi;
#define BOTAN_FUTURE_INTERNAL_HEADER(hdr)
uint64_t reverse_bytes(uint64_t val)