From: Nikos Mavrogiannopoulos Date: Sun, 9 Oct 2011 04:56:06 +0000 (+0200) Subject: updated Andy's code. padlock_shax_blocks does not require any more, the state to... X-Git-Tag: gnutls_3_0_4~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bcf7a8605cef027c9be23d63f455ba429eec90ca;p=thirdparty%2Fgnutls.git updated Andy's code. padlock_shax_blocks does not require any more, the state to be of 128-byte size. --- diff --git a/lib/accelerated/x86/asm/padlock-x86-64.s b/lib/accelerated/x86/asm/padlock-x86-64.s index e18f7a5a4a..c15da11fe0 100644 --- a/lib/accelerated/x86/asm/padlock-x86-64.s +++ b/lib/accelerated/x86/asm/padlock-x86-64.s @@ -143,9 +143,21 @@ padlock_xstore: .type padlock_sha1_oneshot,@function .align 16 padlock_sha1_oneshot: - xorq %rax,%rax movq %rdx,%rcx + movq %rdi,%rdx + movups (%rdi),%xmm0 + subq $128+8,%rsp + movl 16(%rdi),%eax + movaps %xmm0,(%rsp) + movq %rsp,%rdi + movl %eax,16(%rsp) + xorq %rax,%rax .byte 0xf3,0x0f,0xa6,0xc8 + movaps (%rsp),%xmm0 + movl 16(%rsp),%eax + addq $128+8,%rsp + movups %xmm0,(%rdx) + movl %eax,16(%rdx) .byte 0xf3,0xc3 .size padlock_sha1_oneshot,.-padlock_sha1_oneshot @@ -153,9 +165,21 @@ padlock_sha1_oneshot: .type padlock_sha1_blocks,@function .align 16 padlock_sha1_blocks: - movq $-1,%rax movq %rdx,%rcx + movq %rdi,%rdx + movups (%rdi),%xmm0 + subq $128+8,%rsp + movl 16(%rdi),%eax + movaps %xmm0,(%rsp) + movq %rsp,%rdi + movl %eax,16(%rsp) + movq $-1,%rax .byte 0xf3,0x0f,0xa6,0xc8 + movaps (%rsp),%xmm0 + movl 16(%rsp),%eax + addq $128+8,%rsp + movups %xmm0,(%rdx) + movl %eax,16(%rdx) .byte 0xf3,0xc3 .size padlock_sha1_blocks,.-padlock_sha1_blocks @@ -163,9 +187,21 @@ padlock_sha1_blocks: .type padlock_sha256_oneshot,@function .align 16 padlock_sha256_oneshot: - xorq %rax,%rax movq %rdx,%rcx + movq %rdi,%rdx + movups (%rdi),%xmm0 + subq $128+8,%rsp + movups 16(%rdi),%xmm1 + movaps %xmm0,(%rsp) + movq %rsp,%rdi + movaps %xmm1,16(%rsp) + xorq %rax,%rax .byte 0xf3,0x0f,0xa6,0xd0 + movaps (%rsp),%xmm0 + movaps 16(%rsp),%xmm1 + addq $128+8,%rsp + movups %xmm0,(%rdx) + movups %xmm1,16(%rdx) .byte 0xf3,0xc3 .size padlock_sha256_oneshot,.-padlock_sha256_oneshot @@ -173,9 +209,21 @@ padlock_sha256_oneshot: .type padlock_sha256_blocks,@function .align 16 padlock_sha256_blocks: - movq $-1,%rax movq %rdx,%rcx + movq %rdi,%rdx + movups (%rdi),%xmm0 + subq $128+8,%rsp + movups 16(%rdi),%xmm1 + movaps %xmm0,(%rsp) + movq %rsp,%rdi + movaps %xmm1,16(%rsp) + movq $-1,%rax .byte 0xf3,0x0f,0xa6,0xd0 + movaps (%rsp),%xmm0 + movaps 16(%rsp),%xmm1 + addq $128+8,%rsp + movups %xmm0,(%rdx) + movups %xmm1,16(%rdx) .byte 0xf3,0xc3 .size padlock_sha256_blocks,.-padlock_sha256_blocks @@ -184,7 +232,27 @@ padlock_sha256_blocks: .align 16 padlock_sha512_blocks: movq %rdx,%rcx + movq %rdi,%rdx + movups (%rdi),%xmm0 + subq $128+8,%rsp + movups 16(%rdi),%xmm1 + movups 32(%rdi),%xmm2 + movups 48(%rdi),%xmm3 + movaps %xmm0,(%rsp) + movq %rsp,%rdi + movaps %xmm1,16(%rsp) + movaps %xmm2,32(%rsp) + movaps %xmm3,48(%rsp) .byte 0xf3,0x0f,0xa6,0xe0 + movaps (%rsp),%xmm0 + movaps 16(%rsp),%xmm1 + movaps 32(%rsp),%xmm2 + movaps 48(%rsp),%xmm3 + addq $128+8,%rsp + movups %xmm0,(%rdx) + movups %xmm1,16(%rdx) + movups %xmm2,32(%rdx) + movups %xmm3,48(%rdx) .byte 0xf3,0xc3 .size padlock_sha512_blocks,.-padlock_sha512_blocks .globl padlock_ecb_encrypt @@ -228,6 +296,8 @@ padlock_ecb_encrypt: jmp .Lecb_loop .align 16 .Lecb_loop: + cmpq %rcx,%rbx + cmovaq %rcx,%rbx movq %rdi,%r8 movq %rsi,%r9 movq %rcx,%r10 @@ -333,6 +403,8 @@ padlock_cbc_encrypt: jmp .Lcbc_loop .align 16 .Lcbc_loop: + cmpq %rcx,%rbx + cmovaq %rcx,%rbx movq %rdi,%r8 movq %rsi,%r9 movq %rcx,%r10 diff --git a/lib/accelerated/x86/asm/padlock-x86.s b/lib/accelerated/x86/asm/padlock-x86.s index a0aed2ca82..06035d0f92 100644 --- a/lib/accelerated/x86/asm/padlock-x86.s +++ b/lib/accelerated/x86/asm/padlock-x86.s @@ -37,7 +37,6 @@ .file "padlock-x86.s" .text - .globl padlock_capability .type padlock_capability,@function .align 16 @@ -423,7 +422,22 @@ padlock_sha1_oneshot: movl 12(%esp),%edi movl 16(%esp),%esi movl 20(%esp),%ecx + movl %esp,%edx + addl $-128,%esp + movups (%edi),%xmm0 + andl $-16,%esp + movl 16(%edi),%eax + movaps %xmm0,(%esp) + movl %esp,%edi + movl %eax,16(%esp) + xorl %eax,%eax .byte 243,15,166,200 + movaps (%esp),%xmm0 + movl 16(%esp),%eax + movl %edx,%esp + movl 12(%esp),%edi + movups %xmm0,(%edi) + movl %eax,16(%edi) popl %esi popl %edi ret @@ -435,11 +449,25 @@ padlock_sha1_blocks: .L_padlock_sha1_blocks_begin: pushl %edi pushl %esi - movl $-1,%eax movl 12(%esp),%edi movl 16(%esp),%esi + movl %esp,%edx movl 20(%esp),%ecx + addl $-128,%esp + movups (%edi),%xmm0 + andl $-16,%esp + movl 16(%edi),%eax + movaps %xmm0,(%esp) + movl %esp,%edi + movl %eax,16(%esp) + movl $-1,%eax .byte 243,15,166,200 + movaps (%esp),%xmm0 + movl 16(%esp),%eax + movl %edx,%esp + movl 12(%esp),%edi + movups %xmm0,(%edi) + movl %eax,16(%edi) popl %esi popl %edi ret @@ -455,7 +483,22 @@ padlock_sha256_oneshot: movl 12(%esp),%edi movl 16(%esp),%esi movl 20(%esp),%ecx + movl %esp,%edx + addl $-128,%esp + movups (%edi),%xmm0 + andl $-16,%esp + movups 16(%edi),%xmm1 + movaps %xmm0,(%esp) + movl %esp,%edi + movaps %xmm1,16(%esp) + xorl %eax,%eax .byte 243,15,166,208 + movaps (%esp),%xmm0 + movaps 16(%esp),%xmm1 + movl %edx,%esp + movl 12(%esp),%edi + movups %xmm0,(%edi) + movups %xmm1,16(%edi) popl %esi popl %edi ret @@ -467,11 +510,25 @@ padlock_sha256_blocks: .L_padlock_sha256_blocks_begin: pushl %edi pushl %esi - movl $-1,%eax movl 12(%esp),%edi movl 16(%esp),%esi movl 20(%esp),%ecx + movl %esp,%edx + addl $-128,%esp + movups (%edi),%xmm0 + andl $-16,%esp + movups 16(%edi),%xmm1 + movaps %xmm0,(%esp) + movl %esp,%edi + movaps %xmm1,16(%esp) + movl $-1,%eax .byte 243,15,166,208 + movaps (%esp),%xmm0 + movaps 16(%esp),%xmm1 + movl %edx,%esp + movl 12(%esp),%edi + movups %xmm0,(%edi) + movups %xmm1,16(%edi) popl %esi popl %edi ret @@ -486,7 +543,29 @@ padlock_sha512_blocks: movl 12(%esp),%edi movl 16(%esp),%esi movl 20(%esp),%ecx + movl %esp,%edx + addl $-128,%esp + movups (%edi),%xmm0 + andl $-16,%esp + movups 16(%edi),%xmm1 + movups 32(%edi),%xmm2 + movups 48(%edi),%xmm3 + movaps %xmm0,(%esp) + movl %esp,%edi + movaps %xmm1,16(%esp) + movaps %xmm2,32(%esp) + movaps %xmm3,48(%esp) .byte 243,15,166,224 + movaps (%esp),%xmm0 + movaps 16(%esp),%xmm1 + movaps 32(%esp),%xmm2 + movaps 48(%esp),%xmm3 + movl %edx,%esp + movl 12(%esp),%edi + movups %xmm0,(%edi) + movups %xmm1,16(%edi) + movups %xmm2,32(%edi) + movups %xmm3,48(%edi) popl %esi popl %edi ret