17 static inline void expf_v(
float *x,
size_t n)
21#if defined(__AVX512F__)
22 simd_end = n - (n % 16);
23#pragma omp parallel for schedule(static) if (n > 65536 && !omp_in_parallel())
24 for (ptrdiff_t i = 0; i < (ptrdiff_t)(simd_end); i += 16)
26 __m512 x_512 = _mm512_loadu_ps(x + i);
27 __m512 res = Sleef_expf16_u10avx512f(x_512);
28 _mm512_storeu_ps(x + i, res);
31#elif defined(__AVX2__)
32 simd_end = n - (n % 8);
33#pragma omp parallel for schedule(static) if (n > 65536 && !omp_in_parallel())
34 for (ptrdiff_t i = 0; i < (ptrdiff_t)(simd_end); i += 8)
36 __m256 x_256 = _mm256_loadu_ps(x + i);
37 __m256 res = Sleef_expf8_u10avx2(x_256);
38 _mm256_storeu_ps(x + i, res);
41#elif defined(__SSE2__)
42 simd_end = n - (n % 4);
43#pragma omp parallel for schedule(static) if (n > 65536 && !omp_in_parallel())
44 for (ptrdiff_t i = 0; i < (ptrdiff_t)(simd_end); i += 4)
46 __m128 x_128 = _mm_loadu_ps(x + i);
47 __m128 res = Sleef_expf4_u10sse2(x_128);
48 _mm_storeu_ps(x + i, res);
52 for (
size_t i = simd_end; i < n; ++i)
54 x[i] = Sleef_expf_u10(x[i]);
59 inline void logf_v(
float *x,
size_t n)
63#if defined(__AVX512F__)
64 simd_end = n - (n % 16);
65#pragma omp parallel for schedule(static) if (n > 65536 && !omp_in_parallel())
66 for (ptrdiff_t i = 0; i < (ptrdiff_t)(simd_end); i += 16)
68 __m512 x_512 = _mm512_loadu_ps(x + i);
69 __m512 res = Sleef_logf16_u10avx512f(x_512);
70 _mm512_storeu_ps(x + i, res);
73#elif defined(__AVX2__)
74 simd_end = n - (n % 8);
75#pragma omp parallel for schedule(static) if (n > 65536 && !omp_in_parallel())
76 for (ptrdiff_t i = 0; i < (ptrdiff_t)(simd_end); i += 8)
78 __m256 x_256 = _mm256_loadu_ps(x + i);
79 __m256 res = Sleef_logf8_u10avx2(x_256);
80 _mm256_storeu_ps(x + i, res);
83#elif defined(__SSE__) || defined(_M_AMD64) || defined(_M_X64)
84 simd_end = n - (n % 4);
85#pragma omp parallel for schedule(static) if (n > 65536 && !omp_in_parallel())
86 for (ptrdiff_t i = 0; i < (ptrdiff_t)(simd_end); i += 4)
88 __m128 x_128 = _mm_loadu_ps(x + i);
89 __m128 res = Sleef_logf4_u10sse2(x_128);
90 _mm_storeu_ps(x + i, res);
93 for (
size_t i = simd_end; i < n; ++i)
95 x[i] = Sleef_logf_u10(x[i]);
static void expf_v(float *x, size_t n)
In-place vectorized exp: x[i] = exp(x[i]) for all i.
Definition VectorMath.h:17
void logf_v(float *x, size_t n)
In-place vectorized log: x[i] = log(x[i]) for all i.
Definition VectorMath.h:59