53#define OJPH_COMPILER_MSVC
54#elif (defined __GNUC__)
55#define OJPH_COMPILER_GNUC
59#define OJPH_EMSCRIPTEN
62#ifdef OJPH_COMPILER_MSVC
71#if (defined WIN32) || (defined _WIN32) || (defined _WIN64)
72#define OJPH_OS_WINDOWS
73#elif (defined __APPLE__)
75#elif (defined __linux)
82#if defined(OJPH_OS_WINDOWS) && defined(OJPH_BUILD_SHARED_LIBRARY)
83#define OJPH_EXPORT __declspec(dllexport)
112 #ifdef OJPH_COMPILER_MSVC
113 return (
ui32)__popcnt(val);
114 #elif (defined OJPH_COMPILER_GNUC)
115 return (
ui32)__builtin_popcount(val);
117 val -= ((val >> 1) & 0x55555555);
118 val = (((val >> 2) & 0x33333333) + (val & 0x33333333));
119 val = (((val >> 4) + val) & 0x0f0f0f0f);
122 return (
int)(val & 0x0000003f);
127#ifdef OJPH_COMPILER_MSVC
128 #pragma intrinsic(_BitScanReverse)
132 #ifdef OJPH_COMPILER_MSVC
133 unsigned long result = 0;
134 _BitScanReverse(&result, val);
135 return 31 ^ (
ui32)result;
136 #elif (defined OJPH_COMPILER_GNUC)
137 return (
ui32)__builtin_clz(val);
149#ifdef OJPH_COMPILER_MSVC
150 #pragma intrinsic(_BitScanForward)
154 #ifdef OJPH_COMPILER_MSVC
155 unsigned long result = 0;
156 _BitScanForward(&result, val);
158 #elif (defined OJPH_COMPILER_GNUC)
159 return (
ui32)__builtin_ctz(val);
173 #ifdef OJPH_COMPILER_MSVC
174 return (
si32)(val + (val >= 0.0f ? 0.5f : -0.5f));
175 #elif (defined OJPH_COMPILER_GNUC)
176 return (
si32)(val + (val >= 0.0f ? 0.5f : -0.5f));
178 return (
si32)round(val);
185 #ifdef OJPH_COMPILER_MSVC
187 #elif (defined OJPH_COMPILER_GNUC)
190 return (
si32)trunc(val);
207 template <
typename T,
int N>
209 size = size *
sizeof(T) + N - 1;
217 template <
typename T,
int N>
219 intptr_t p =
reinterpret_cast<intptr_t
>(ptr);
222 return reinterpret_cast<T *
>(p);
Definition ojph_block_common.cpp:48
const ui32 object_alignment
Definition ojph_arch.h:199
@ X86_CPU_EXT_LEVEL_AVX2
Definition ojph_arch.h:104
@ X86_CPU_EXT_LEVEL_AVX
Definition ojph_arch.h:103
@ X86_CPU_EXT_LEVEL_AVX512
Definition ojph_arch.h:106
@ X86_CPU_EXT_LEVEL_GENERIC
Definition ojph_arch.h:95
@ X86_CPU_EXT_LEVEL_SSE2
Definition ojph_arch.h:98
@ X86_CPU_EXT_LEVEL_SSE41
Definition ojph_arch.h:101
@ X86_CPU_EXT_LEVEL_SSE
Definition ojph_arch.h:97
@ X86_CPU_EXT_LEVEL_MMX
Definition ojph_arch.h:96
@ X86_CPU_EXT_LEVEL_SSE42
Definition ojph_arch.h:102
@ X86_CPU_EXT_LEVEL_SSSE3
Definition ojph_arch.h:100
@ X86_CPU_EXT_LEVEL_SSE3
Definition ojph_arch.h:99
@ X86_CPU_EXT_LEVEL_AVX2FMA
Definition ojph_arch.h:105
const ui32 byte_alignment
Definition ojph_arch.h:197
static si32 ojph_round(float val)
Definition ojph_arch.h:171
size_t calc_aligned_size(size_t size)
Definition ojph_arch.h:208
OJPH_EXPORT int get_cpu_ext_level()
T * align_ptr(T *ptr)
Definition ojph_arch.h:218
static ui32 population_count(ui32 val)
Definition ojph_arch.h:110
static si32 ojph_trunc(float val)
Definition ojph_arch.h:183
static ui32 count_trailing_zeros(ui32 val)
Definition ojph_arch.h:152
static ui32 count_leading_zeros(ui32 val)
Definition ojph_arch.h:130
int32_t si32
Definition ojph_defs.h:55
const ui32 log_byte_alignment
Definition ojph_arch.h:198
uint32_t ui32
Definition ojph_defs.h:54
#define OJPH_EXPORT
Definition ojph_arch.h:85