Merge pull request #22292 from hanliutong:fix

[GSoC] Fix compilation errors and warnings when using MSVC on Windows.

* Pass reference of the argument.

* Add some cast to suppress warnings.
pull/22300/head
HAN Liutong 2 years ago committed by GitHub
parent 47f30a04d2
commit 2bd72af2ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      modules/core/include/opencv2/core/hal/intrin.hpp
  2. 6
      modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp
  3. 8
      modules/core/test/test_intrin_utils.hpp

@ -714,7 +714,7 @@ namespace CV__SIMD_NAMESPACE {
return a - b; \ return a - b; \
} \ } \
template<typename... Args> \ template<typename... Args> \
inline _Tpvec v_add(_Tpvec f1, _Tpvec f2, Args... vf) { \ inline _Tpvec v_add(const _Tpvec& f1, const _Tpvec& f2, const Args&... vf) { \
return v_add(f1 + f2, vf...); \ return v_add(f1 + f2, vf...); \
} }
@ -765,7 +765,7 @@ namespace CV__SIMD_NAMESPACE {
return a * b; \ return a * b; \
} \ } \
template<typename... Args> \ template<typename... Args> \
inline _Tpvec v_mul(_Tpvec f1, _Tpvec f2, Args... vf) { \ inline _Tpvec v_mul(const _Tpvec& f1, const _Tpvec& f2, const Args&... vf) { \
return v_mul(f1 * f2, vf...); \ return v_mul(f1 * f2, vf...); \
} }
OPENCV_HAL_WRAP_BIN_OP_MUL(v_uint8) OPENCV_HAL_WRAP_BIN_OP_MUL(v_uint8)
@ -820,7 +820,7 @@ namespace CV__SIMD_NAMESPACE {
//////////// get0 //////////// //////////// get0 ////////////
#define OPENCV_HAL_WRAP_GRT0_INT(_Tpvec, _Tp) \ #define OPENCV_HAL_WRAP_GRT0_INT(_Tpvec, _Tp) \
inline _Tp v_get0(v_##_Tpvec v) \ inline _Tp v_get0(const v_##_Tpvec& v) \
{ \ { \
return v.get0(); \ return v.get0(); \
} }
@ -839,7 +839,7 @@ namespace CV__SIMD_NAMESPACE {
#endif #endif
#define OPENCV_HAL_WRAP_EXTRACT(_Tpvec, _Tp, vl) \ #define OPENCV_HAL_WRAP_EXTRACT(_Tpvec, _Tp, vl) \
inline _Tp v_extract_highest(_Tpvec v) \ inline _Tp v_extract_highest(const _Tpvec& v) \
{ \ { \
return v_extract_n<vl-1>(v); \ return v_extract_n<vl-1>(v); \
} }
@ -858,7 +858,7 @@ namespace CV__SIMD_NAMESPACE {
#endif #endif
#define OPENCV_HAL_WRAP_BROADCAST(_Tpvec) \ #define OPENCV_HAL_WRAP_BROADCAST(_Tpvec) \
inline _Tpvec v_broadcast_highest(_Tpvec v) \ inline _Tpvec v_broadcast_highest(const _Tpvec& v) \
{ \ { \
return v_broadcast_element<VTraits<_Tpvec>::nlanes-1>(v); \ return v_broadcast_element<VTraits<_Tpvec>::nlanes-1>(v); \
} }
@ -868,7 +868,7 @@ namespace CV__SIMD_NAMESPACE {
OPENCV_HAL_WRAP_BROADCAST(v_float32) OPENCV_HAL_WRAP_BROADCAST(v_float32)
#endif //CV_SIMD #endif //!CV_SIMD_SCALABLE
//! @cond IGNORED //! @cond IGNORED

@ -123,7 +123,7 @@ struct VTraits<v_float64>
//////////// get0 //////////// //////////// get0 ////////////
#define OPENCV_HAL_IMPL_RVV_GRT0_INT(_Tpvec, _Tp) \ #define OPENCV_HAL_IMPL_RVV_GRT0_INT(_Tpvec, _Tp) \
inline _Tp v_get0(v_##_Tpvec v) \ inline _Tp v_get0(const v_##_Tpvec& v) \
{ \ { \
return vmv_x(v); \ return vmv_x(v); \
} }
@ -137,12 +137,12 @@ OPENCV_HAL_IMPL_RVV_GRT0_INT(int32, int)
OPENCV_HAL_IMPL_RVV_GRT0_INT(uint64, uint64) OPENCV_HAL_IMPL_RVV_GRT0_INT(uint64, uint64)
OPENCV_HAL_IMPL_RVV_GRT0_INT(int64, int64) OPENCV_HAL_IMPL_RVV_GRT0_INT(int64, int64)
inline float v_get0(v_float32 v) \ inline float v_get0(const v_float32& v) \
{ \ { \
return vfmv_f(v); \ return vfmv_f(v); \
} }
#if CV_SIMD_SCALABLE_64F #if CV_SIMD_SCALABLE_64F
inline double v_get0(v_float64 v) \ inline double v_get0(const v_float64& v) \
{ \ { \
return vfmv_f(v); \ return vfmv_f(v); \
} }

@ -1004,7 +1004,7 @@ template<typename R> struct TheTest
TheTest & test_reduce() TheTest & test_reduce()
{ {
Data<R> dataA; Data<R> dataA;
LaneType min = VTraits<R>::vlanes(), max = 0; LaneType min = (LaneType)VTraits<R>::vlanes(), max = 0;
int sum = 0; int sum = 0;
for (int i = 0; i < VTraits<R>::vlanes(); ++i) for (int i = 0; i < VTraits<R>::vlanes(); ++i)
{ {
@ -1016,9 +1016,9 @@ template<typename R> struct TheTest
EXPECT_EQ((LaneType)min, (LaneType)v_reduce_min(a)); EXPECT_EQ((LaneType)min, (LaneType)v_reduce_min(a));
EXPECT_EQ((LaneType)max, (LaneType)v_reduce_max(a)); EXPECT_EQ((LaneType)max, (LaneType)v_reduce_max(a));
EXPECT_EQ((int)(sum), (int)v_reduce_sum(a)); EXPECT_EQ((int)(sum), (int)v_reduce_sum(a));
dataA[0] += VTraits<R>::vlanes(); dataA[0] += (LaneType)VTraits<R>::vlanes();
R an = dataA; R an = dataA;
min = VTraits<R>::vlanes(); min = (LaneType)VTraits<R>::vlanes();
for (int i = 0; i < VTraits<R>::vlanes(); ++i) for (int i = 0; i < VTraits<R>::vlanes(); ++i)
{ {
min = std::min<LaneType>(min, dataA[i]); min = std::min<LaneType>(min, dataA[i]);
@ -1029,7 +1029,7 @@ template<typename R> struct TheTest
TheTest & test_reduce_sad() TheTest & test_reduce_sad()
{ {
Data<R> dataA, dataB(VTraits<R>::vlanes()/2); Data<R> dataA, dataB((LaneType)VTraits<R>::vlanes() /2);
R a = dataA; R a = dataA;
R b = dataB; R b = dataB;
uint sum = 0; uint sum = 0;

Loading…
Cancel
Save