Go to the documentation of this file.
45 #define _USE_MATH_DEFINES // for C++
57 #define OJPH_COMPILER_MSVC
58 #elif (defined __GNUC__)
59 #define OJPH_COMPILER_GNUC
68 #ifdef OJPH_COMPILER_MSVC
75 #ifdef OJPH_COMPILER_MSVC
76 return (
ui32)__popcnt(val);
77 #elif (defined OJPH_COMPILER_GNUC)
78 return (
ui32)__builtin_popcount(val);
80 val -= ((val >> 1) & 0x55555555);
81 val = (((val >> 2) & 0x33333333) + (val & 0x33333333));
82 val = (((val >> 4) + val) & 0x0f0f0f0f);
85 return (
int)(val & 0x0000003f);
90 #ifdef OJPH_COMPILER_MSVC
91 #pragma intrinsic(_BitScanReverse)
95 #ifdef OJPH_COMPILER_MSVC
96 unsigned long result = 0;
97 _BitScanReverse(&result, val);
98 return 31 ^ (
ui32)result;
99 #elif (defined OJPH_COMPILER_GNUC)
100 return (
ui32)__builtin_clz(val);
112 #ifdef OJPH_COMPILER_MSVC
113 #pragma intrinsic(_BitScanForward)
117 #ifdef OJPH_COMPILER_MSVC
118 unsigned long result = 0;
119 _BitScanForward(&result, val);
121 #elif (defined OJPH_COMPILER_GNUC)
122 return (
ui32)__builtin_ctz(val);
136 #ifdef OJPH_COMPILER_MSVC
137 return (
si32)(val + (val >= 0.0f ? 0.5f : -0.5f));
138 #elif (defined OJPH_COMPILER_GNUC)
139 return (
si32)(val + (val >= 0.0f ? 0.5f : -0.5f));
141 return (
si32)round(val);
148 #ifdef OJPH_COMPILER_MSVC
150 #elif (defined OJPH_COMPILER_GNUC)
153 return (
si32)trunc(val);
170 template <
typename T,
int N>
180 template <
typename T,
int N>
182 intptr_t p =
reinterpret_cast<intptr_t
>(ptr);
185 return reinterpret_cast<T *
>(p);
191 #if (defined WIN32) || (defined _WIN32) || (defined _WIN64)
192 #define OJPH_OS_WINDOWS
193 #elif (defined __APPLE__)
194 #define OJPH_OS_APPLE
195 #elif (defined __linux)
196 #define OJPH_OS_LINUX
202 #ifdef OJPH_OS_WINDOWS
203 #define OJPH_EXPORT __declspec(dllexport)
210 #endif // !OJPH_ARCH_H
Definition: ojph_base.h:48
static ui32 count_leading_zeros(ui32 val)
Definition: ojph_arch.h:93
const ui32 byte_alignment
Definition: ojph_arch.h:160
static bool cpu_level_initialized
Definition: ojph_arch.cpp:164
size_t calc_aligned_size(size_t size)
Definition: ojph_arch.h:171
static ui32 population_count(ui32 val)
Definition: ojph_arch.h:73
uint32_t ui32
Definition: ojph_defs.h:54
static int cpu_level
Definition: ojph_arch.cpp:163
int32_t si32
Definition: ojph_defs.h:55
const ui32 log_byte_alignment
Definition: ojph_arch.h:161
static si32 ojph_round(float val)
Definition: ojph_arch.h:134
const ui32 object_alignment
Definition: ojph_arch.h:162
static ui32 count_trailing_zeros(ui32 val)
Definition: ojph_arch.h:115
Definition: ojph_block_decoder.cpp:49
static si32 ojph_trunc(float val)
Definition: ojph_arch.h:146
int cpu_ext_level()
Definition: ojph_arch.cpp:170
T * align_ptr(T *ptr)
Definition: ojph_arch.h:181