From 03be0caa72261696684fe9f0321371389f6c83df Mon Sep 17 00:00:00 2001 From: kokke Date: Wed, 2 May 2018 15:23:47 +0200 Subject: Commenting reason for extra calls to xtime() --- aes.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/aes.c b/aes.c index 3e0b3e3..e68c6b0 100644 --- a/aes.c +++ b/aes.c @@ -319,6 +319,9 @@ static void MixColumns(state_t* state) } // Multiply is used to multiply numbers in the field GF(2^8) +// Note: The last call to xtime() is unneeded, but often ends up generating a smaller binary +// The compiler seems to be able to vectorize the operation better this way. +// See https://github.com/kokke/tiny-AES-c/pull/34 #if MULTIPLY_AS_A_FUNCTION static uint8_t Multiply(uint8_t x, uint8_t y) { @@ -326,7 +329,7 @@ static uint8_t Multiply(uint8_t x, uint8_t y) ((y>>1 & 1) * xtime(x)) ^ ((y>>2 & 1) * xtime(xtime(x))) ^ ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ - ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))); + ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))); /* this last call to xtime() can be omitted */ } #else #define Multiply(x, y) \ -- cgit v1.2.3