2#ifndef MICROKERNEL_BASE_H
3#define MICROKERNEL_BASE_H
14template <
typename T, my_
size_t Bits,
typename Arch>
93#include "fused/microkernels/avx2/avx512_microkernel.h"
95#pragma message "[COMPILE-TIME] Using X86_AVX512F arch"
102#pragma message "[COMPILE-TIME] Using X86_AVX arch"
109#pragma message "[COMPILE-TIME] Using X86_SSE2 arch"
113#elif defined(__ARM_NEON) || defined(__ARM_NEON__)
118 #if defined(TESSERACT_ARM_UARCH_A76)
119 #pragma message "[COMPILE-TIME] Using ARM_NEON_A76 arch (user override)"
121 #elif defined(TESSERACT_ARM_UARCH_A72)
122 #pragma message "[COMPILE-TIME] Using ARM_NEON_A72 arch (user override)"
124 #elif defined(TESSERACT_ARM_UARCH_A55)
125 #pragma message "[COMPILE-TIME] Using ARM_NEON_A55 arch (user override)"
128 #elif defined(__ARM_FEATURE_DOTPROD)
129 #pragma message "[COMPILE-TIME] Using ARM_NEON_A76 arch (auto-detected)"
131 #elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8)
132 #pragma message "[COMPILE-TIME] Using ARM_NEON_A72 arch (auto-detected)"
135 #pragma message "[COMPILE-TIME] Using ARM_NEON_A55 arch (auto-detected)"
140#pragma message "[COMPILE-TIME] Using GENERICARCH arch"
Global configuration for the tesseract tensor library.
#define my_size_t
Size/index type used throughout the library.
Definition config.h:126
#define FORCE_INLINE
Hint the compiler to always inline a function.
Definition config.h:26
constexpr my_size_t DATA_ALIGNAS
Definition microkernel_base.h:145
constexpr my_size_t BITS
Definition microkernel_base.h:141
Definition neon_microkernel.h:10
Definition neon_microkernel.h:13
Definition neon_microkernel.h:16
Definition generic_microkernel.h:9
Definition microkernel_base.h:16
T VecType
Definition microkernel_base.h:18
static FORCE_INLINE void store(T *ptr, VecType val) noexcept
static FORCE_INLINE VecType mul(VecType a, VecType b) noexcept
static FORCE_INLINE VecType min(VecType a, VecType b) noexcept
static constexpr my_size_t simdWidth
Definition microkernel_base.h:17
static FORCE_INLINE VecType load(const T *ptr) noexcept
static FORCE_INLINE VecType set1(T scalar) noexcept
static FORCE_INLINE VecType add(VecType a, VecType b) noexcept
static FORCE_INLINE VecType sub(VecType a, VecType b) noexcept
static FORCE_INLINE VecType div(VecType a, VecType b) noexcept
static FORCE_INLINE VecType max(VecType a, VecType b) noexcept
Definition avx2_microkernel.h:9
Definition sse2_microkernel.h:9