From bef626b9e2e75d8a1d50d6429dcb62d48ba3c8ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Tue, 25 Aug 2009 16:36:41 +0200 Subject: [PATCH] *** empty log message *** Rev: nettle/x86/sha1-f2.nlms:1.1 --- x86/sha1-f2.nlms | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 x86/sha1-f2.nlms diff --git a/x86/sha1-f2.nlms b/x86/sha1-f2.nlms new file mode 100644 index 00000000..2eb6ed6c --- /dev/null +++ b/x86/sha1-f2.nlms @@ -0,0 +1,76 @@ +/* The f2 phase of sha1 */ +/* !!! arch x86_32 */ +/* !!! signature n */ +/* !!! count 0 mod 5 */ + +/* Run with loopmix -f -s -m -i sha1-f2.nlms */ + +/* Current version can be loop-mixed down to 31 cycles. */ +define(`SA',`%eax') +define(`SB',`%ebx') +define(`SC',`%ecx') +define(`SD',`%edx') +define(`SE',`%ebp') +define(`DATA',`%esp') +define(`TMP',`%edi') +dnl define(`TMP2',`%esi') +define(`KVALUE',`%esi') + +define(`COUNT', `84(%esp)') + +dnl Expands to 4*i, or to the empty string if i is zero +define(`OFFSET', `ifelse($1,0,,eval(4*$1))') + +dnl ROUND(a, b, c, d, e, i) +define(`ROUND', ` + mov OFFSET(eval($6 % 16)) (DATA), TMP + xor OFFSET(eval(($6 + 2) % 16)) (DATA), TMP + xor OFFSET(eval(($6 + 8) % 16)) (DATA), TMP + xor OFFSET(eval(($6 + 13) % 16)) (DATA), TMP + rol `$'1, TMP + mov TMP, OFFSET(eval($6 % 16)) (DATA) + + add KVALUE, $5 + add TMP, $5 + + mov $2, TMP + xor $3, TMP + xor $4, TMP + add TMP, $5 + + mov $1, TMP + rol `$'5, TMP + add TMP, $5 + + rol `$'30, $2 +') + +.text +.p2align 4,15 +.globl loop_entry +loop_entry: + push %ebx + push %ebp + push %esi + push %edi + + sub $64, %esp + +.align 32 +loop_begin: + ROUND(SA, SB, SC, SD, SE, 20) + ROUND(SE, SA, SB, SC, SD, 21) + ROUND(SD, SE, SA, SB, SC, 22) + ROUND(SC, SD, SE, SA, SB, 23) + ROUND(SB, SC, SD, SE, SA, 24) + sub $5, COUNT + jnz loop_begin + +loop_end: + add $64, %esp + pop %edi + pop %esi + pop %ebp + pop %ebx + ret + -- GitLab