aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlloyd <[email protected]>2006-08-21 01:14:28 +0000
committerlloyd <[email protected]>2006-08-21 01:14:28 +0000
commitdd77057cb464044ed1dc5390b6ab121ef147fe32 (patch)
treec7b878104422f02ef37ac2d949be327ba2e9c76f
parente80d7421cf2da5a85bce6370534753644e8281e2 (diff)
Rotate the temporary variable along with the chaining variables; gives
some further room for optimization.
-rw-r--r--modules/alg_ia32/sha1core.S329
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)