Skip to content

Commit 389dd21

Browse files
committed
Setup simd intrinsic wrapper for pow
1 parent 28536b3 commit 389dd21

File tree

11 files changed

+82
-64
lines changed

11 files changed

+82
-64
lines changed

ccmath_internal_headers.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,20 +230,25 @@ set(ccmath_internal_math_runtime_func_headers
230230
##########################################
231231
set(ccmath_internal_math_runtime_simd_func_impl_avx_headers
232232
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/avx/sqrt.hpp
233+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/avx/pow.hpp
233234
)
234235

235236

236237
### math/runtime/Simd/Func/Impl/Avx2 headers
237238
##########################################
238239
set(ccmath_internal_math_runtime_simd_func_impl_avx2_headers
239240
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/avx2/sqrt.hpp
241+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/avx2/pow.hpp
242+
240243
)
241244

242245

243246
### math/runtime/Simd/Func/Impl/Avx512 headers
244247
##########################################
245248
set(ccmath_internal_math_runtime_simd_func_impl_avx512_headers
246249
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/avx512/sqrt.hpp
250+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/avx512/pow.hpp
251+
247252
)
248253

249254

@@ -258,41 +263,52 @@ set(ccmath_internal_math_runtime_simd_func_impl_neon_headers
258263
##########################################
259264
set(ccmath_internal_math_runtime_simd_func_impl_scalar_headers
260265
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/scalar/sqrt.hpp
266+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/scalar/pow.hpp
267+
261268
)
262269

263270

264271
### math/runtime/Simd/Func/Impl/Sse2 headers
265272
##########################################
266273
set(ccmath_internal_math_runtime_simd_func_impl_sse2_headers
267274
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/sse2/sqrt.hpp
275+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/sse2/pow.hpp
276+
268277
)
269278

270279

271280
### math/runtime/Simd/Func/Impl/Sse3 headers
272281
##########################################
273282
set(ccmath_internal_math_runtime_simd_func_impl_sse3_headers
274283
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/sse3/sqrt.hpp
284+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/sse3/pow.hpp
285+
275286
)
276287

277288

278289
### math/runtime/Simd/Func/Impl/Sse4 headers
279290
##########################################
280291
set(ccmath_internal_math_runtime_simd_func_impl_sse4_headers
281292
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/sse4/sqrt.hpp
293+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/sse4/pow.hpp
294+
282295
)
283296

284297

285298
### math/runtime/Simd/Func/Impl/Ssse3 headers
286299
##########################################
287300
set(ccmath_internal_math_runtime_simd_func_impl_ssse3_headers
288301
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/ssse3/sqrt.hpp
302+
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/ssse3/pow.hpp
303+
289304
)
290305

291306

292307
### math/runtime/Simd/Func/Impl/Vector_Size headers
293308
##########################################
294309
set(ccmath_internal_math_runtime_simd_func_impl_vector_size_headers
295310
${CMAKE_CURRENT_SOURCE_DIR}/include/ccmath/internal/math/runtime/simd/func/impl/vector_size/sqrt.hpp
311+
296312
)
297313

298314

include/ccmath/internal/math/runtime/simd/func/impl/avx/pow.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@
1717
namespace ccm::intrin
1818
{
1919

20-
CCM_ALWAYS_INLINE simd<float, abi::avx> sqrt(simd<float, abi::avx> const & a)
20+
CCM_ALWAYS_INLINE simd<float, abi::avx> pow(simd<float, abi::avx> const & a, simd<float, abi::avx> const & b)
2121
{
2222
// NOLINTNEXTLINE(modernize-return-braced-init-list)
23-
return simd<float, abi::avx>(_mm256_sqrt_ps(a.get()));
23+
return simd<float, abi::avx>(_mm256_pow_ps(a.get(), b.get()));
2424
}
2525

26-
CCM_ALWAYS_INLINE simd<double, abi::avx> sqrt(simd<double, abi::avx> const & a)
26+
CCM_ALWAYS_INLINE simd<double, abi::avx> pow(simd<double, abi::avx> const & a, simd<double, abi::avx> const & b)
2727
{
2828
// NOLINTNEXTLINE(modernize-return-braced-init-list)
29-
return simd<double, abi::avx>(_mm256_sqrt_pd(a.get()));
29+
return simd<double, abi::avx>(_mm256_pow_pd(a.get(), b.get()));
3030
}
3131

3232
} // namespace ccm::intrin

include/ccmath/internal/math/runtime/simd/func/impl/avx512/pow.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ namespace ccm::intrin
1919
CCM_ALWAYS_INLINE simd<float, abi::avx512> pow(simd<float, abi::avx512> const & a, simd<float, abi::avx512> const & b)
2020
{
2121
// NOLINTNEXTLINE(modernize-return-braced-init-list)
22-
return simd<float, abi::avx2>(_mm256_pow_ps(a.get(), b.get()));
22+
return simd<float, abi::avx2>(_mm512_pow_ps(a.get(), b.get()));
2323
}
2424

2525
CCM_ALWAYS_INLINE simd<double, abi::avx512> pow(simd<double, abi::avx512> const & a, simd<double, abi::avx512> const & b)
2626
{
2727
// NOLINTNEXTLINE(modernize-return-braced-init-list)
28-
return simd<double, abi::avx2>(_mm256_pow_pd(a.get(), b.get()));
28+
return simd<double, abi::avx2>(_mm512_pow_pd(a.get(), b.get()));
2929

3030
}
3131

include/ccmath/internal/math/runtime/simd/func/impl/neon/pow.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
#pragma once
1212

13+
// TODO: Implement pow for neon
14+
1315
#include "ccmath/internal/math/runtime/simd/simd.hpp"
1416

1517
#ifdef CCMATH_HAS_SIMD

include/ccmath/internal/math/runtime/simd/func/impl/scalar/pow.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
#pragma once
1212

13-
#include "ccmath/internal/math/generic/func/power/sqrt_gen.hpp"
13+
#include "ccmath/internal/math/generic/func/power/pow_gen.hpp"
1414
#include "ccmath/internal/math/runtime/simd/simd.hpp"
1515

1616
namespace ccm::intrin
1717
{
1818
template <class T>
19-
CCM_ALWAYS_INLINE CCM_GPU_HOST_DEVICE simd<T, abi::scalar> sqrt(simd<T, abi::scalar> const& a)
19+
CCM_ALWAYS_INLINE CCM_GPU_HOST_DEVICE simd<T, abi::scalar> pow(simd<T, abi::scalar> const& a, simd<T, abi::scalar> const& b)
2020
{
21-
return simd<T, abi::scalar>(ccm::gen::sqrt_gen(a.get()));
21+
return simd<T, abi::scalar>(gen::pow_gen(a.get(), b.get()));
2222
}
2323
} // namespace ccm::intrin

include/ccmath/internal/math/runtime/simd/func/impl/sse2/pow.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
#ifdef CCMATH_HAS_SIMD_SSE2
1717
namespace ccm::intrin
1818
{
19-
CCM_ALWAYS_INLINE simd<float, abi::sse2> sqrt(simd<float, abi::sse2> const & a)
19+
CCM_ALWAYS_INLINE simd<float, abi::sse2> pow(simd<float, abi::sse2> const & a, simd<float, abi::sse2> const & b)
2020
{
2121
// NOLINTNEXTLINE(modernize-return-braced-init-list)
22-
return simd<float, abi::sse2>(_mm_sqrt_ps(a.get()));
22+
return simd<float, abi::sse2>(_mm_pow_ps(a.get(), b.get()));
2323
}
2424

25-
CCM_ALWAYS_INLINE simd<double, abi::sse2> sqrt(simd<double, abi::sse2> const & a)
25+
CCM_ALWAYS_INLINE simd<double, abi::sse2> pow(simd<double, abi::sse2> const & a, simd<double, abi::sse2> const & b)
2626
{
2727
// NOLINTNEXTLINE(modernize-return-braced-init-list)
28-
return simd<double, abi::sse2>(_mm_sqrt_pd(a.get()));
28+
return simd<double, abi::sse2>(_mm_pow_pd(a.get(), b.get()));
2929
}
3030
} // namespace ccm::intrin
3131

include/ccmath/internal/math/runtime/simd/func/impl/sse3/pow.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
#ifdef CCMATH_HAS_SIMD_SSE3
1717
namespace ccm::intrin
1818
{
19-
CCM_ALWAYS_INLINE simd<float, abi::sse3> sqrt(simd<float, abi::sse3> const & a)
19+
CCM_ALWAYS_INLINE simd<float, abi::sse3> pow(simd<float, abi::sse3> const & a, simd<float, abi::sse3> const & b)
2020
{
2121
// NOLINTNEXTLINE(modernize-return-braced-init-list)
22-
return simd<float, abi::sse3>(_mm_sqrt_ps(a.get()));
22+
return simd<float, abi::sse3>(_mm_pow_ps(a.get(), b.get()));
2323
}
2424

25-
CCM_ALWAYS_INLINE simd<double, abi::sse3> sqrt(simd<double, abi::sse3> const & a)
25+
CCM_ALWAYS_INLINE simd<double, abi::sse3> pow(simd<double, abi::sse3> const & a, simd<double, abi::sse3> const & b)
2626
{
2727
// NOLINTNEXTLINE(modernize-return-braced-init-list)
28-
return simd<double, abi::sse3>(_mm_sqrt_pd(a.get()));
28+
return simd<double, abi::sse3>(_mm_pow_pd(a.get(), b.get()));
2929
}
3030
} // namespace ccm::intrin
3131

include/ccmath/internal/math/runtime/simd/func/impl/sse4/pow.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
#ifdef CCMATH_HAS_SIMD_SSE4
1717
namespace ccm::intrin
1818
{
19-
CCM_ALWAYS_INLINE simd<float, abi::sse4> sqrt(simd<float, abi::sse4> const & a)
19+
CCM_ALWAYS_INLINE simd<float, abi::sse4> pow(simd<float, abi::sse4> const & a, simd<float, abi::sse4> const & b)
2020
{
2121
// NOLINTNEXTLINE(modernize-return-braced-init-list)
22-
return simd<float, abi::sse4>(_mm_sqrt_ps(a.get()));
22+
return simd<float, abi::sse4>(_mm_pow_ps(a.get(), b.get()));
2323
}
2424

25-
CCM_ALWAYS_INLINE simd<double, abi::sse4> sqrt(simd<double, abi::sse4> const & a)
25+
CCM_ALWAYS_INLINE simd<double, abi::sse4> pow(simd<double, abi::sse4> const & a, simd<double, abi::sse4> const & b)
2626
{
2727
// NOLINTNEXTLINE(modernize-return-braced-init-list)
28-
return simd<double, abi::sse4>(_mm_sqrt_pd(a.get()));
28+
return simd<double, abi::sse4>(_mm_pow_pd(a.get(), b.get()));
2929
}
3030
} // namespace ccm::intrin
3131

include/ccmath/internal/math/runtime/simd/func/impl/ssse3/pow.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
#ifdef CCMATH_HAS_SIMD_SSSE3
1717
namespace ccm::intrin
1818
{
19-
CCM_ALWAYS_INLINE simd<float, abi::ssse3> sqrt(simd<float, abi::ssse3> const & a)
19+
CCM_ALWAYS_INLINE simd<float, abi::ssse3> pow(simd<float, abi::ssse3> const & a, simd<float, abi::ssse3> const & b)
2020
{
2121
// NOLINTNEXTLINE(modernize-return-braced-init-list)
22-
return simd<float, abi::ssse3>(_mm_sqrt_ps(a.get()));
22+
return simd<float, abi::ssse3>(_mm_pow_ps(a.get(), b.get()));
2323
}
2424

25-
CCM_ALWAYS_INLINE simd<double, abi::ssse3> sqrt(simd<double, abi::ssse3> const & a)
25+
CCM_ALWAYS_INLINE simd<double, abi::ssse3> pow(simd<double, abi::ssse3> const & a, simd<double, abi::ssse3> const & b)
2626
{
2727
// NOLINTNEXTLINE(modernize-return-braced-init-list)
28-
return simd<double, abi::ssse3>(_mm_sqrt_pd(a.get()));
28+
return simd<double, abi::ssse3>(_mm_pow_pd(a.get(), b.get()));
2929
}
3030
} // namespace ccm::intrin
3131

include/ccmath/internal/math/runtime/simd/func/impl/vector_size/pow.hpp

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)