diff options
author | lloyd <[email protected]> | 2006-08-21 01:14:28 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2006-08-21 01:14:28 +0000 |
commit | dd77057cb464044ed1dc5390b6ab121ef147fe32 (patch) | |
tree | c7b878104422f02ef37ac2d949be327ba2e9c76f | |
parent | e80d7421cf2da5a85bce6370534753644e8281e2 (diff) |
Rotate the temporary variable along with the chaining variables; gives
some further room for optimization.
-rw-r--r-- | modules/alg_ia32/sha1core.S | 329 |
1 files changed, 154 insertions, 175 deletions
diff --git a/modules/alg_ia32/sha1core.S b/modules/alg_ia32/sha1core.S index a8c1b2dc9..e46e40d0e 100644 --- a/modules/alg_ia32/sha1core.S +++ b/modules/alg_ia32/sha1core.S @@ -12,56 +12,56 @@ START_FUNCTION(sha160_core) #define PUSHED 4 - ASSIGN(EBP, ARG(2)) - ASSIGN(EDI, ARG(3)) + ASSIGN(EDI, ARG(2)) + ASSIGN(EBP, ARG(3)) ZEROIZE(ESI) START_LOOP(.LOAD_INPUT) ADD_IMM(ESI, 4) - ASSIGN(EAX, ARRAY4(EBP, 0)) - ASSIGN(EBX, ARRAY4(EBP, 1)) - ASSIGN(ECX, ARRAY4(EBP, 2)) - ASSIGN(EDX, ARRAY4(EBP, 3)) + ASSIGN(EAX, ARRAY4(EDI, 0)) + ASSIGN(EBX, ARRAY4(EDI, 1)) + ASSIGN(ECX, ARRAY4(EDI, 2)) + ASSIGN(EDX, ARRAY4(EDI, 3)) - ADD_IMM(EBP, 16) + ADD_IMM(EDI, 16) BSWAP(EAX) BSWAP(EBX) BSWAP(ECX) BSWAP(EDX) - ASSIGN(ARRAY4_INDIRECT(EDI,ESI,-4), EAX) - ASSIGN(ARRAY4_INDIRECT(EDI,ESI,-3), EBX) - ASSIGN(ARRAY4_INDIRECT(EDI,ESI,-2), ECX) - ASSIGN(ARRAY4_INDIRECT(EDI,ESI,-1), EDX) + ASSIGN(ARRAY4_INDIRECT(EBP,ESI,-4), EAX) + ASSIGN(ARRAY4_INDIRECT(EBP,ESI,-3), EBX) + ASSIGN(ARRAY4_INDIRECT(EBP,ESI,-2), ECX) + ASSIGN(ARRAY4_INDIRECT(EBP,ESI,-1), EDX) LOOP_UNTIL_EQ(ESI, 16, .LOAD_INPUT) - ADD2_IMM(EBP, EDI, 64) + ADD2_IMM(EDI, EBP, 64) START_LOOP(.EXPANSION) ADD_IMM(ESI, 4) ZEROIZE(EAX) - ASSIGN(EBX, ARRAY4(EBP, -1)) - ASSIGN(ECX, ARRAY4(EBP, -2)) - ASSIGN(EDX, ARRAY4(EBP, -3)) + ASSIGN(EBX, ARRAY4(EDI, -1)) + ASSIGN(ECX, ARRAY4(EDI, -2)) + ASSIGN(EDX, ARRAY4(EDI, -3)) - XOR(EAX, ARRAY4(EBP, -5)) - XOR(EBX, ARRAY4(EBP, -6)) - XOR(ECX, ARRAY4(EBP, -7)) - XOR(EDX, ARRAY4(EBP, -8)) + XOR(EAX, ARRAY4(EDI, -5)) + XOR(EBX, ARRAY4(EDI, -6)) + XOR(ECX, ARRAY4(EDI, -7)) + XOR(EDX, ARRAY4(EDI, -8)) - XOR(EAX, ARRAY4(EBP, -11)) - XOR(EBX, ARRAY4(EBP, -12)) - XOR(ECX, ARRAY4(EBP, -13)) - XOR(EDX, ARRAY4(EBP, -14)) + XOR(EAX, ARRAY4(EDI, -11)) + XOR(EBX, ARRAY4(EDI, -12)) + XOR(ECX, ARRAY4(EDI, -13)) + XOR(EDX, ARRAY4(EDI, -14)) - XOR(EAX, ARRAY4(EBP, -13)) - XOR(EBX, ARRAY4(EBP, -14)) - XOR(ECX, ARRAY4(EBP, -15)) - XOR(EDX, ARRAY4(EBP, -16)) + XOR(EAX, ARRAY4(EDI, -13)) + XOR(EBX, ARRAY4(EDI, -14)) + XOR(ECX, ARRAY4(EDI, -15)) + XOR(EDX, ARRAY4(EDI, -16)) ROTL_IMM(EDX, 1) ROTL_IMM(ECX, 1) @@ -69,187 +69,166 @@ START_LOOP(.EXPANSION) XOR(EAX, EDX) ROTL_IMM(EAX, 1) - ASSIGN(ARRAY4(EBP, 0), EDX) - ASSIGN(ARRAY4(EBP, 1), ECX) - ASSIGN(ARRAY4(EBP, 2), EBX) - ASSIGN(ARRAY4(EBP, 3), EAX) + ASSIGN(ARRAY4(EDI, 0), EDX) + ASSIGN(ARRAY4(EDI, 1), ECX) + ASSIGN(ARRAY4(EDI, 2), EBX) + ASSIGN(ARRAY4(EDI, 3), EAX) - ADD_IMM(EBP, 16) + ADD_IMM(EDI, 16) LOOP_UNTIL_EQ(ESI, 80, .EXPANSION) - ASSIGN(EBP, ARG(1)) - ASSIGN(EAX, ARRAY4(EBP, 0)) - ASSIGN(EBX, ARRAY4(EBP, 1)) - ASSIGN(ECX, ARRAY4(EBP, 2)) - ASSIGN(EDX, ARRAY4(EBP, 3)) - ASSIGN(ESI, ARRAY4(EBP, 4)) + ASSIGN(EDI, ARG(1)) + ASSIGN(EAX, ARRAY4(EDI, 0)) + ASSIGN(EBX, ARRAY4(EDI, 1)) + ASSIGN(ECX, ARRAY4(EDI, 2)) + ASSIGN(EDX, ARRAY4(EDI, 3)) + ASSIGN(ESI, ARRAY4(EDI, 4)) #define MAGIC1 0x5A827999 #define MAGIC2 0x6ED9EBA1 #define MAGIC3 0x8F1BBCDC #define MAGIC4 0xCA62C1D6 -#define T1 EDI -#define T2 EBP +#define MSG EBP -#define F1(A, B, C, D, E, N) \ +#define F1(A, B, C, D, E, F, N) \ ROTL_IMM(A, 5) ; \ - ASSIGN(T2, C) ; \ - XOR(T2, D) ; \ - AND(T2, B) ; \ - XOR(T2, D) ; \ - ADD(E, T1) ; \ - ASSIGN(T1, ARG(3)) ; \ + ASSIGN(F, C) ; \ + XOR(F, D) ; \ + AND(F, B) ; \ + XOR(F, D) ; \ ROTR_IMM(B, 2) ; \ ADD3_IMM(E, A, MAGIC1) ; \ - ADD(E, T2) ; \ - ASSIGN(T1, ARRAY4(T1, (N+1))) ; \ - ROTR_IMM(A, 5) ; + ROTR_IMM(A, 5) ; \ + ADD(F, E) ; \ + ADD(F, ARRAY4(MSG, N)) ; -#define F2_4(A, B, C, D, E, N, MAGIC) \ +#define F2_4(A, B, C, D, E, F, N, MAGIC) \ ROTL_IMM(A, 5) ; \ - ASSIGN(T2, D) ; \ - XOR(T2, C) ; \ - XOR(T2, B) ; \ - ADD(E, T1) ; \ - ASSIGN(T1, ARG(3)) ; \ + ASSIGN(F, D) ; \ + XOR(F, C) ; \ + XOR(F, B) ; \ ROTR_IMM(B, 2) ; \ ADD3_IMM(E, A, MAGIC) ; \ - ADD(E, T2) ; \ - ASSIGN(T1, ARRAY4(T1, (N+1))) ; \ - ROTR_IMM(A, 5) ; + ROTR_IMM(A, 5) ; \ + ADD(F, E) ; \ + ADD(F, ARRAY4(MSG, N)) ; \ -#define F3(A, B, C, D, E, N) \ +#define F3(A, B, C, D, E, F, N) \ ROTL_IMM(A, 5) ; \ - ASSIGN(T2, B) ; \ - OR(T2, C) ; \ - AND(T2, D) ; \ - ADD(E, T1) ; \ - ASSIGN(T1, B) ; \ - AND(T1, C) ; \ - OR(T2, T1) ; \ - ASSIGN(T1, ARG(3)) ; \ + ASSIGN(MSG, B) ; \ + ASSIGN(F, B) ; \ + AND(MSG, C) ; \ + OR(F, C) ; \ + AND(F, D) ; \ + OR(F, MSG) ; \ + ASSIGN(MSG, ARG(3)) ; \ ROTR_IMM(B, 2) ; \ ADD3_IMM(E, A, MAGIC3) ; \ - ADD(E, T2) ; \ - ASSIGN(T1, ARRAY4(T1, (N+1))) ; \ - ROTR_IMM(A, 5) ; - -#define F2(A, B, C, D, E, MSG) \ - F2_4(A, B, C, D, E, MSG, MAGIC2) + ROTR_IMM(A, 5) ; \ + ADD(F, E) ; \ + ADD(F, ARRAY4(MSG, N)) ; \ -#define F4(A, B, C, D, E, MSG) \ - F2_4(A, B, C, D, E, MSG, MAGIC4) +#define F2(A, B, C, D, E, F, MSG) \ + F2_4(A, B, C, D, E, F, MSG, MAGIC2) - ASSIGN(T1, ARG(3)) - ASSIGN(T1, ARRAY4(T1, 0)) +#define F4(A, B, C, D, E, F, MSG) \ + F2_4(A, B, C, D, E, F, MSG, MAGIC4) /* First Round */ - F1(EAX, EBX, ECX, EDX, ESI, 0) - F1(ESI, EAX, EBX, ECX, EDX, 1) - F1(EDX, ESI, EAX, EBX, ECX, 2) - F1(ECX, EDX, ESI, EAX, EBX, 3) - F1(EBX, ECX, EDX, ESI, EAX, 4) - - F1(EAX, EBX, ECX, EDX, ESI, 5) - F1(ESI, EAX, EBX, ECX, EDX, 6) - F1(EDX, ESI, EAX, EBX, ECX, 7) - F1(ECX, EDX, ESI, EAX, EBX, 8) - F1(EBX, ECX, EDX, ESI, EAX, 9) - - F1(EAX, EBX, ECX, EDX, ESI, 10) - F1(ESI, EAX, EBX, ECX, EDX, 11) - F1(EDX, ESI, EAX, EBX, ECX, 12) - F1(ECX, EDX, ESI, EAX, EBX, 13) - F1(EBX, ECX, EDX, ESI, EAX, 14) - - F1(EAX, EBX, ECX, EDX, ESI, 15) - F1(ESI, EAX, EBX, ECX, EDX, 16) - F1(EDX, ESI, EAX, EBX, ECX, 17) - F1(ECX, EDX, ESI, EAX, EBX, 18) - F1(EBX, ECX, EDX, ESI, EAX, 19) + F1(EAX, EBX, ECX, EDX, ESI, EDI, 0) + F1(EDI, EAX, EBX, ECX, EDX, ESI, 1) + F1(ESI, EDI, EAX, EBX, ECX, EDX, 2) + F1(EDX, ESI, EDI, EAX, EBX, ECX, 3) + F1(ECX, EDX, ESI, EDI, EAX, EBX, 4) + F1(EBX, ECX, EDX, ESI, EDI, EAX, 5) + F1(EAX, EBX, ECX, EDX, ESI, EDI, 6) + F1(EDI, EAX, EBX, ECX, EDX, ESI, 7) + F1(ESI, EDI, EAX, EBX, ECX, EDX, 8) + F1(EDX, ESI, EDI, EAX, EBX, ECX, 9) + F1(ECX, EDX, ESI, EDI, EAX, EBX, 10) + F1(EBX, ECX, EDX, ESI, EDI, EAX, 11) + F1(EAX, EBX, ECX, EDX, ESI, EDI, 12) + F1(EDI, EAX, EBX, ECX, EDX, ESI, 13) + F1(ESI, EDI, EAX, EBX, ECX, EDX, 14) + F1(EDX, ESI, EDI, EAX, EBX, ECX, 15) + F1(ECX, EDX, ESI, EDI, EAX, EBX, 16) + F1(EBX, ECX, EDX, ESI, EDI, EAX, 17) + F1(EAX, EBX, ECX, EDX, ESI, EDI, 18) + F1(EDI, EAX, EBX, ECX, EDX, ESI, 19) /* Second Round */ - F2(EAX, EBX, ECX, EDX, ESI, 20) - F2(ESI, EAX, EBX, ECX, EDX, 21) - F2(EDX, ESI, EAX, EBX, ECX, 22) - F2(ECX, EDX, ESI, EAX, EBX, 23) - F2(EBX, ECX, EDX, ESI, EAX, 24) - - F2(EAX, EBX, ECX, EDX, ESI, 25) - F2(ESI, EAX, EBX, ECX, EDX, 26) - F2(EDX, ESI, EAX, EBX, ECX, 27) - F2(ECX, EDX, ESI, EAX, EBX, 28) - F2(EBX, ECX, EDX, ESI, EAX, 29) - - F2(EAX, EBX, ECX, EDX, ESI, 30) - F2(ESI, EAX, EBX, ECX, EDX, 31) - F2(EDX, ESI, EAX, EBX, ECX, 32) - F2(ECX, EDX, ESI, EAX, EBX, 33) - F2(EBX, ECX, EDX, ESI, EAX, 34) - - F2(EAX, EBX, ECX, EDX, ESI, 35) - F2(ESI, EAX, EBX, ECX, EDX, 36) - F2(EDX, ESI, EAX, EBX, ECX, 37) - F2(ECX, EDX, ESI, EAX, EBX, 38) - F2(EBX, ECX, EDX, ESI, EAX, 39) + F2(ESI, EDI, EAX, EBX, ECX, EDX, 20) + F2(EDX, ESI, EDI, EAX, EBX, ECX, 21) + F2(ECX, EDX, ESI, EDI, EAX, EBX, 22) + F2(EBX, ECX, EDX, ESI, EDI, EAX, 23) + F2(EAX, EBX, ECX, EDX, ESI, EDI, 24) + F2(EDI, EAX, EBX, ECX, EDX, ESI, 25) + F2(ESI, EDI, EAX, EBX, ECX, EDX, 26) + F2(EDX, ESI, EDI, EAX, EBX, ECX, 27) + F2(ECX, EDX, ESI, EDI, EAX, EBX, 28) + F2(EBX, ECX, EDX, ESI, EDI, EAX, 29) + F2(EAX, EBX, ECX, EDX, ESI, EDI, 30) + F2(EDI, EAX, EBX, ECX, EDX, ESI, 31) + F2(ESI, EDI, EAX, EBX, ECX, EDX, 32) + F2(EDX, ESI, EDI, EAX, EBX, ECX, 33) + F2(ECX, EDX, ESI, EDI, EAX, EBX, 34) + F2(EBX, ECX, EDX, ESI, EDI, EAX, 35) + F2(EAX, EBX, ECX, EDX, ESI, EDI, 36) + F2(EDI, EAX, EBX, ECX, EDX, ESI, 37) + F2(ESI, EDI, EAX, EBX, ECX, EDX, 38) + F2(EDX, ESI, EDI, EAX, EBX, ECX, 39) /* Third Round */ - F3(EAX, EBX, ECX, EDX, ESI, 40) - F3(ESI, EAX, EBX, ECX, EDX, 41) - F3(EDX, ESI, EAX, EBX, ECX, 42) - F3(ECX, EDX, ESI, EAX, EBX, 43) - F3(EBX, ECX, EDX, ESI, EAX, 44) - - F3(EAX, EBX, ECX, EDX, ESI, 45) - F3(ESI, EAX, EBX, ECX, EDX, 46) - F3(EDX, ESI, EAX, EBX, ECX, 47) - F3(ECX, EDX, ESI, EAX, EBX, 48) - F3(EBX, ECX, EDX, ESI, EAX, 49) - - F3(EAX, EBX, ECX, EDX, ESI, 50) - F3(ESI, EAX, EBX, ECX, EDX, 51) - F3(EDX, ESI, EAX, EBX, ECX, 52) - F3(ECX, EDX, ESI, EAX, EBX, 53) - F3(EBX, ECX, EDX, ESI, EAX, 54) - - F3(EAX, EBX, ECX, EDX, ESI, 55) - F3(ESI, EAX, EBX, ECX, EDX, 56) - F3(EDX, ESI, EAX, EBX, ECX, 57) - F3(ECX, EDX, ESI, EAX, EBX, 58) - F3(EBX, ECX, EDX, ESI, EAX, 59) + F3(ECX, EDX, ESI, EDI, EAX, EBX, 40) + F3(EBX, ECX, EDX, ESI, EDI, EAX, 41) + F3(EAX, EBX, ECX, EDX, ESI, EDI, 42) + F3(EDI, EAX, EBX, ECX, EDX, ESI, 43) + F3(ESI, EDI, EAX, EBX, ECX, EDX, 44) + F3(EDX, ESI, EDI, EAX, EBX, ECX, 45) + F3(ECX, EDX, ESI, EDI, EAX, EBX, 46) + F3(EBX, ECX, EDX, ESI, EDI, EAX, 47) + F3(EAX, EBX, ECX, EDX, ESI, EDI, 48) + F3(EDI, EAX, EBX, ECX, EDX, ESI, 49) + F3(ESI, EDI, EAX, EBX, ECX, EDX, 50) + F3(EDX, ESI, EDI, EAX, EBX, ECX, 51) + F3(ECX, EDX, ESI, EDI, EAX, EBX, 52) + F3(EBX, ECX, EDX, ESI, EDI, EAX, 53) + F3(EAX, EBX, ECX, EDX, ESI, EDI, 54) + F3(EDI, EAX, EBX, ECX, EDX, ESI, 55) + F3(ESI, EDI, EAX, EBX, ECX, EDX, 56) + F3(EDX, ESI, EDI, EAX, EBX, ECX, 57) + F3(ECX, EDX, ESI, EDI, EAX, EBX, 58) + F3(EBX, ECX, EDX, ESI, EDI, EAX, 59) /* Fourth Round */ - F4(EAX, EBX, ECX, EDX, ESI, 60) - F4(ESI, EAX, EBX, ECX, EDX, 61) - F4(EDX, ESI, EAX, EBX, ECX, 62) - F4(ECX, EDX, ESI, EAX, EBX, 63) - F4(EBX, ECX, EDX, ESI, EAX, 64) - - F4(EAX, EBX, ECX, EDX, ESI, 65) - F4(ESI, EAX, EBX, ECX, EDX, 66) - F4(EDX, ESI, EAX, EBX, ECX, 67) - F4(ECX, EDX, ESI, EAX, EBX, 68) - F4(EBX, ECX, EDX, ESI, EAX, 69) - - F4(EAX, EBX, ECX, EDX, ESI, 70) - F4(ESI, EAX, EBX, ECX, EDX, 71) - F4(EDX, ESI, EAX, EBX, ECX, 72) - F4(ECX, EDX, ESI, EAX, EBX, 73) - F4(EBX, ECX, EDX, ESI, EAX, 74) - - F4(EAX, EBX, ECX, EDX, ESI, 75) - F4(ESI, EAX, EBX, ECX, EDX, 76) - F4(EDX, ESI, EAX, EBX, ECX, 77) - F4(ECX, EDX, ESI, EAX, EBX, 78) - F4(EBX, ECX, EDX, ESI, EAX, 0) + F4(EAX, EBX, ECX, EDX, ESI, EDI, 60) + F4(EDI, EAX, EBX, ECX, EDX, ESI, 61) + F4(ESI, EDI, EAX, EBX, ECX, EDX, 62) + F4(EDX, ESI, EDI, EAX, EBX, ECX, 63) + F4(ECX, EDX, ESI, EDI, EAX, EBX, 64) + F4(EBX, ECX, EDX, ESI, EDI, EAX, 65) + F4(EAX, EBX, ECX, EDX, ESI, EDI, 66) + F4(EDI, EAX, EBX, ECX, EDX, ESI, 67) + F4(ESI, EDI, EAX, EBX, ECX, EDX, 68) + F4(EDX, ESI, EDI, EAX, EBX, ECX, 69) + F4(ECX, EDX, ESI, EDI, EAX, EBX, 70) + F4(EBX, ECX, EDX, ESI, EDI, EAX, 71) + F4(EAX, EBX, ECX, EDX, ESI, EDI, 72) + F4(EDI, EAX, EBX, ECX, EDX, ESI, 73) + F4(ESI, EDI, EAX, EBX, ECX, EDX, 74) + F4(EDX, ESI, EDI, EAX, EBX, ECX, 75) + F4(ECX, EDX, ESI, EDI, EAX, EBX, 76) + F4(EBX, ECX, EDX, ESI, EDI, EAX, 77) + F4(EAX, EBX, ECX, EDX, ESI, EDI, 78) + F4(EDI, EAX, EBX, ECX, EDX, ESI, 79) ASSIGN(EBP, ARG(1)) - ADD(ARRAY4(EBP, 0), EAX) - ADD(ARRAY4(EBP, 1), EBX) - ADD(ARRAY4(EBP, 2), ECX) - ADD(ARRAY4(EBP, 3), EDX) - ADD(ARRAY4(EBP, 4), ESI) + ADD(ARRAY4(EBP, 0), ESI) + ADD(ARRAY4(EBP, 1), EDI) + ADD(ARRAY4(EBP, 2), EAX) + ADD(ARRAY4(EBP, 3), EBX) + ADD(ARRAY4(EBP, 4), ECX) RESTORE_REGS() END_FUNCTION(sha160_core) |