From dacd23a88ab3f8d2b93742aaf0099d769a6da736 Mon Sep 17 00:00:00 2001 From: Martin Larralde <martin.larralde@embl.de> Date: Fri, 21 Jun 2024 11:35:57 +0200 Subject: [PATCH] Clean code in NEON platform implementation --- lightmotif/src/pli/platform/neon.rs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lightmotif/src/pli/platform/neon.rs b/lightmotif/src/pli/platform/neon.rs index 66f38bf..0a1c9a3 100644 --- a/lightmotif/src/pli/platform/neon.rs +++ b/lightmotif/src/pli/platform/neon.rs @@ -131,10 +131,6 @@ unsafe fn score_f32_neon<A: Alphabet, C: MultipleOf<U16>>( rows: Range<usize>, scores: &mut StripedScores<f32, C>, ) { - use crate::dense::DenseMatrix; - - let zero_u8 = vdupq_n_u8(0); - let zero_f32 = vdupq_n_f32(0.0); // process columns of the striped matrix, any multiple of 16 is supported let data = scores.matrix_mut(); for offset in (0..C::Quotient::USIZE).map(|i| i * <Neon as Backend>::LANES::USIZE) { @@ -142,7 +138,12 @@ unsafe fn score_f32_neon<A: Alphabet, C: MultipleOf<U16>>( // process every position of the sequence data for i in rows.clone() { // reset sums for current position - let mut s = float32x4x4_t(zero_f32, zero_f32, zero_f32, zero_f32); + let mut s = float32x4x4_t( + vdupq_n_f32(0.0), + vdupq_n_f32(0.0), + vdupq_n_f32(0.0), + vdupq_n_f32(0.0), + ); // reset position let mut dataptr = seq.matrix()[i].as_ptr().add(offset); let mut pssmptr = pssm[0].as_ptr(); @@ -150,10 +151,10 @@ unsafe fn score_f32_neon<A: Alphabet, C: MultipleOf<U16>>( for _ in 0..pssm.rows() { // load sequence row let x = vld1q_u8(dataptr as *const u8); - let z = vzipq_u8(x, zero_u8); + let z = vzipq_u8(x, vdupq_n_u8(0)); // transform u8 into u32 - let lo = vzipq_u8(z.0, zero_u8); - let hi = vzipq_u8(z.1, zero_u8); + let lo = vzipq_u8(z.0, vdupq_n_u8(0)); + let hi = vzipq_u8(z.1, vdupq_n_u8(0)); let x1 = vreinterpretq_u32_u8(lo.0); let x2 = vreinterpretq_u32_u8(lo.1); let x3 = vreinterpretq_u32_u8(hi.0); @@ -190,10 +191,6 @@ unsafe fn score_u8_neon<A: Alphabet, C: MultipleOf<U16>>( rows: Range<usize>, scores: &mut StripedScores<u8, C>, ) { - use crate::dense::DenseMatrix; - - let zero_u8 = vdupq_n_u8(0); - let zero_f32 = vdupq_n_f32(0.0); // process columns of the striped matrix, any multiple of 16 is supported let data = scores.matrix_mut(); for offset in (0..C::Quotient::USIZE).map(|i| i * <Neon as Backend>::LANES::USIZE) { -- GitLab