diff options
author | Andy Polyakov <appro@openssl.org> | 2011-10-08 21:37:44 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2011-10-08 21:37:44 +0000 |
commit | 08d62e9f1a122d2a9029a8130b55525f44274d9f (patch) | |
tree | 60d136c57f7d8e8dbab3bff0d5eea499e05e11f4 /engines/asm/e_padlock-x86_64.pl | |
parent | 549cd657fdff6a2ba41d5c3d2856a8a25dd57e7d (diff) |
e_padlock-x86[_64].pl: SHA fixes, comply with specification and fix bug.
Diffstat (limited to 'engines/asm/e_padlock-x86_64.pl')
-rw-r--r-- | engines/asm/e_padlock-x86_64.pl | 71 |
1 files changed, 67 insertions, 4 deletions
diff --git a/engines/asm/e_padlock-x86_64.pl b/engines/asm/e_padlock-x86_64.pl index 13c371be67..ad61974988 100644 --- a/engines/asm/e_padlock-x86_64.pl +++ b/engines/asm/e_padlock-x86_64.pl @@ -146,9 +146,20 @@ padlock_xstore: .type padlock_sha1_oneshot,\@function,3 .align 16 padlock_sha1_oneshot: - xor %rax,%rax mov %rdx,%rcx + mov %rdi,%rdx # put aside %rdi + movups (%rdi),%xmm0 # copy-in context + sub \$128+8,%rsp + mov 16(%rdi),%eax + movaps %xmm0,(%rsp) + mov %rsp,%rdi + mov %eax,16(%rsp) + xor %rax,%rax .byte 0xf3,0x0f,0xa6,0xc8 # rep xsha1 + movaps (%rsp),%xmm0 + mov 16(%rsp),%eax + movups %xmm0,(%rdx) # copy-out context + mov %eax,16(%rdx) ret .size padlock_sha1_oneshot,.-padlock_sha1_oneshot @@ -156,9 +167,20 @@ padlock_sha1_oneshot: .type padlock_sha1_blocks,\@function,3 .align 16 padlock_sha1_blocks: - mov \$-1,%rax mov %rdx,%rcx + mov %rdi,%rdx # put aside %rdi + movups (%rdi),%xmm0 # copy-in context + sub \$128+8,%rsp + mov 16(%rdi),%eax + movaps %xmm0,(%rsp) + mov %rsp,%rdi + mov %eax,16(%rsp) + mov \$-1,%rax .byte 0xf3,0x0f,0xa6,0xc8 # rep xsha1 + movaps (%rsp),%xmm0 + mov 16(%rsp),%eax + movups %xmm0,(%rdx) # copy-out context + mov %eax,16(%rdx) ret .size padlock_sha1_blocks,.-padlock_sha1_blocks @@ -166,9 +188,20 @@ padlock_sha1_blocks: .type padlock_sha256_oneshot,\@function,3 .align 16 padlock_sha256_oneshot: - xor %rax,%rax mov %rdx,%rcx + mov %rdi,%rdx # put aside %rdi + movups (%rdi),%xmm0 # copy-in context + sub \$128+8,%rsp + movups 16(%rdi),%xmm1 + movaps %xmm0,(%rsp) + mov %rsp,%rdi + movaps %xmm1,16(%rsp) + xor %rax,%rax .byte 0xf3,0x0f,0xa6,0xd0 # rep xsha256 + movaps (%rsp),%xmm0 + movaps 16(%rsp),%xmm1 + movups %xmm0,(%rdx) # copy-out context + movups %xmm1,16(%rdx) ret .size padlock_sha256_oneshot,.-padlock_sha256_oneshot @@ -176,9 +209,20 @@ padlock_sha256_oneshot: .type padlock_sha256_blocks,\@function,3 .align 16 padlock_sha256_blocks: - mov \$-1,%rax mov %rdx,%rcx + mov %rdi,%rdx # put aside %rdi + movups (%rdi),%xmm0 # copy-in context + sub \$128+8,%rsp + movups 16(%rdi),%xmm1 + movaps %xmm0,(%rsp) + mov %rsp,%rdi + movaps %xmm1,16(%rsp) + mov \$-1,%rax .byte 0xf3,0x0f,0xa6,0xd0 # rep xsha256 + movaps (%rsp),%xmm0 + movaps 16(%rsp),%xmm1 + movups %xmm0,(%rdx) # copy-out context + movups %xmm1,16(%rdx) ret .size padlock_sha256_blocks,.-padlock_sha256_blocks @@ -187,7 +231,26 @@ padlock_sha256_blocks: .align 16 padlock_sha512_blocks: mov %rdx,%rcx + mov %rdi,%rdx # put aside %rdi + movups (%rdi),%xmm0 # copy-in context + sub \$128+8,%rsp + movups 16(%rdi),%xmm1 + movups 32(%rdi),%xmm2 + movups 48(%rdi),%xmm3 + movaps %xmm0,(%rsp) + mov %rsp,%rdi + movaps %xmm1,16(%rsp) + movaps %xmm2,32(%rsp) + movaps %xmm3,48(%rsp) .byte 0xf3,0x0f,0xa6,0xe0 # rep xha512 + movaps (%rsp),%xmm0 + movaps 16(%rsp),%xmm1 + movaps 32(%rsp),%xmm2 + movaps 48(%rsp),%xmm3 + movups %xmm0,(%rdx) # copy-out context + movups %xmm1,16(%rdx) + movups %xmm2,32(%rdx) + movups %xmm3,48(%rdx) ret .size padlock_sha512_blocks,.-padlock_sha512_blocks ___ |