mirror of
https://github.com/Cykooz/fast_image_resize.git
synced 2026-10-08 01:11:09 +00:00
Fixed U8x4 initialisation inside modules for ARM Neon.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user