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 return static_cast<uint16_t
>((val << 8) | (val >> 8));
35#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) || defined(BOTAN_BUILD_COMPILER_IS_XLC)
36 return __builtin_bswap32(val);
38#elif defined(BOTAN_BUILD_COMPILER_IS_MSVC)
39 return _byteswap_ulong(val);
41#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_CPU_IS_X86_FAMILY)
44 asm(
"bswapl %0" :
"=r" (val) :
"0" (val));
49 uint16_t hi =
static_cast<uint16_t
>(val >> 16);
50 uint16_t lo =
static_cast<uint16_t
>(val);
55 return (
static_cast<uint32_t
>(lo) << 16) | hi;
64#if defined(BOTAN_BUILD_COMPILER_IS_GCC) || defined(BOTAN_BUILD_COMPILER_IS_CLANG) || defined(BOTAN_BUILD_COMPILER_IS_XLC)
65 return __builtin_bswap64(val);
67#elif defined(BOTAN_BUILD_COMPILER_IS_MSVC)
68 return _byteswap_uint64(val);
70#elif defined(BOTAN_USE_GCC_INLINE_ASM) && defined(BOTAN_TARGET_ARCH_IS_X86_64)
72 asm(
"bswapq %0" :
"=r" (val) :
"0" (val));
80 uint32_t hi =
static_cast<uint32_t
>(val >> 32);
81 uint32_t lo =
static_cast<uint32_t
>(val);
86 return (
static_cast<uint64_t
>(lo) << 32) | hi;
#define BOTAN_FUTURE_INTERNAL_HEADER(hdr)
uint64_t reverse_bytes(uint64_t val)