Print this page
6665607 Need a SHA256/SHA384/SHA512 implementation optimized for 64-bit x86

Split Close
Expand all
Collapse all
          --- old/usr/src/common/crypto/sha1/amd64/sha1-x86_64.pl
          +++ new/usr/src/common/crypto/sha1/amd64/sha1-x86_64.pl
↓ open down ↓ 168 lines elided ↑ open up ↑
 169  169  $E="%r11d";
 170  170  # Temporary:
 171  171  $T="%r12d";
 172  172  
 173  173  @V=($A,$B,$C,$D,$E,$T);
 174  174  
 175  175  sub PROLOGUE {
 176  176  my $func=shift;
 177  177  $code.=<<___;
 178  178  ENTRY_NP($func)
 179      -        /* EXPORT DELETE START */
 180  179          push    %rbx
 181  180          push    %rbp
 182  181          push    %r12
 183  182          mov     %rsp,%rax
 184  183          mov     %rdi,$ctx       # reassigned argument
 185  184          sub     \$`8+16*4`,%rsp
 186  185          mov     %rsi,$inp       # reassigned argument
 187  186          and     \$-64,%rsp
 188  187          mov     %rdx,$num       # reassigned argument
 189  188          mov     %rax,`16*4`(%rsp)
↓ open down ↓ 6 lines elided ↑ open up ↑
 196  195  ___
 197  196  }
 198  197  
 199  198  sub EPILOGUE {
 200  199  my $func=shift;
 201  200  $code.=<<___;
 202  201          mov     `16*4`(%rsp),%rsp
 203  202          pop     %r12
 204  203          pop     %rbp
 205  204          pop     %rbx
 206      -        /* EXPORT DELETE END */
 207  205          ret
 208  206  SET_SIZE($func)
 209  207  ___
 210  208  }
 211  209  
 212  210  sub BODY_00_19 {
 213  211  my ($i,$a,$b,$c,$d,$e,$f,$host)=@_;
 214  212  my $j=$i+1;
 215  213  $code.=<<___ if ($i==0);
 216  214          mov     `4*$i`($inp),$xi        
↓ open down ↓ 96 lines elided ↑ open up ↑
 313  311          rol     \$1,$xi
 314  312          or      $t1,$t0
 315  313          rol     \$30,$b
 316  314          mov     $xi,`4*($j%16)`(%rsp)
 317  315          add     $t0,$f
 318  316  ___
 319  317  }
 320  318  
 321  319  $code=<<___;
 322  320  #if !defined(lint) && !defined(__lint)
 323      -        .ident  "@(#)sha1-x86_64.pl     1.1     08/03/02 SMI"
      321 +        .ident  "@(#)sha1-x86_64.pl     1.2     08/03/20 SMI"
 324  322  #include <sys/asm_linkage.h>
 325  323  ___
 326  324  
 327  325  
 328  326  &PROLOGUE("sha1_block_data_order");
 329  327  $code.=".align  4\n.Lloop:\n";
 330  328  for($i=0;$i<20;$i++)    { &BODY_00_19($i,@V); unshift(@V,pop(@V)); }
 331  329  for(;$i<40;$i++)        { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
 332  330  for(;$i<60;$i++)        { &BODY_40_59($i,@V); unshift(@V,pop(@V)); }
 333  331  for(;$i<80;$i++)        { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
↓ open down ↓ 37 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX