Skip to content

Commit

Permalink
Add missing ”v_popcount“ for RVV and enable tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
hanliutong committed Jul 11, 2023
1 parent c982be3 commit a008180
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
9 changes: 9 additions & 0 deletions modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1651,6 +1651,10 @@ inline v_uint32 v_popcount(const v_uint32& a)
{
return v_hadd(v_hadd(v_popcount(vreinterpret_u8m1(a))));
}
inline v_uint64 v_popcount(const v_uint64& a)
{
return v_hadd(v_hadd(v_hadd(v_popcount(vreinterpret_u8m1(a)))));
}

inline v_uint8 v_popcount(const v_int8& a)
{
Expand All @@ -1664,6 +1668,11 @@ inline v_uint32 v_popcount(const v_int32& a)
{
return v_popcount(v_abs(a));\
}
inline v_uint64 v_popcount(const v_int64& a)
{
// max(0 - a) is used, since v_abs does not support 64-bit integers.
return v_popcount(v_reinterpret_as_u64(vmax(a, v_sub(v_setzero_s64(), a), VTraits<v_int64>::vlanes())));
}


//////////// SignMask ////////////
Expand Down
2 changes: 2 additions & 0 deletions modules/core/test/test_intrin_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2048,6 +2048,7 @@ void test_hal_intrin_uint64()
.test_rotate<0>().test_rotate<1>()
.test_extract_n<0>().test_extract_n<1>()
.test_extract_highest()
.test_popcount()
//.test_broadcast_element<0>().test_broadcast_element<1>()
;
}
Expand All @@ -2069,6 +2070,7 @@ void test_hal_intrin_int64()
.test_extract_highest()
//.test_broadcast_element<0>().test_broadcast_element<1>()
.test_cvt64_double()
.test_popcount()
;
}

Expand Down

0 comments on commit a008180

Please sign in to comment.