From 60abd8e7d87fe11a05d0cae326321fa6b1e554dd Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Sat, 22 Aug 2026 22:19:26 +0100 Subject: [PATCH] Remove parity branches from arm_sqrt_q15 --- Source/FastMathFunctions/arm_sqrt_q15.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/Source/FastMathFunctions/arm_sqrt_q15.c b/Source/FastMathFunctions/arm_sqrt_q15.c index 73eba0e27..cc8bca3a5 100644 --- a/Source/FastMathFunctions/arm_sqrt_q15.c +++ b/Source/FastMathFunctions/arm_sqrt_q15.c @@ -65,15 +65,11 @@ ARM_DSP_ATTRIBUTE arm_status arm_sqrt_q15( { signBits1 = __CLZ(number) - 17; + /* Force an even normalization shift. */ + signBits1 &= ~1; + /* Shift by the number of signBits1 */ - if ((signBits1 % 2) == 0) - { - number = number << signBits1; - } - else - { - number = number << (signBits1 - 1); - } + number = number << signBits1; /* Start value for 1/sqrt(x) for the Newton iteration */ var1 = sqrt_initial_lut_q15[(number>> 11) - (Q12QUARTER >> 11)]; @@ -100,14 +96,7 @@ ARM_DSP_ATTRIBUTE arm_status arm_sqrt_q15( var1 = ((q15_t) (((q31_t) number * var1) >> 12)); /* Shift the output down accordingly */ - if ((signBits1 % 2) == 0) - { - var1 = var1 >> (signBits1 / 2); - } - else - { - var1 = var1 >> ((signBits1 - 1) / 2); - } + var1 = var1 >> (signBits1 / 2); *pOut = var1;