Solaris x86_64 /usr/ccs/bin/as support.
[openssl.git] / crypto / perlasm / x86ms.pl
index 4f4a6fea9d5dc526a63d58df19cb76a0571e2ff4..d1cb7ee0ac76df77e005dbc2ffd943aba4bf8477 100644 (file)
@@ -92,7 +92,7 @@ sub get_mem
                $reg2=&conv($1);
                $addr="_$2";
                }
-       elsif ($addr =~ /^[_a-zA-Z]/)
+       elsif ($addr =~ /^[_a-z][_a-z0-9]*$/i)
                {
                $addr="_$addr";
                }
@@ -175,6 +175,8 @@ sub main'cpuid  { &out0("DW\t0A20Fh"); }
 sub main'rdtsc  { &out0("DW\t0310Fh"); }
 sub main'halt  { &out0("hlt"); }
 sub main'movz  { &out2("movzx",@_); }
+sub main'neg   { &out1("neg",@_); }
+sub main'cld   { &out0("cld"); }
 
 # SSE2
 sub main'emms  { &out0("emms"); }
@@ -256,7 +258,7 @@ sub main'function_begin
        push(@labels,$func);
 
        local($tmp)=<<"EOF";
-_TEXT\$        SEGMENT PARA
+_TEXT\$        SEGMENT PAGE 'CODE'
 PUBLIC _$func
 $extra
 _$func PROC NEAR
@@ -274,7 +276,7 @@ sub main'function_begin_B
        local($func,$extra)=@_;
 
        local($tmp)=<<"EOF";
-_TEXT\$        SEGMENT PARA
+_TEXT\$        SEGMENT PAGE 'CODE'
 PUBLIC _$func
 $extra
 _$func PROC NEAR
@@ -368,6 +370,12 @@ sub main'comment
                }
        }
 
+sub main'public_label
+       {
+       $label{$_[0]}="_$_[0]"  if (!defined($label{$_[0]}));
+       push(@out,"PUBLIC\t$label{$_[0]}\n");
+       }
+
 sub main'label
        {
        if (!defined($label{$_[0]}))
@@ -385,10 +393,18 @@ sub main'set_label
                $label{$_[0]}="\$${label}${_[0]}";
                $label++;
                }
+       if ($_[1]!=0 && $_[1]>1)
+               {
+               main'align($_[1]);
+               }
        if((defined $_[2]) && ($_[2] == 1))
                {
                push(@out,"$label{$_[0]}::\n");
                }
+       elsif ($label{$_[0]} !~ /^\$/)
+               {
+               push(@out,"$label{$_[0]}\tLABEL PTR\n");
+               }
        else
                {
                push(@out,"$label{$_[0]}:\n");