Support for .asciz directive in perlasm modules.
[openssl.git] / crypto / perlasm / ppc-xlate.pl
index 31876e56b252849f67a6564f28a2cdef2b0ed255..e36b5aedb257770a9d6d0a707a794457bb749d95 100755 (executable)
@@ -52,12 +52,26 @@ my $globl = sub {
     $$global = $name;
     $ret;
 };
+my $text = sub {
+    ($flavour =~ /aix/) ? ".csect" : ".text";
+};
 my $machine = sub {
     my $junk = shift;
     my $arch = shift;
-    $arch = "ppc970" if ($arch eq "any" and $flavour =~ /osx/);
+    if ($flavour =~ /osx/)
+    {  $arch =~ s/\"//g;
+       $arch = ($flavour=~/64/) ? "ppc970-64" : "ppc970" if ($arch eq "any");
+    }
     ".machine  $arch";
 };
+my $asciz = sub {
+    shift;
+    my $line = join(",",@_);
+    if ($line =~ /^"(.*)"$/)
+    {  ".byte  " . join(",",unpack("C*",$1),0);        }
+    else
+    {  "";     }
+};
 
 ################################################################
 # simplified mnemonics not handled by at least one assembler
@@ -65,12 +79,10 @@ my $machine = sub {
 my $cmplw = sub {
     my $f = shift;
     my $cr = 0; $cr = shift if ($#_>1);
-    "  cmpl$f  ".join(',',$cr,0,@_);
-};
-my $cmpld = sub {
-    my $f = shift;
-    my $cr = 0; $cr = shift if ($#_>1);
-    "  cmpl$f  ".join(',',$cr,1,@_);
+    # Some out-of-date 32-bit GNU assembler just can't handle cmplw...
+    ($flavour =~ /linux.*32/) ?
+       "       .long   ".sprintf "0x%x",31<<26|$cr<<23|$_[0]<<16|$_[1]<<11|64 :
+       "       cmplw   ".join(',',$cr,@_);
 };
 my $bdnz = sub {
     my $f = shift;
@@ -102,6 +114,7 @@ while($line=<>) {
        my $mnemonic = $2;
        my $f = $3;
        my $opcode = eval("\$$mnemonic");
+       $line =~ s|\bc?r([0-9]+)\b|$1|g if ($c ne "." and $flavour !~ /osx/);
        if (ref($opcode) eq 'CODE') { $line = &$opcode($f,split(',',$line)); }
        elsif ($mnemonic)           { $line = $c.$mnemonic.$f."\t".$line; }
     }