Fixed U8x4 initialisation inside modules for ARM Neon.

This commit is contained in:
Kirill Kuzminykh
2023-12-17 23:22:16 +03:00
parent 461d2f9cb3
commit 1b6f61a48f
3 changed files with 10 additions and 10 deletions
+4 -4
View File
@@ -172,13 +172,13 @@ unsafe fn divide_alpha_row(src_row: &[U8x4], dst_row: &mut [U8x4]) {
if !src_remainder.is_empty() {
let dst_reminder = dst_chunks.into_remainder();
let mut src_pixels = [U8x4::new(0); 8];
let mut src_pixels = [U8x4::new([0; 4]); 8];
src_pixels
.iter_mut()
.zip(src_remainder)
.for_each(|(d, s)| *d = *s);
let mut dst_pixels = [U8x4::new(0); 8];
let mut dst_pixels = [U8x4::new([0; 4]); 8];
let mut pixels = neon_utils::load_deintrel_u8x8x4(src_pixels.as_slice(), 0);
pixels = divide_alpha_8_pixels(pixels);
let dst_ptr = dst_pixels.as_mut_ptr() as *mut u8;
@@ -218,13 +218,13 @@ unsafe fn divide_alpha_row_inline(row: &mut [U8x4]) {
let tail = chunks.into_remainder();
if !tail.is_empty() {
let mut src_pixels = [U8x4::new(0); 8];
let mut src_pixels = [U8x4::new([0; 4]); 8];
src_pixels
.iter_mut()
.zip(tail.iter())
.for_each(|(d, s)| *d = *s);
let mut dst_pixels = [U8x4::new(0); 8];
let mut dst_pixels = [U8x4::new([0; 4]); 8];
let mut pixels = neon_utils::load_deintrel_u8x8x4(src_pixels.as_slice(), 0);
pixels = divide_alpha_8_pixels(pixels);
let dst_ptr = dst_pixels.as_mut_ptr() as *mut u8;
+4 -4
View File
@@ -118,13 +118,13 @@ unsafe fn divide_alpha_row(src_row: &[U8x4], dst_row: &mut [U8x4]) {
if !src_remainder.is_empty() {
let dst_reminder = dst_chunks.into_remainder();
let mut src_buffer = [U8x4::new(0); 4];
let mut src_buffer = [U8x4::new([0; 4]); 4];
src_buffer
.iter_mut()
.zip(src_remainder)
.for_each(|(d, s)| *d = *s);
let mut dst_buffer = [U8x4::new(0); 4];
let mut dst_buffer = [U8x4::new([0; 4]); 4];
let src_pixels = v128_load(src_buffer.as_ptr() as *const v128);
let dst_pixels = divide_alpha_4_pixels(src_pixels);
v128_store(dst_buffer.as_mut_ptr() as *mut v128, dst_pixels);
@@ -149,13 +149,13 @@ unsafe fn divide_alpha_row_inplace(row: &mut [U8x4]) {
let tail = chunks.into_remainder();
if !tail.is_empty() {
let mut src_buffer = [U8x4::new(0); 4];
let mut src_buffer = [U8x4::new([0; 4]); 4];
src_buffer
.iter_mut()
.zip(tail.iter())
.for_each(|(d, s)| *d = *s);
let mut dst_buffer = [U8x4::new(0); 4];
let mut dst_buffer = [U8x4::new([0; 4]); 4];
let src_pixels = v128_load(src_buffer.as_ptr() as *const v128);
let dst_pixels = divide_alpha_4_pixels(src_pixels);
v128_store(dst_buffer.as_mut_ptr() as *mut v128, dst_pixels);
+2 -2
View File
@@ -185,7 +185,7 @@ unsafe fn horiz_convolution_8u4x(
for i in 0..4 {
let s = vqmovun_s16(vcombine_s16(vqmovn_s32(sss_a[i]), vdup_n_s16(0)));
let s = vreinterpret_u32_u8(s);
dst_rows[i].get_unchecked_mut(dst_x).0 = vget_lane_u32::<0>(s);
dst_rows[i].get_unchecked_mut(dst_x).0 = vget_lane_u32::<0>(s).to_le_bytes();
}
}
}
@@ -297,6 +297,6 @@ unsafe fn horiz_convolution_8u(
let s = vqmovun_s16(vcombine_s16(vqmovn_s32(sss), vdup_n_s16(0)));
let s = vreinterpret_u32_u8(s);
dst_row.get_unchecked_mut(dst_x).0 = vget_lane_u32::<0>(s);
dst_row.get_unchecked_mut(dst_x).0 = vget_lane_u32::<0>(s).to_le_bytes();
}
}