Padlock engine: make it independent of inline assembler.
[openssl.git] / crypto / perlasm / x86gas.pl
index 25f7ba5..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);}
 
@@ -150,18 +151,18 @@ 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,8";
-       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);
 }