summaryrefslogtreecommitdiff
path: root/x86
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2009-08-25 16:36:41 +0200
committerNiels Möller <nisse@lysator.liu.se>2009-08-25 16:36:41 +0200
commitbef626b9e2e75d8a1d50d6429dcb62d48ba3c8ba (patch)
tree79ba4add022a03b93c7fca3c3351a4a9e37ed13e /x86
parent0941a72798c5528a39664d53d284aa9e310c8318 (diff)
downloadnettle-bef626b9e2e75d8a1d50d6429dcb62d48ba3c8ba.tar.gz
*** empty log message ***
Rev: nettle/x86/sha1-f2.nlms:1.1
Diffstat (limited to 'x86')
-rw-r--r--x86/sha1-f2.nlms76
1 files changed, 76 insertions, 0 deletions
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
+