]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
updated Andy's code. padlock_shax_blocks does not require any more, the state to...
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 9 Oct 2011 04:56:06 +0000 (06:56 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Mon, 10 Oct 2011 06:34:30 +0000 (08:34 +0200)
lib/accelerated/x86/asm/padlock-x86-64.s
lib/accelerated/x86/asm/padlock-x86.s

index e18f7a5a4add472aca623ec55530dcdc19a4a19c..c15da11fe025e85b5c6d6f6d4cc61d6b45b82f5c 100644 (file)
@@ -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
index a0aed2ca826733888473e6d9ecd3357ed09f4b2e..06035d0f921f2600595cd33f5f830660659ffd2c 100644 (file)
@@ -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