Add SPARC T4 AES support.
[oweals/openssl.git] / crypto / whrlpool / asm / wp-mmx.pl
index ee7734b2a3e72e8abcaf8a4e7589cb69cafd2e72..c584e5b92b251a4431027b23ad4f386d32566d00 100644 (file)
@@ -45,7 +45,8 @@
 #      non-MMX implementation would actually pay off, but till
 #      opposite is proved "unlikely" is assumed.
 
-push(@INC,"../../perlasm");
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC,"${dir}","${dir}../../perlasm");
 require "x86asm.pl";
 
 &asm_init($ARGV[0],"wp-mmx.pl");
@@ -114,37 +115,39 @@ $tbl="ebp";
        &mov    (&DWP(12,"ebx"),"esi");         # zero round counter
 
 &set_label("round",16);
-       &movq   (@mm[0],&DWP(2048*$SCALE,$tbl,"esi",8));        # rc[r]
+       &movq   (@mm[0],&QWP(2048*$SCALE,$tbl,"esi",8));        # rc[r]
        &mov    ("eax",&DWP(0,"esp"));
        &mov    ("ebx",&DWP(4,"esp"));
+       &movz   ("ecx",&LB("eax"));
+       &movz   ("edx",&HB("eax"));
 for($i=0;$i<8;$i++) {
-    my $func = ($i==0)? movq : pxor;
-       &movb   (&LB("ecx"),&LB("eax"));
-       &movb   (&LB("edx"),&HB("eax"));
+    my $func = ($i==0)? \&movq : \&pxor;
+       &shr    ("eax",16);
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("eax"));
        &scale  ("edi","edx");
-       &shr    ("eax",16);
+       &movz   ("edx",&HB("eax"));
        &pxor   (@mm[0],&QWP(&row(0),$tbl,"esi",8));
        &$func  (@mm[1],&QWP(&row(1),$tbl,"edi",8));
-       &movb   (&LB("ecx"),&LB("eax"));
-       &movb   (&LB("edx"),&HB("eax"));
        &mov    ("eax",&DWP(($i+1)*8,"esp"));
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("ebx"));
        &scale  ("edi","edx");
+       &movz   ("edx",&HB("ebx"));
        &$func  (@mm[2],&QWP(&row(2),$tbl,"esi",8));
        &$func  (@mm[3],&QWP(&row(3),$tbl,"edi",8));
-       &movb   (&LB("ecx"),&LB("ebx"));
-       &movb   (&LB("edx"),&HB("ebx"));
+       &shr    ("ebx",16);
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("ebx"));
        &scale  ("edi","edx");
-       &shr    ("ebx",16);
+       &movz   ("edx",&HB("ebx"));
        &$func  (@mm[4],&QWP(&row(4),$tbl,"esi",8));
        &$func  (@mm[5],&QWP(&row(5),$tbl,"edi",8));
-       &movb   (&LB("ecx"),&LB("ebx"));
-       &movb   (&LB("edx"),&HB("ebx"));
        &mov    ("ebx",&DWP(($i+1)*8+4,"esp"));
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("eax"));
        &scale  ("edi","edx");
+       &movz   ("edx",&HB("eax"));
        &$func  (@mm[6],&QWP(&row(6),$tbl,"esi",8));
        &$func  (@mm[7],&QWP(&row(7),$tbl,"edi",8));
     push(@mm,shift(@mm));
@@ -153,32 +156,32 @@ for($i=0;$i<8;$i++) {
        for($i=0;$i<8;$i++) { &movq(&QWP($i*8,"esp"),@mm[$i]); }    # K=L
 
 for($i=0;$i<8;$i++) {
-       &movb   (&LB("ecx"),&LB("eax"));
-       &movb   (&LB("edx"),&HB("eax"));
+       &shr    ("eax",16);
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("eax"));
        &scale  ("edi","edx");
-       &shr    ("eax",16);
+       &movz   ("edx",&HB("eax"));
        &pxor   (@mm[0],&QWP(&row(0),$tbl,"esi",8));
        &pxor   (@mm[1],&QWP(&row(1),$tbl,"edi",8));
-       &movb   (&LB("ecx"),&LB("eax"));
-       &movb   (&LB("edx"),&HB("eax"));
        &mov    ("eax",&DWP(64+($i+1)*8,"esp"))         if ($i<7);
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("ebx"));
        &scale  ("edi","edx");
+       &movz   ("edx",&HB("ebx"));
        &pxor   (@mm[2],&QWP(&row(2),$tbl,"esi",8));
        &pxor   (@mm[3],&QWP(&row(3),$tbl,"edi",8));
-       &movb   (&LB("ecx"),&LB("ebx"));
-       &movb   (&LB("edx"),&HB("ebx"));
+       &shr    ("ebx",16);
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("ebx"));
        &scale  ("edi","edx");
-       &shr    ("ebx",16);
+       &movz   ("edx",&HB("ebx"));
        &pxor   (@mm[4],&QWP(&row(4),$tbl,"esi",8));
        &pxor   (@mm[5],&QWP(&row(5),$tbl,"edi",8));
-       &movb   (&LB("ecx"),&LB("ebx"));
-       &movb   (&LB("edx"),&HB("ebx"));
        &mov    ("ebx",&DWP(64+($i+1)*8+4,"esp"))       if ($i<7);
        &scale  ("esi","ecx");
+       &movz   ("ecx",&LB("eax"));
        &scale  ("edi","edx");
+       &movz   ("edx",&HB("eax"));
        &pxor   (@mm[6],&QWP(&row(6),$tbl,"esi",8));
        &pxor   (@mm[7],&QWP(&row(7),$tbl,"edi",8));
     push(@mm,shift(@mm));
@@ -488,5 +491,5 @@ for($i=0;$i<8;$i++) {
        &L(0xfb,0xee,0x7c,0x66,0xdd,0x17,0x47,0x9e);
        &L(0xca,0x2d,0xbf,0x07,0xad,0x5a,0x83,0x33);
 
-&function_end_B("whrilpool_block_mmx");
+&function_end_B("whirlpool_block_mmx");
 &asm_finish();