perlasm/x86*.pl updates.
authorAndy Polyakov <appro@openssl.org>
Thu, 3 Jan 2008 16:21:06 +0000 (16:21 +0000)
committerAndy Polyakov <appro@openssl.org>
Thu, 3 Jan 2008 16:21:06 +0000 (16:21 +0000)
crypto/perlasm/x86gas.pl
crypto/perlasm/x86masm.pl
crypto/perlasm/x86nasm.pl

index 575b13325267ed4da700f5da0014cf34d5383e5c..3f2eb7ae054c6370a4f6456e592aaf416d8f1dd0 100644 (file)
@@ -160,7 +160,9 @@ sub ::comment
        }
 
 sub ::external_label
        }
 
 sub ::external_label
-{   push(@out,".extern\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");   }
+{   foreach(@_)
+    {  push(@out,".extern\t".&::LABEL($_,$nmdecor.$_)."\n");   }
+}
 
 sub ::public_label
 {   push(@out,".globl\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");   }
 
 sub ::public_label
 {   push(@out,".globl\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");   }
index 7a0f4aa5bb1b2b045c5d99439a046543e00a19f3..33ceeb5ab4e4d53e474149ed92f9c4a0b928ff3e 100644 (file)
@@ -16,6 +16,10 @@ sub ::generic
     $arg[0] =~ s/0x([0-9a-f]+)/0$1h/oi if (defined($arg[0]));
     $arg[1] =~ s/0x([0-9a-f]+)/0$1h/oi if (defined($arg[1]));
 
     $arg[0] =~ s/0x([0-9a-f]+)/0$1h/oi if (defined($arg[0]));
     $arg[1] =~ s/0x([0-9a-f]+)/0$1h/oi if (defined($arg[1]));
 
+    # fix xmm references
+    $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i);
+    $arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
+
     &::emit($opcode,@arg);
   1;
 }
     &::emit($opcode,@arg);
   1;
 }
@@ -132,7 +136,9 @@ sub ::comment {   foreach (@_) { push(@out,"\t; $_\n"); }   }
 { my $l=shift; push(@out,$l.($l=~/^\Q${::lbdecor}\E[0-9]{3}/?":\n":"::\n")); };
 
 sub ::external_label
 { my $l=shift; push(@out,$l.($l=~/^\Q${::lbdecor}\E[0-9]{3}/?":\n":"::\n")); };
 
 sub ::external_label
-{   push(@out, "EXTERN\t".&::LABEL($_[0],$nmdecor.$_[0]).":NEAR\n");   }
+{   foreach(@_)
+    {  push(@out, "EXTERN\t".&::LABEL($_,$nmdecor.$_).":NEAR\n");   }
+}
 
 sub ::public_label
 {   push(@out,"PUBLIC\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");   }
 
 sub ::public_label
 {   push(@out,"PUBLIC\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");   }
@@ -155,7 +161,7 @@ sub ::initseg
 { my $f=$nmdecor.shift;
 
     $initseg.=<<___;
 { my $f=$nmdecor.shift;
 
     $initseg.=<<___;
-.CRT\$XCU      SEGMENT DWORD PUBLIC DATA
+.CRT\$XCU      SEGMENT DWORD PUBLIC 'DATA'
 EXTERN $f:NEAR
 DD     $f
 .CRT\$XCU      ENDS
 EXTERN $f:NEAR
 DD     $f
 .CRT\$XCU      ENDS
index 1154f04c34a67e33dd0f2998d4a59cf54e2d6964..0ec03ff8e0a6fe0142d9f30b31002462ee5c4064 100644 (file)
@@ -123,7 +123,9 @@ ___
 sub ::comment {   foreach (@_) { push(@out,"\t; $_\n"); }   }
 
 sub ::external_label
 sub ::comment {   foreach (@_) { push(@out,"\t; $_\n"); }   }
 
 sub ::external_label
-{   push(@out,"${drdecor}extern\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");   }
+{   foreach(@_)
+    {  push(@out,"${drdecor}extern\t".&::LABEL($_,$nmdecor.$_)."\n");   }
+}
 
 sub ::public_label
 {   push(@out,"${drdecor}global\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");  }
 
 sub ::public_label
 {   push(@out,"${drdecor}global\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");  }