Padlock engine: make it independent of inline assembler.
[openssl.git] / crypto / perlasm / x86gas.pl
index 6eab727..3a79106 100644 (file)
@@ -47,6 +47,7 @@ sub ::generic
     if ($#_==0)                                { &::emit($opcode);             }
     elsif ($opcode =~ m/^j/o && $#_==1)        { &::emit($opcode,@arg);        }
     elsif ($opcode eq "call" && $#_==1)        { &::emit($opcode,@arg);        }
+    elsif ($opcode eq "clflush" && $#_==1){ &::emit($opcode,@arg);     }
     elsif ($opcode =~ m/^set/&& $#_==1)        { &::emit($opcode,@arg);        }
     else                               { &::emit($opcode.$suffix,@arg);}
 
@@ -91,6 +92,7 @@ sub ::DWP
 }
 sub ::QWP      { &::DWP(@_);   }
 sub ::BP       { &::DWP(@_);   }
+sub ::WP       { &::DWP(@_);   }
 sub ::BC       { @_;           }
 sub ::DWC      { @_;           }
 
@@ -149,22 +151,23 @@ sub ::public_label
 {   push(@out,".globl\t".&::LABEL($_[0],$nmdecor.$_[0])."\n");   }
 
 sub ::file_end
-{   if (grep {/\b${nmdecor}OPENSSL_ia32cap_P\b/i} @out) {
-       my $tmp=".comm\t${nmdecor}OPENSSL_ia32cap_P,4";
-       if ($::elf)     { push (@out,"$tmp,4\n"); }
-       else            { push (@out,"$tmp\n"); }
-    }
-    if ($::macosx)
+{   if ($::macosx)
     {  if (%non_lazy_ptr)
        {   push(@out,".section __IMPORT,__pointers,non_lazy_symbol_pointers\n");
            foreach $i (keys %non_lazy_ptr)
            {   push(@out,"$non_lazy_ptr{$i}:\n.indirect_symbol\t$i\n.long\t0\n");   }
        }
     }
+    if (grep {/\b${nmdecor}OPENSSL_ia32cap_P\b/i} @out) {
+       my $tmp=".comm\t${nmdecor}OPENSSL_ia32cap_P,8";
+       if ($::elf)     { push (@out,"$tmp,4\n"); }
+       else            { push (@out,"$tmp\n"); }
+    }
     push(@out,$initseg) if ($initseg);
 }
 
 sub ::data_byte        {   push(@out,".byte\t".join(',',@_)."\n");   }
+sub ::data_short{   push(@out,".value\t".join(',',@_)."\n");  }
 sub ::data_word {   push(@out,".long\t".join(',',@_)."\n");   }
 
 sub ::align