sha3: remove two "small code" codepaths: I can't reproduce code size win on them anymore
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
8e7312e12f
commit
8fb3ab528e
@ -977,14 +977,12 @@ static const uint8_t KECCAK_PI_LANE[25] = {
|
|||||||
14, 22, 9, 6, 1
|
14, 22, 9, 6, 1
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint8_t MOD5[10] = {
|
|
||||||
0, 1, 2, 3, 4, 0, 1, 2, 3, 4
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ARCH_IS_64BIT (sizeof(long) >= sizeof(uint64_t))
|
#define ARCH_IS_64BIT (sizeof(long) >= sizeof(uint64_t))
|
||||||
|
|
||||||
static void KeccakF(uint64_t *state)
|
static void KeccakF(uint64_t *state)
|
||||||
{
|
{
|
||||||
|
/*static const uint8_t MOD5[10] = { 0, 1, 2, 3, 4, 0, 1, 2, 3, 4 };*/
|
||||||
|
|
||||||
unsigned x, y;
|
unsigned x, y;
|
||||||
unsigned round;
|
unsigned round;
|
||||||
|
|
||||||
@ -1009,18 +1007,11 @@ static void KeccakF(uint64_t *state)
|
|||||||
*/
|
*/
|
||||||
for (x = 0; x < 5; ++x) {
|
for (x = 0; x < 5; ++x) {
|
||||||
uint64_t temp = BC[x + 4] ^ rotl64(BC[x + 1], 1);
|
uint64_t temp = BC[x + 4] ^ rotl64(BC[x + 1], 1);
|
||||||
if (SHA3_SMALL && !ARCH_IS_64BIT) {
|
state[x] ^= temp;
|
||||||
for (y = 0; y <= 20; y += 5)
|
state[x + 5] ^= temp;
|
||||||
state[x + y] ^= temp;
|
state[x + 10] ^= temp;
|
||||||
} else {
|
state[x + 15] ^= temp;
|
||||||
/* On 64-bit, this is also smaller,
|
state[x + 20] ^= temp;
|
||||||
* not only faster, than loop */
|
|
||||||
state[x] ^= temp;
|
|
||||||
state[x + 5] ^= temp;
|
|
||||||
state[x + 10] ^= temp;
|
|
||||||
state[x + 15] ^= temp;
|
|
||||||
state[x + 20] ^= temp;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1057,33 +1048,17 @@ static void KeccakF(uint64_t *state)
|
|||||||
|
|
||||||
/* Chi */
|
/* Chi */
|
||||||
for (y = 0; y <= 20; y += 5) {
|
for (y = 0; y <= 20; y += 5) {
|
||||||
if (SHA3_SMALL && !ARCH_IS_64BIT) {
|
uint64_t BC0, BC1, BC2, BC3, BC4;
|
||||||
uint64_t BC[5];
|
BC0 = state[y + 0];
|
||||||
BC[0] = state[y + 0];
|
BC1 = state[y + 1];
|
||||||
BC[1] = state[y + 1];
|
BC2 = state[y + 2];
|
||||||
BC[2] = state[y + 2];
|
state[y + 0] = BC0 ^ ((~BC1) & BC2);
|
||||||
BC[3] = state[y + 3];
|
BC3 = state[y + 3];
|
||||||
BC[4] = state[y + 4];
|
state[y + 1] = BC1 ^ ((~BC2) & BC3);
|
||||||
for (x = 0; x < 5; ++x) {
|
BC4 = state[y + 4];
|
||||||
state[y + x] =
|
state[y + 2] = BC2 ^ ((~BC3) & BC4);
|
||||||
BC[x] ^ ((~BC[MOD5[x + 1]]) &
|
state[y + 3] = BC3 ^ ((~BC4) & BC0);
|
||||||
BC[MOD5[x + 2]]);
|
state[y + 4] = BC4 ^ ((~BC0) & BC1);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* 32-bit x86: +50 bytes code, 10% faster */
|
|
||||||
/* 64-bit x86: ~same code size, 30% faster */
|
|
||||||
uint64_t BC0, BC1, BC2, BC3, BC4;
|
|
||||||
BC0 = state[y + 0];
|
|
||||||
BC1 = state[y + 1];
|
|
||||||
BC2 = state[y + 2];
|
|
||||||
state[y + 0] = BC0 ^ ((~BC1) & BC2);
|
|
||||||
BC3 = state[y + 3];
|
|
||||||
state[y + 1] = BC1 ^ ((~BC2) & BC3);
|
|
||||||
BC4 = state[y + 4];
|
|
||||||
state[y + 2] = BC2 ^ ((~BC3) & BC4);
|
|
||||||
state[y + 3] = BC3 ^ ((~BC4) & BC0);
|
|
||||||
state[y + 4] = BC4 ^ ((~BC0) & BC1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Iota */
|
/* Iota */
|
||||||
|
Loading…
Reference in New Issue
Block a user