Use separate counters for 8-fold and single multiplication steps
Compilers are likely to generate shorter assembly for loops of the
form `while( cnt-- ) { ... }` rather than
`for( ; count >= X; count -= X ) { ... }`. (E.g. the latter needs
a subtract+compare+branch after each loop, while the former only
needs decrement+branch).
Signed-off-by: Hanno Becker <hanno.becker@arm.com>
diff --git a/library/bignum.c b/library/bignum.c
index 6088fa1..f06eff0 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -1377,14 +1377,17 @@
mbedtls_mpi_uint c = 0; /* carry */
size_t excess_len = d_len - s_len;
- for( ; s_len >= 8; s_len -= 8 )
+ size_t steps_x8 = s_len / 8;
+ size_t steps_x1 = s_len & 7;
+
+ while( steps_x8-- )
{
MULADDC_X8_INIT
MULADDC_X8_CORE
MULADDC_X8_STOP
}
- for( ; s_len > 0; s_len-- )
+ while( steps_x1-- )
{
MULADDC_X1_INIT
MULADDC_X1_CORE