https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119547
--- Comment #6 from 曾治金 <zhijin.zeng at spacemit dot com> --- This issue report in https://github.com/opencv/opencv/issues/26936, and I extract it into my test case. I just check the assemble code and don't run the test case. But if you need to run the opencv application to fix the issue, you can do it as follow. 1. download opencv ``` git clone https://github.com/opencv/opencv.git git reset --hard 46dbc57a865594a5f9141a3a3b6878764df6cc0d ``` 2. apply patch ``` diff --git a/modules/core/src/convert.simd.hpp b/modules/core/src/convert.simd.hpp index 841cb6f684..37a0f5b929 100644 --- a/modules/core/src/convert.simd.hpp +++ b/modules/core/src/convert.simd.hpp @@ -109,7 +109,7 @@ cvt_( const _Ts* src, size_t sstep, _Td* dst, size_t dstep, Size size ) { int j = 0; // Excluding GNU in CV_SIMD_SCALABLE because of "opencv/issues/26936" -#if (CV_SIMD || (CV_SIMD_SCALABLE && !(defined(__GNUC__) && !defined(__clang__))) ) +#if (CV_SIMD || (CV_SIMD_SCALABLE)) const int VECSZ = VTraits<_Twvec>::vlanes()*2; for( ; j < size.width; j += VECSZ ) { diff --git a/modules/core/src/convert_scale.simd.hpp b/modules/core/src/convert_scale.simd.hpp index aa998aed71..cfdf895b2a 100644 --- a/modules/core/src/convert_scale.simd.hpp +++ b/modules/core/src/convert_scale.simd.hpp @@ -92,7 +92,7 @@ template<typename _Ts, typename _Td> inline void cvt_32f( const _Ts* src, size_t sstep, _Td* dst, size_t dstep, Size size, float a, float b ) { -#if (CV_SIMD || (CV_SIMD_SCALABLE && !(defined(__GNUC__) && !defined(__clang__))) ) +#if (CV_SIMD || (CV_SIMD_SCALABLE) ) v_float32 va = vx_setall_f32(a), vb = vx_setall_f32(b); const int VECSZ = VTraits<v_float32>::vlanes()*2; #endif @@ -103,7 +103,7 @@ cvt_32f( const _Ts* src, size_t sstep, _Td* dst, size_t dstep, { int j = 0; // Excluding GNU in CV_SIMD_SCALABLE because of "opencv/issues/26936" -#if (CV_SIMD || (CV_SIMD_SCALABLE && !(defined(__GNUC__) && !defined(__clang__))) ) +#if (CV_SIMD || (CV_SIMD_SCALABLE) ) for( ; j < size.width; j += VECSZ ) { if( j > size.width - VECSZ ) @@ -164,7 +164,7 @@ template<typename _Ts, typename _Td> inline void cvt_64f( const _Ts* src, size_t sstep, _Td* dst, size_t dstep, Size size, double a, double b ) { -#if (CV_SIMD_64F || (CV_SIMD_SCALABLE_64F && !(defined(__GNUC__) && !defined(__clang__))) ) +#if (CV_SIMD_64F || (CV_SIMD_SCALABLE_64F) ) v_float64 va = vx_setall_f64(a), vb = vx_setall_f64(b); const int VECSZ = VTraits<v_float64>::vlanes()*2; #endif @@ -175,7 +175,7 @@ cvt_64f( const _Ts* src, size_t sstep, _Td* dst, size_t dstep, { int j = 0; // Excluding GNU in CV_SIMD_SCALABLE because of "opencv/issues/26936" -#if (CV_SIMD_64F || (CV_SIMD_SCALABLE_64F && !(defined(__GNUC__) && !defined(__clang__))) ) +#if (CV_SIMD_64F || (CV_SIMD_SCALABLE_64F) ) for( ; j < size.width; j += VECSZ ) { if( j > size.width - VECSZ ) ``` 3. build add compile flag in opencv/platforms/linux/flags-riscv64.cmake ``` --param logical-op-non-short-circuit=0 ``` ``` SDK_DIR=/xxx/toolchain-path cd ${WORKSPACE}/opencv BUILD_TYPE=Release BUILD_DIR=latest-4x cmake -G Ninja -B cross-build/$BUILD_DIR-gcc \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_C_COMPILER=$SDK_DIR/bin/riscv64-unknown-linux-gnu-gcc \ -DCMAKE_CXX_COMPILER=$SDK_DIR/bin/riscv64-unknown-linux-gnu-g++ \ -DCMAKE_TOOLCHAIN_FILE=$WORKSPACE/opencv/platforms/linux/riscv64-gcc.toolchain.cmake \ -DCPU_BASELINE=RVV -DCPU_BASELINE_REQUIRE=RVV -DRISCV_RVV_SCALABLE=ON -DWITH_OPENCL=OFF . cmake --build cross-build/$BUILD_DIR-gcc --target opencv_test_core -j10 ``` 4. run ``` export LD_LIBRARY_PATH=/xxxx/lib ./opencv_test_core --gtest_filter="Core_ConvertScale/ElemWiseTest.accuracy/0" ```