[CRYPTO] camellia: Code cleanup

Optimize GETU32 to use 4-byte memcpy (modern gcc will convert
such memcpy to single move instruction on i386).
Original GETU32 did four byte fetches, and shifted/XORed those.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Acked-by: Noriaki TAKAMIYA <takamiya@po.ntts.co.jp>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Denys Vlasenko 2007-11-06 22:13:40 +08:00 committed by Herbert Xu
parent 3a5e5f8108
commit 1ce73e8d6d

View file

@ -330,10 +330,12 @@ static const u32 camellia_sp4404[256] = {
* macros * macros
*/ */
# define GETU32(pt) (((u32)(pt)[0] << 24) \ # define GETU32(v, pt) \
^ ((u32)(pt)[1] << 16) \ do { \
^ ((u32)(pt)[2] << 8) \ /* latest breed of gcc is clever enough to use move */ \
^ ((u32)(pt)[3])) memcpy(&(v), (pt), 4); \
(v) = be32_to_cpu(v); \
} while(0)
/* rotation right shift 1byte */ /* rotation right shift 1byte */
#define ROR8(x) (((x) >> 8) + ((x) << 24)) #define ROR8(x) (((x) >> 8) + ((x) << 24))
@ -433,10 +435,11 @@ static void camellia_setup128(const unsigned char *key, u32 *subkey)
/** /**
* k == kll || klr || krl || krr (|| is concatination) * k == kll || klr || krl || krr (|| is concatination)
*/ */
kll = GETU32(key ); GETU32(kll, key );
klr = GETU32(key + 4); GETU32(klr, key + 4);
krl = GETU32(key + 8); GETU32(krl, key + 8);
krr = GETU32(key + 12); GETU32(krr, key + 12);
/** /**
* generate KL dependent subkeys * generate KL dependent subkeys
*/ */
@ -687,8 +690,8 @@ static void camellia_setup128(const unsigned char *key, u32 *subkey)
static void camellia_setup256(const unsigned char *key, u32 *subkey) static void camellia_setup256(const unsigned char *key, u32 *subkey)
{ {
u32 kll,klr,krl,krr; /* left half of key */ u32 kll, klr, krl, krr; /* left half of key */
u32 krll,krlr,krrl,krrr; /* right half of key */ u32 krll, krlr, krrl, krrr; /* right half of key */
u32 il, ir, t0, t1, w0, w1; /* temporary variables */ u32 il, ir, t0, t1, w0, w1; /* temporary variables */
u32 kw4l, kw4r, dw, tl, tr; u32 kw4l, kw4r, dw, tl, tr;
u32 subL[34]; u32 subL[34];
@ -698,14 +701,14 @@ static void camellia_setup256(const unsigned char *key, u32 *subkey)
* key = (kll || klr || krl || krr || krll || krlr || krrl || krrr) * key = (kll || klr || krl || krr || krll || krlr || krrl || krrr)
* (|| is concatination) * (|| is concatination)
*/ */
kll = GETU32(key ); GETU32(kll, key );
klr = GETU32(key + 4); GETU32(klr, key + 4);
krl = GETU32(key + 8); GETU32(krl, key + 8);
krr = GETU32(key + 12); GETU32(krr, key + 12);
krll = GETU32(key + 16); GETU32(krll, key + 16);
krlr = GETU32(key + 20); GETU32(krlr, key + 20);
krrl = GETU32(key + 24); GETU32(krrl, key + 24);
krrr = GETU32(key + 28); GETU32(krrr, key + 28);
/* generate KL dependent subkeys */ /* generate KL dependent subkeys */
/* kw1 */ /* kw1 */