13#ifndef TLX_MATH_ROL_HEADER
14#define TLX_MATH_ROL_HEADER
31static inline std::uint32_t
rol32_generic(
const std::uint32_t& x,
int i) {
32 return (x <<
static_cast<std::uint32_t
>(i & 31)) |
33 (x >>
static_cast<std::uint32_t
>((32 - (i & 31)) & 31));
36#if (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
39static inline std::uint32_t
rol32(
const std::uint32_t& x,
int i) {
41 asm (
"roll %%cl,%0" :
"=r" (x1) :
"0" (x1),
"c" (i));
45#elif defined(_MSC_VER)
48static inline std::uint32_t
rol32(
const std::uint32_t& x,
int i) {
55static inline std::uint32_t
rol32(
const std::uint32_t& x,
int i) {
65static inline std::uint64_t
rol64_generic(
const std::uint64_t& x,
int i) {
66 return (x <<
static_cast<std::uint64_t
>(i & 63)) |
67 (x >>
static_cast<std::uint64_t
>((64 - (i & 63)) & 63));
70#if (defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__)
73static inline std::uint64_t
rol64(
const std::uint64_t& x,
int i) {
75 asm (
"rolq %%cl,%0" :
"=r" (x1) :
"0" (x1),
"c" (i));
79#elif defined(_MSC_VER)
82static inline std::uint64_t
rol64(
const std::uint64_t& x,
int i) {
89static inline std::uint64_t
rol64(
const std::uint64_t& x,
int i) {
static std::uint64_t rol64(const std::uint64_t &x, int i)
rol64 - generic
static std::uint32_t rol32(const std::uint32_t &x, int i)
rol32 - generic
static std::uint32_t rol32_generic(const std::uint32_t &x, int i)
rol32 - generic implementation
static std::uint64_t rol64_generic(const std::uint64_t &x, int i)
rol64 - generic implementation