Skip to content

Commit 475099d

Browse files
committed
ASIMD optimizations for lerp functions
1 parent ea025fe commit 475099d

7 files changed

Lines changed: 335 additions & 28 deletions

File tree

include/private/dsp/arch/aarch64/asimd/pmath.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include <private/dsp/arch/aarch64/asimd/pmath/fmop_kx.h>
3434
#include <private/dsp/arch/aarch64/asimd/pmath/fmop_vv.h>
3535
#include <private/dsp/arch/aarch64/asimd/pmath/lanczos.h>
36+
#include <private/dsp/arch/aarch64/asimd/pmath/lerp.h>
3637
#include <private/dsp/arch/aarch64/asimd/pmath/log.h>
3738
#include <private/dsp/arch/aarch64/asimd/pmath/lramp.h>
3839
#include <private/dsp/arch/aarch64/asimd/pmath/minmax.h>

include/private/dsp/arch/aarch64/asimd/pmath/lerp.h

Lines changed: 298 additions & 0 deletions
Large diffs are not rendered by default.

src/main/aarch64/asimd.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,14 @@
516516
EXPORT1(pmix_v2);
517517
EXPORT1(pmix_k1);
518518
EXPORT1(pmix_k2);
519+
520+
EXPORT1(lerp_vvv);
521+
EXPORT1(lerp_vvk);
522+
// EXPORT1(lerp_vkv);
523+
// EXPORT1(lerp_vkk);
524+
// EXPORT1(lerp_kvv);
525+
// EXPORT1(lerp_kvk);
526+
// EXPORT1(lerp_kkv);
519527
}
520528
} /* namespace asimd */
521529
} /* namespace lsp */

src/test/ptest/pmath/lerp_vvk.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,12 @@ namespace lsp
6060
}
6161
)
6262

63-
// IF_ARCH_AARCH64(
64-
// namespace asimd
65-
// {
66-
// void lerp_vvk(float *dst, const float *a, const float *b, float k, size_t count);
67-
// }
68-
// )
63+
IF_ARCH_AARCH64(
64+
namespace asimd
65+
{
66+
void lerp_vvk(float *dst, const float *a, const float *b, float k, size_t count);
67+
}
68+
)
6969

7070
typedef void (* lerp_vvk_t)(float *dst, const float *a, const float *b, float k, size_t count);
7171
}
@@ -113,7 +113,7 @@ PTEST_BEGIN("dsp.pmath", lerp_vvk, 5, 1000)
113113
IF_ARCH_X86(CALL(avx::lerp_vvk_fma3));
114114
IF_ARCH_X86(CALL(avx512::lerp_vvk));
115115
IF_ARCH_ARM(CALL(neon_d32::lerp_vvk));
116-
// IF_ARCH_AARCH64(CALL(asimd::lerp_vvk));
116+
IF_ARCH_AARCH64(CALL(asimd::lerp_vvk));
117117
PTEST_SEPARATOR;
118118
}
119119

src/test/ptest/pmath/lerp_vvv.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,12 @@ namespace lsp
6060
}
6161
)
6262

63-
// IF_ARCH_AARCH64(
64-
// namespace asimd
65-
// {
66-
// void lerp_vvv(float *dst, const float *a, const float *b, const float *k, size_t count);
67-
// }
68-
// )
63+
IF_ARCH_AARCH64(
64+
namespace asimd
65+
{
66+
void lerp_vvv(float *dst, const float *a, const float *b, const float *k, size_t count);
67+
}
68+
)
6969

7070
typedef void (* lerp_vvv_t)(float *dst, const float *a, const float *b, const float *k, size_t count);
7171
}
@@ -114,7 +114,7 @@ PTEST_BEGIN("dsp.pmath", lerp_vvv, 5, 1000)
114114
IF_ARCH_X86(CALL(avx::lerp_vvv_fma3));
115115
IF_ARCH_X86(CALL(avx512::lerp_vvv));
116116
IF_ARCH_ARM(CALL(neon_d32::lerp_vvv));
117-
// IF_ARCH_AARCH64(CALL(asimd::lerp_vvv));
117+
IF_ARCH_AARCH64(CALL(asimd::lerp_vvv));
118118
PTEST_SEPARATOR;
119119
}
120120

src/test/utest/pmath/lerp_vvk.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ namespace lsp
5656
}
5757
)
5858

59-
// IF_ARCH_AARCH64(
60-
// namespace asimd
61-
// {
62-
// void lerp_vvk(float *dst, const float *a, const float *b, float k, size_t count);
63-
// }
64-
// )
59+
IF_ARCH_AARCH64(
60+
namespace asimd
61+
{
62+
void lerp_vvk(float *dst, const float *a, const float *b, float k, size_t count);
63+
}
64+
)
6565

6666
typedef void (* lerp_vvk_t)(float *dst, const float *a, const float *b, float k, size_t count);
6767
}
@@ -120,7 +120,7 @@ UTEST_BEGIN("dsp.pmath", lerp_vvk)
120120
IF_ARCH_X86(CALL(avx::lerp_vvk_fma3, 32));
121121
IF_ARCH_X86(CALL(avx512::lerp_vvk, 64));
122122
IF_ARCH_ARM(CALL(neon_d32::lerp_vvk, 16));
123-
// IF_ARCH_ARM(CALL(asimd::lerp_vvk, 16));
123+
IF_ARCH_ARM(CALL(asimd::lerp_vvk, 16));
124124
}
125125
UTEST_END
126126

src/test/utest/pmath/lerp_vvv.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ namespace lsp
5656
}
5757
)
5858

59-
// IF_ARCH_AARCH64(
60-
// namespace asimd
61-
// {
62-
// void lerp_vvv(float *dst, const float *a, const float *b, const float *k, size_t count);
63-
// }
64-
// )
59+
IF_ARCH_AARCH64(
60+
namespace asimd
61+
{
62+
void lerp_vvv(float *dst, const float *a, const float *b, const float *k, size_t count);
63+
}
64+
)
6565

6666
typedef void (* lerp_vvv_t)(float *dst, const float *a, const float *b, const float *k, size_t count);
6767
}
@@ -122,7 +122,7 @@ UTEST_BEGIN("dsp.pmath", lerp_vvv)
122122
IF_ARCH_X86(CALL(avx::lerp_vvv_fma3, 32));
123123
IF_ARCH_X86(CALL(avx512::lerp_vvv, 64));
124124
IF_ARCH_ARM(CALL(neon_d32::lerp_vvv, 16));
125-
// IF_ARCH_ARM(CALL(asimd::lerp_vvv, 16));
125+
IF_ARCH_ARM(CALL(asimd::lerp_vvv, 16));
126126
}
127127
UTEST_END
128128

0 commit comments

Comments
 (0)