From df24bd295de672241aeef3da883f3e4b8dd5867d Mon Sep 17 00:00:00 2001 From: HAN Liutong Date: Fri, 23 Sep 2022 11:28:50 +0000 Subject: [PATCH] Fix v_signmask for RISC-V Vector. --- modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp | 2 +- modules/core/test/test_intrin_utils.hpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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 463c010d71..d34aa65c4a 100644 --- a/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp +++ b/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp @@ -1618,7 +1618,7 @@ inline int v_signmask(const _Tpvec& a) \ { \ uint8_t ans[4] = {0}; \ vsm(ans, vmslt(a, 0, VTraits<_Tpvec>::vlanes()), VTraits<_Tpvec>::vlanes()); \ - return *(reinterpret_cast(ans)); \ + return *(reinterpret_cast(ans)) & (((__int128_t)1 << VTraits<_Tpvec>::vlanes()) - 1); \ } \ inline int v_scan_forward(const _Tpvec& a) \ { \ diff --git a/modules/core/test/test_intrin_utils.hpp b/modules/core/test/test_intrin_utils.hpp index c1db4f49a5..2685d6ac55 100644 --- a/modules/core/test/test_intrin_utils.hpp +++ b/modules/core/test/test_intrin_utils.hpp @@ -1081,6 +1081,7 @@ template struct TheTest typedef typename VTraits::lane_type uint_type; Data dataA, dataB(0), dataC, dataD(1), dataE(2); + dataA[0] = std::numeric_limits::max(); dataA[1] *= (LaneType)-1; union {