From 6fc926ea4d11efd8025dbed98157e70372293480 Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Tue, 12 Mar 2024 17:38:15 +0300 Subject: [PATCH] Updated RVV intrinsics and test to remove initializer_list --- .../opencv2/core/hal/intrin_rvv_scalable.hpp | 8 -- modules/core/test/test_intrin_utils.hpp | 127 +----------------- 2 files changed, 2 insertions(+), 133 deletions(-) diff --git a/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp b/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp index e2475e0e7d..ceb0fa6429 100644 --- a/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp +++ b/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp @@ -8,9 +8,6 @@ #ifndef OPENCV_HAL_INTRIN_RVV_SCALABLE_HPP #define OPENCV_HAL_INTRIN_RVV_SCALABLE_HPP -#include -#include -#include #include // RVV intrinsics have been renamed in version 0.11, so we need to include @@ -418,11 +415,6 @@ inline void v_store_high(_Tp* ptr, const _Tpvec& a) \ { \ vse##width(ptr, vslidedown_vx_##suffix##m1(vmv(0, vl), a, hvl, vl), hvl); \ } \ -inline _Tpvec v_load(std::initializer_list<_Tp> nScalars) \ -{ \ - assert(nScalars.size() == vl); \ - return vle##width##_v_##suffix##m1(nScalars.begin(), nScalars.size()); \ -} \ template \ _Tpvec v_load_##suffix(Targs... nScalars) \ { \ diff --git a/modules/core/test/test_intrin_utils.hpp b/modules/core/test/test_intrin_utils.hpp index 38b8d10f7b..be4f7beac7 100644 --- a/modules/core/test/test_intrin_utils.hpp +++ b/modules/core/test/test_intrin_utils.hpp @@ -22,130 +22,6 @@ void test_hal_intrin_float16(); #ifndef CV_CPU_OPTIMIZATION_DECLARATIONS_ONLY -template struct Data; -template struct initializer; - -#if CV_SIMD_SCALABLE -template <> struct initializer<128> -{ - template static R init(const Data & d) - { - return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], - d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31], - d[32], d[33], d[34], d[35], d[36], d[37], d[38], d[39], d[40], d[41], d[42], d[43], d[44], d[45], d[46], d[47], - d[48], d[49], d[50], d[51], d[52], d[53], d[54], d[55], d[56], d[57], d[58], d[59], d[60], d[61], d[62], d[63], - d[64], d[65], d[66], d[67], d[68], d[69], d[70], d[71], d[72], d[73], d[74], d[75], d[76], d[77], d[78], d[79], - d[80], d[81], d[82], d[83], d[84], d[85], d[86], d[87], d[88], d[89], d[90], d[91], d[92], d[93], d[94], d[95], - d[96], d[97], d[98], d[99], d[100], d[101], d[102], d[103], d[104], d[105], d[106], d[107], d[108], d[109], d[110], d[111], - d[112], d[113], d[114], d[115], d[116], d[117], d[118], d[119], d[120], d[121], d[122], d[123], d[124], d[125], d[126], d[127]}); - } -}; - -template <> struct initializer<64> -{ - template static R init(const Data & d) - { - return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], - d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31], - d[32], d[33], d[34], d[35], d[36], d[37], d[38], d[39], d[40], d[41], d[42], d[43], d[44], d[45], d[46], d[47], - d[48], d[49], d[50], d[51], d[52], d[53], d[54], d[55], d[56], d[57], d[58], d[59], d[60], d[61], d[62], d[63]}); - } -}; - -template <> struct initializer<32> -{ - template static R init(const Data & d) - { - return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], - d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31]}); - } -}; - -template <> struct initializer<16> -{ - template static R init(const Data & d) - { - return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]}); - } -}; - -template <> struct initializer<8> -{ - template static R init(const Data & d) - { - return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]}); - } -}; - -template <> struct initializer<4> -{ - template static R init(const Data & d) - { - return v_load({d[0], d[1], d[2], d[3]}); - } -}; - -template <> struct initializer<2> -{ - template static R init(const Data & d) - { - return v_load({d[0], d[1]}); - } -}; - -#else -template <> struct initializer<64> -{ - template static R init(const Data & d) - { - return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], - d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31], - d[32], d[33], d[34], d[35], d[36], d[37], d[38], d[39], d[40], d[41], d[42], d[43], d[44], d[45], d[46], d[47], - d[48], d[49], d[50], d[51], d[52], d[53], d[54], d[55], d[56], d[57], d[58], d[59], d[60], d[61], d[62], d[63]); - } -}; - -template <> struct initializer<32> -{ - template static R init(const Data & d) - { - return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], - d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31]); - } -}; - -template <> struct initializer<16> -{ - template static R init(const Data & d) - { - return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]); - } -}; - -template <> struct initializer<8> -{ - template static R init(const Data & d) - { - return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]); - } -}; - -template <> struct initializer<4> -{ - template static R init(const Data & d) - { - return R(d[0], d[1], d[2], d[3]); - } -}; - -template <> struct initializer<2> -{ - template static R init(const Data & d) - { - return R(d[0], d[1]); - } -}; -#endif //================================================================================================== template struct Data @@ -168,7 +44,8 @@ template struct Data } operator R () const { - return initializer::max_nlanes>().init(*this); + CV_Assert(VTraits::vlanes() <= VTraits::max_nlanes); + return vx_load(d); } Data & operator=(const R & r) {