diff --git a/adapters/opencv/kleidicv_hal.cpp b/adapters/opencv/kleidicv_hal.cpp index 860186eb092cc26363b95755aeb6296be7335107..81bedaadb7a016535287273dc112cdd8891a7f5f 100644 --- a/adapters/opencv/kleidicv_hal.cpp +++ b/adapters/opencv/kleidicv_hal.cpp @@ -1021,9 +1021,9 @@ int compare_u8(const uchar *src1_data, size_t src1_step, const uchar *src2_data, switch (operation) { #if KLEIDICV_ENABLE_ALL_OPENCV_HAL case cv::CMP_EQ: - return convert_error( - kleidicv_compare_equal_u8(src1_data, src1_step, src2_data, src2_step, - dst_data, dst_step, width, height)); + return convert_error(kleidicv_thread_compare_equal_u8( + src1_data, src1_step, src2_data, src2_step, dst_data, dst_step, width, + height, mt)); #endif case cv::CMP_GT: return convert_error(kleidicv_thread_compare_greater_u8( diff --git a/kleidicv/src/arithmetics/compare_api.cpp b/kleidicv/src/arithmetics/compare_api.cpp index 011005b5ee3653a3f64c7ceb4a9ad693cf413c7c..10daeb475e28d97278dff854c46ca20c8973810b 100644 --- a/kleidicv/src/arithmetics/compare_api.cpp +++ b/kleidicv/src/arithmetics/compare_api.cpp @@ -62,7 +62,7 @@ kleidicv_error_t compare_greater(const ScalarType *src_a, size_t src_a_stride, KLEIDICV_MULTIVERSION_C_API( \ name, &kleidicv::neon::compare_greater, \ KLEIDICV_SVE2_IMPL_IF(&kleidicv::sve2::compare_greater), \ - &kleidicv::sme2::compare_greater) + KLEIDICV_SME2_IMPL_IF(&kleidicv::sme2::compare_greater)) KLEIDICV_DEFINE_CMP_EQ_API(kleidicv_compare_equal_u8, uint8_t); KLEIDICV_DEFINE_CMP_GT_API(kleidicv_compare_greater_u8, uint8_t); diff --git a/kleidicv/src/arithmetics/compare_sc.h b/kleidicv/src/arithmetics/compare_sc.h index cdb2a7a514c574fcf4bbded1f618ee75fdf21e4a..96f8ecaee41369cdeed273f896164189f5f3bbc9 100644 --- a/kleidicv/src/arithmetics/compare_sc.h +++ b/kleidicv/src/arithmetics/compare_sc.h @@ -25,10 +25,8 @@ class ComparatorEqual : public UnrollTwice { VectorType vector_path(ContextType ctx, VectorType src_a, VectorType src_b) KLEIDICV_STREAMING_COMPATIBLE { svbool_t pg = ctx.predicate(); - VectorType result1 = sveor_x(pg, src_a, src_b); - VectorType result2 = svcnot_x(pg, result1); - svint8_t result3 = svqneg_x(pg, VecTraits::svreinterpret(result2)); - return SignedVecTraits::svreinterpret(result3); + svbool_t predicate = svcmpeq(pg, src_a, src_b); + return svsel(predicate, VecTraits::svdup(255), VecTraits::svdup(0)); } // NOLINTEND(readability-make-member-function-const) }; // end of class ComparatorEqual @@ -48,10 +46,8 @@ class ComparatorGreater : public UnrollTwice { VectorType vector_path(ContextType ctx, VectorType src_a, VectorType src_b) KLEIDICV_STREAMING_COMPATIBLE { svbool_t pg = ctx.predicate(); - VectorType diff = VecTraits::svhsub(pg, src_b, src_a); - svint8_t shift_right = - SignedVecTraits::svasr_n(pg, VecTraits::svreinterpret(diff), 7); - return SignedVecTraits::svreinterpret(shift_right); + svbool_t predicate = svcmpgt(pg, src_a, src_b); + return svsel(predicate, VecTraits::svdup(255), VecTraits::svdup(0)); } // NOLINTEND(readability-make-member-function-const) }; // end of class ComparatorGreater