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 463c010d71e2da390bc727d325da70a7b5081b80..d34aa65c4a4b25874c95c8f6e0e6a8de2c3fcb39 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 c1db4f49a5400beebe2fc5326a20ca39f013cf3f..2685d6ac55691a20fa037f46a89aca8c5843400f 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 {