45 #define _USE_MATH_DEFINES
53 #define OJPH_COMPILER_MSVC
54 #elif (defined __GNUC__)
55 #define OJPH_COMPILER_GNUC
58 #ifdef OJPH_COMPILER_MSVC
64 #ifdef OJPH_COMPILER_MSVC
65 return (
ui32)__popcnt(val);
66 #elif (defined OJPH_COMPILER_GNUC)
67 return (
ui32)__builtin_popcount(val);
69 val -= ((val >> 1) & 0x55555555);
70 val = (((val >> 2) & 0x33333333) + (val & 0x33333333));
71 val = (((val >> 4) + val) & 0x0f0f0f0f);
74 return (
int)(val & 0x0000003f);
79 #ifdef OJPH_COMPILER_MSVC
80 #pragma intrinsic(_BitScanReverse)
84 #ifdef OJPH_COMPILER_MSVC
85 unsigned long result = 0;
86 _BitScanReverse(&result, val);
87 return 31 ^ (
ui32)result;
88 #elif (defined OJPH_COMPILER_GNUC)
89 return (
ui32)__builtin_clz(val);
109 template <
typename T,
int N>
111 size = size *
sizeof(T) +
N - 1;
119 template <
typename T,
int N>
121 intptr_t p =
reinterpret_cast<intptr_t
>(ptr);
124 return reinterpret_cast<T *
>(p);
N
Definition: rvv-inl.h:1656
Definition: ojph_block_decoder.cpp:50
const ui32 object_alignment
Definition: ojph_arch.h:105
const ui32 byte_alignment
Definition: ojph_arch.h:103
size_t calc_aligned_size(size_t size)
Definition: ojph_arch.h:110
static ui32 population_count(ui32 val)
Definition: ojph_arch.h:62
T * align_ptr(T *ptr)
Definition: ojph_arch.h:120
static ui32 count_leading_zeros(ui32 val)
Definition: ojph_arch.h:82
const ui32 log_byte_alignment
Definition: ojph_arch.h:104
uint32_t ui32
Definition: ojph_defs.h:50