Skip to content

Commit 2610a47

Browse files
committed
core:ppc Fix 2 interleave logic errors in vsx_utils.hpp
When elements are 64 bits, the vec_st_interleave()/vec_ld_deinterleave() doesn't interleave 4 elements correctly. For vec_st_interleave(), following is saved into mem: a0 b0 a1 b1 c0 d0 c1 d1 -> we expected: a0 b0 c0 d0 a1 b1 c1 d1 for vec_ld_deinterleave(), following is loaded into a b c d for memory string { 1 2 3 4 5 6 7 8 }: a: 1 3 b: 2 4 c: 5 7 d: 6 8 -> we expected: a: 1 5 b: 2 6 c: 3 7 d: 4 8 This patch corrects this behavior. Signed-off-by: Simon Guo <wei.guo.simon@gmail.com>
1 parent e89501a commit 2610a47

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

modules/core/include/opencv2/core/vsx_utils.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -797,8 +797,8 @@ FORCE_INLINE(void) vec_st_interleave(const Tvec& a, const Tvec& b, \
797797
const Tvec& c, const Tvec& d, Tp* ptr) \
798798
{ \
799799
st_func(vec_mergeh(a, b), 0, ptr); \
800-
st_func(vec_mergel(a, b), 2, ptr); \
801-
st_func(vec_mergeh(c, d), 4, ptr); \
800+
st_func(vec_mergeh(c, d), 2, ptr); \
801+
st_func(vec_mergel(a, b), 4, ptr); \
802802
st_func(vec_mergel(c, d), 6, ptr); \
803803
} \
804804
FORCE_INLINE(void) vec_ld_deinterleave(const Tp* ptr, Tvec& a, Tvec& b) \
@@ -813,12 +813,12 @@ FORCE_INLINE(void) vec_ld_deinterleave(const Tp* ptr, Tvec& a, Tvec& b, \
813813
{ \
814814
Tvec v0 = ld_func(0, ptr); \
815815
Tvec v1 = ld_func(2, ptr); \
816-
a = vec_mergeh(v0, v1); \
817-
b = vec_mergel(v0, v1); \
818-
v0 = ld_func(4, ptr); \
819-
v1 = ld_func(6, ptr); \
820-
c = vec_mergeh(v0, v1); \
821-
d = vec_mergel(v0, v1); \
816+
Tvec v2 = ld_func(4, ptr); \
817+
Tvec v3 = ld_func(6, ptr); \
818+
a = vec_mergeh(v0, v2); \
819+
b = vec_mergel(v0, v2); \
820+
c = vec_mergeh(v1, v3); \
821+
d = vec_mergel(v1, v3); \
822822
}
823823
VSX_IMPL_ST_D_INTERLEAVE_64(int64, vec_dword2, vsx_ld2, vsx_st2)
824824
VSX_IMPL_ST_D_INTERLEAVE_64(uint64, vec_udword2, vsx_ld2, vsx_st2)

0 commit comments

Comments
 (0)