chacha/asm/chacha-ppc.pl: fix big-endian build.
authorAndy Polyakov <appro@openssl.org>
Thu, 7 Jun 2018 12:04:34 +0000 (14:04 +0200)
committerAndy Polyakov <appro@openssl.org>
Fri, 8 Jun 2018 13:49:09 +0000 (15:49 +0200)
It's kind of a "brown-bag" bug, as I did recognize the problem and
verified an ad-hoc solution, but failed to follow up with cross-checks
prior filing previous merge request.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6435)

crypto/chacha/asm/chacha-ppc.pl

index 96cdfeb7f82f61beec64c57ae22d9d33f9f5504e..f4f8610bf3bf78128cca227aa8eac5781be3ea7e 100755 (executable)
@@ -438,9 +438,9 @@ my ($a,$b,$c,$d)=@_;
        "&vxor          ('$b','$b','$c')",
        "&vrlw          ('$b','$b','$seven')",
 
-       "&vsldoi        ('$c','$c','$c',8)",
-       "&vsldoi        ('$b','$b','$b',$odd?4:12)",
-       "&vsldoi        ('$d','$d','$d',$odd?12:4)"
+       "&vrldoi        ('$c','$c',8)",
+       "&vrldoi        ('$b','$b',$odd?4:12)",
+       "&vrldoi        ('$d','$d',$odd?12:4)"
        );
 }
 
@@ -1334,11 +1334,12 @@ foreach (split("\n",$code)) {
            s/\?lvsr/lvsl/      or
            s/\?lvsl/lvsr/      or
            s/\?(vperm\s+v[0-9]+,\s*)(v[0-9]+,\s*)(v[0-9]+,\s*)(v[0-9]+)/$1$3$2$4/ or
-           s/(vsldoi\s+v[0-9]+,\s*)(v[0-9]+,)\s*(v[0-9]+,\s*)([0-9]+)/$1$3$2 16-$4/;
+           s/vrldoi(\s+v[0-9]+,\s*)(v[0-9]+,)\s*([0-9]+)/vsldoi$1$2$2 16-$3/;
        } else {                        # little-endian
            s/le\?//            or
            s/be\?/#be#/        or
-           s/\?([a-z]+)/$1/;
+           s/\?([a-z]+)/$1/    or
+           s/vrldoi(\s+v[0-9]+,\s*)(v[0-9]+,)\s*([0-9]+)/vsldoi$1$2$2 $3/;
        }
 
        print $_,"\n";