sha1-x86_64.pl: add missing rex prefix in shaext.
authorAndy Polyakov <appro@openssl.org>
Sat, 14 Jun 2014 13:26:14 +0000 (15:26 +0200)
committerAndy Polyakov <appro@openssl.org>
Sat, 14 Jun 2014 13:28:38 +0000 (15:28 +0200)
PR: 3405
(cherry picked from commit c9cf29cca22d4d724a1e772bc5fdc201b2822f1d)

crypto/sha/asm/sha1-x86_64.pl

index 6dc64a2eadf0121efd15f310a16cb6d649e6a892..9aa128ed3aef4218171952a895cd69bffd9eb2b5 100755 (executable)
@@ -2030,8 +2030,12 @@ sub sha1op38 {
                "sha1msg1"  => 0xc9,
                "sha1msg2"  => 0xca     );
 
-    if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-7]),\s*%xmm([0-7])/) {
+    if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) {
       my @opcode=(0x0f,0x38);
+      my $rex=0;
+       $rex|=0x04                      if ($2>=8);
+       $rex|=0x01                      if ($1>=8);
+       unshift @opcode,0x40|$rex       if ($rex);
        push @opcode,$opcodelet{$instr};
        push @opcode,0xc0|($1&7)|(($2&7)<<3);           # ModR/M
        return ".byte\t".join(',',@opcode);