From 3f0707234f7115d0248d943417144c9eab268e45 Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Tue, 11 Jul 2023 19:23:12 +0300 Subject: [PATCH] risc-v: fix unaligned loads and stores --- modules/core/src/matrix_transform.cpp | 8 ++++---- modules/imgproc/src/demosaicing.cpp | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/modules/core/src/matrix_transform.cpp b/modules/core/src/matrix_transform.cpp index 57fd0c6509..7f1043fbbe 100644 --- a/modules/core/src/matrix_transform.cpp +++ b/modules/core/src/matrix_transform.cpp @@ -603,10 +603,10 @@ flipVert( const uchar* src0, size_t sstep, uchar* dst0, size_t dstep, Size size, { for (; i <= size.width - CV_SIMD_WIDTH; i += CV_SIMD_WIDTH) { - v_int32 t0 = vx_load((int*)(src0 + i)); - v_int32 t1 = vx_load((int*)(src1 + i)); - v_store((int*)(dst0 + i), t1); - v_store((int*)(dst1 + i), t0); + v_int32 t0 = v_reinterpret_as_s32(vx_load(src0 + i)); + v_int32 t1 = v_reinterpret_as_s32(vx_load(src1 + i)); + v_store(dst0 + i, v_reinterpret_as_u8(t1)); + v_store(dst1 + i, v_reinterpret_as_u8(t0)); } } #if CV_STRONG_ALIGNMENT diff --git a/modules/imgproc/src/demosaicing.cpp b/modules/imgproc/src/demosaicing.cpp index 27dfc1520c..627c052aea 100644 --- a/modules/imgproc/src/demosaicing.cpp +++ b/modules/imgproc/src/demosaicing.cpp @@ -184,9 +184,9 @@ public: for( ; bayer <= bayer_end - 18; bayer += 14, dst += 14 ) { - v_uint16x8 r0 = v_load((ushort*)bayer); - v_uint16x8 r1 = v_load((ushort*)(bayer+bayer_step)); - v_uint16x8 r2 = v_load((ushort*)(bayer+bayer_step*2)); + v_uint16x8 r0 = v_reinterpret_as_u16(v_load(bayer)); + v_uint16x8 r1 = v_reinterpret_as_u16(v_load(bayer+bayer_step)); + v_uint16x8 r2 = v_reinterpret_as_u16(v_load(bayer+bayer_step*2)); v_uint16x8 b1 = ((r0 << 8) >> 7) + ((r2 << 8) >> 7); v_uint16x8 b0 = v_rotate_right<1>(b1) + b1; @@ -265,9 +265,9 @@ public: for( ; bayer <= bayer_end - 18; bayer += 14, dst += 42 ) { - v_uint16x8 r0 = v_load((ushort*)bayer); - v_uint16x8 r1 = v_load((ushort*)(bayer+bayer_step)); - v_uint16x8 r2 = v_load((ushort*)(bayer+bayer_step*2)); + v_uint16x8 r0 = v_reinterpret_as_u16(v_load(bayer)); + v_uint16x8 r1 = v_reinterpret_as_u16(v_load(bayer+bayer_step)); + v_uint16x8 r2 = v_reinterpret_as_u16(v_load(bayer+bayer_step*2)); v_uint16x8 b1 = (r0 & masklo) + (r2 & masklo); v_uint16x8 nextb1 = v_rotate_right<1>(b1); @@ -398,9 +398,9 @@ public: for( ; bayer <= bayer_end - 18; bayer += 14, dst += 56 ) { - v_uint16x8 r0 = v_load((ushort*)bayer); - v_uint16x8 r1 = v_load((ushort*)(bayer+bayer_step)); - v_uint16x8 r2 = v_load((ushort*)(bayer+bayer_step*2)); + v_uint16x8 r0 = v_reinterpret_as_u16(v_load(bayer)); + v_uint16x8 r1 = v_reinterpret_as_u16(v_load(bayer+bayer_step)); + v_uint16x8 r2 = v_reinterpret_as_u16(v_load(bayer+bayer_step*2)); v_uint16x8 b1 = (r0 & masklo) + (r2 & masklo); v_uint16x8 nextb1 = v_rotate_right<1>(b1); @@ -494,9 +494,9 @@ public: B G B G | B G B G | B G B G | B G B G */ - v_uint16x8 r0 = v_load((ushort*)bayer); - v_uint16x8 r1 = v_load((ushort*)(bayer+bayer_step)); - v_uint16x8 r2 = v_load((ushort*)(bayer+bayer_step*2)); + v_uint16x8 r0 = v_reinterpret_as_u16(v_load(bayer)); + v_uint16x8 r1 = v_reinterpret_as_u16(v_load(bayer+bayer_step)); + v_uint16x8 r2 = v_reinterpret_as_u16(v_load(bayer+bayer_step*2)); v_uint16x8 b1 = (r0 & masklow) + (r2 & masklow); v_uint16x8 nextb1 = v_rotate_right<1>(b1);