PA-RISC assembly pack: make it work with GNU assembler for HP-UX.
authorAndy Polyakov <appro@openssl.org>
Sun, 24 Jun 2018 11:29:29 +0000 (13:29 +0200)
committerAndy Polyakov <appro@openssl.org>
Mon, 25 Jun 2018 14:45:48 +0000 (16:45 +0200)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6583)

crypto/aes/asm/aes-parisc.pl
crypto/bn/asm/parisc-mont.pl
crypto/modes/asm/ghash-parisc.pl
crypto/pariscid.pl
crypto/rc4/asm/rc4-parisc.pl
crypto/sha/asm/sha1-parisc.pl
crypto/sha/asm/sha512-parisc.pl

index b688ab3..93ed09c 100644 (file)
@@ -1012,6 +1012,11 @@ L\$AES_Td
        .STRINGZ "AES for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
 ___
 
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+       =~ /GNU assembler/) {
+    $gnuas = 1;
+}
+
 foreach (split("\n",$code)) {
        s/\`([^\`]*)\`/eval $1/ge;
 
@@ -1022,8 +1027,12 @@ foreach (split("\n",$code)) {
                $SIZE_T==4 ? sprintf("extru%s,%d,8,",$1,31-$2)
                :            sprintf("extrd,u%s,%d,8,",$1,63-$2)/e;
 
+       s/(\.LEVEL\s+2\.0)W/$1w/        if ($gnuas && $SIZE_T==8);
+       s/\.SPACE\s+\$TEXT\$/.text/     if ($gnuas && $SIZE_T==8);
+       s/\.SUBSPA.*//                  if ($gnuas && $SIZE_T==8);
        s/,\*/,/                        if ($SIZE_T==4);
        s/\bbv\b(.*\(%r2\))/bve$1/      if ($SIZE_T==8);
+
        print $_,"\n";
 }
 close STDOUT;
index 78ab2dc..aa9f626 100644 (file)
@@ -984,6 +984,11 @@ sub assemble {
     ref($opcode) eq 'CODE' ? &$opcode($mod,$args) : "\t$mnemonic$mod\t$args";
 }
 
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+       =~ /GNU assembler/) {
+    $gnuas = 1;
+}
+
 foreach (split("\n",$code)) {
        s/\`([^\`]*)\`/eval $1/ge;
        # flip word order in 64-bit mode...
@@ -991,7 +996,10 @@ foreach (split("\n",$code)) {
        # assemble 2.0 instructions in 32-bit mode...
        s/^\s+([a-z]+)([\S]*)\s+([\S]*)/&assemble($1,$2,$3)/e if ($BN_SZ==4);
 
-       s/\bbv\b/bve/gm if ($SIZE_T==8);
+       s/(\.LEVEL\s+2\.0)W/$1w/        if ($gnuas && $SIZE_T==8);
+       s/\.SPACE\s+\$TEXT\$/.text/     if ($gnuas && $SIZE_T==8);
+       s/\.SUBSPA.*//                  if ($gnuas && $SIZE_T==8);
+       s/\bbv\b/bve/                   if ($SIZE_T==8);
 
        print $_,"\n";
 }
index fef2db1..654d9e9 100644 (file)
@@ -724,6 +724,11 @@ sub assemble {
     ref($opcode) eq 'CODE' ? &$opcode($mod,$args) : "\t$mnemonic$mod\t$args";
 }
 
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+       =~ /GNU assembler/) {
+    $gnuas = 1;
+}
+
 foreach (split("\n",$code)) {
        s/\`([^\`]*)\`/eval $1/ge;
        if ($SIZE_T==4) {
@@ -731,7 +736,12 @@ foreach (split("\n",$code)) {
                s/cmpb,\*/comb,/;
                s/,\*/,/;
        }
-       s/\bbv\b/bve/   if ($SIZE_T==8);
+
+       s/(\.LEVEL\s+2\.0)W/$1w/        if ($gnuas && $SIZE_T==8);
+       s/\.SPACE\s+\$TEXT\$/.text/     if ($gnuas && $SIZE_T==8);
+       s/\.SUBSPA.*//                  if ($gnuas && $SIZE_T==8);
+       s/\bbv\b/bve/                   if ($SIZE_T==8);
+
        print $_,"\n";
 }
 
index 3d4a5f8..5a231c4 100644 (file)
@@ -255,9 +255,22 @@ L\$done2
        .PROCEND
 ___
 }
-$code =~ s/cmpib,\*/comib,/gm  if ($SIZE_T==4);
-$code =~ s/,\*/,/gm            if ($SIZE_T==4);
-$code =~ s/\bbv\b/bve/gm       if ($SIZE_T==8);
-print $code;
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+       =~ /GNU assembler/) {
+    $gnuas = 1;
+}
+
+foreach(split("\n",$code)) {
+
+       s/(\.LEVEL\s+2\.0)W/$1w/        if ($gnuas && $SIZE_T==8);
+       s/\.SPACE\s+\$TEXT\$/.text/     if ($gnuas && $SIZE_T==8);
+       s/\.SUBSPA.*//                  if ($gnuas && $SIZE_T==8);
+       s/cmpib,\*/comib,/              if ($SIZE_T==4);
+       s/,\*/,/                        if ($SIZE_T==4);
+       s/\bbv\b/bve/                   if ($SIZE_T==8);
+
+       print $_,"\n";
+}
 close STDOUT;
 
index 229c6c7..b9927da 100644 (file)
@@ -313,9 +313,21 @@ L\$opts
        .STRINGZ "rc4(4x,`$SZ==1?"char":"int"`)"
        .STRINGZ "RC4 for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
 ___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-$code =~ s/cmpib,\*/comib,/gm  if ($SIZE_T==4);
-$code =~ s/\bbv\b/bve/gm       if ($SIZE_T==8);
 
-print $code;
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+       =~ /GNU assembler/) {
+    $gnuas = 1;
+}
+
+foreach(split("\n",$code)) {
+       s/\`([^\`]*)\`/eval $1/ge;
+
+       s/(\.LEVEL\s+2\.0)W/$1w/        if ($gnuas && $SIZE_T==8);
+       s/\.SPACE\s+\$TEXT\$/.text/     if ($gnuas && $SIZE_T==8);
+       s/\.SUBSPA.*//                  if ($gnuas && $SIZE_T==8);
+       s/cmpib,\*/comib,/              if ($SIZE_T==4);
+       s/\bbv\b/bve/                   if ($SIZE_T==8);
+
+       print $_,"\n";
+}
 close STDOUT;
index 822288e..88f4f2e 100644 (file)
@@ -260,8 +260,20 @@ $code.=<<___;
        .STRINGZ "SHA1 block transform for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
 ___
 
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-$code =~ s/,\*/,/gm            if ($SIZE_T==4);
-$code =~ s/\bbv\b/bve/gm       if ($SIZE_T==8);
-print $code;
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+       =~ /GNU assembler/) {
+    $gnuas = 1;
+}
+
+foreach(split("\n",$code)) {
+       s/\`([^\`]*)\`/eval $1/ge;
+
+       s/(\.LEVEL\s+2\.0)W/$1w/        if ($gnuas && $SIZE_T==8);
+       s/\.SPACE\s+\$TEXT\$/.text/     if ($gnuas && $SIZE_T==8);
+       s/\.SUBSPA.*//                  if ($gnuas && $SIZE_T==8);
+       s/,\*/,/                        if ($SIZE_T==4);
+       s/\bbv\b/bve/                   if ($SIZE_T==8);
+
+       print $_,"\n";
+}
 close STDOUT;
index 5a082ba..d9933f0 100755 (executable)
@@ -767,6 +767,11 @@ sub assemble {
     ref($opcode) eq 'CODE' ? &$opcode($mod,$args) : "\t$mnemonic$mod\t$args";
 }
 
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+       =~ /GNU assembler/) {
+    $gnuas = 1;
+}
+
 foreach (split("\n",$code)) {
        s/\`([^\`]*)\`/eval $1/ge;
 
@@ -790,9 +795,11 @@ foreach (split("\n",$code)) {
 
        s/^\s+([a-z]+)([\S]*)\s+([\S]*)/&assemble($1,$2,$3)/e if ($SIZE_T==4);
 
-       s/cmpb,\*/comb,/ if ($SIZE_T==4);
-
-       s/\bbv\b/bve/    if ($SIZE_T==8);
+       s/(\.LEVEL\s+2\.0)W/$1w/        if ($gnuas && $SIZE_T==8);
+       s/\.SPACE\s+\$TEXT\$/.text/     if ($gnuas && $SIZE_T==8);
+       s/\.SUBSPA.*//                  if ($gnuas && $SIZE_T==8);
+       s/cmpb,\*/comb,/                if ($SIZE_T==4);
+       s/\bbv\b/bve/                   if ($SIZE_T==8);
 
        print $_,"\n";
 }