DES PIC-ification. Windows companion.
authorAndy Polyakov <appro@openssl.org>
Sat, 14 Dec 2002 17:52:35 +0000 (17:52 +0000)
committerAndy Polyakov <appro@openssl.org>
Sat, 14 Dec 2002 17:52:35 +0000 (17:52 +0000)
crypto/perlasm/x86ms.pl
crypto/perlasm/x86nasm.pl

index 5229afeb647084194a6ca601260f0885ed6942c1..abcb7c1303edc0bc97ca4efa8fafc50dfb6e9807 100644 (file)
@@ -92,6 +92,8 @@ sub get_mem
                $addr="_$addr";
                }
 
+       if ($addr =~ /^.+\-.+$/) { $addr="($addr)"; }
+
        $reg1="$regs{$reg1}" if defined($regs{$reg1});
        $reg2="$regs{$reg2}" if defined($regs{$reg2});
        if (($addr ne "") && ($addr ne 0))
@@ -111,6 +113,7 @@ sub get_mem
                {
                $ret.="[$reg1$post]"
                }
+       $ret =~ s/\[\]//;       # in case $addr was the only argument
        return($ret);
        }
 
@@ -151,7 +154,7 @@ sub main'push       { &out1("push",@_); $stack+=4; }
 sub main'pop   { &out1("pop",@_); $stack-=4; }
 sub main'bswap { &out1("bswap",@_); &using486(); }
 sub main'not   { &out1("not",@_); }
-sub main'call  { &out1("call",'_'.$_[0]); }
+sub main'call  { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); }
 sub main'ret   { &out0("ret"); }
 sub main'nop   { &out0("nop"); }
 
@@ -338,7 +341,7 @@ sub main'set_label
        {
        if (!defined($label{$_[0]}))
                {
-               $label{$_[0]}="${label}${_[0]}";
+               $label{$_[0]}="\$${label}${_[0]}";
                $label++;
                }
        if((defined $_[2]) && ($_[2] == 1))
index 819151c6bcae89ae829fc170bb9182ac61e299ec..85cb3885ec74c709a45bc24d60a6eeaabfff1920 100644 (file)
@@ -98,6 +98,8 @@ sub get_mem
                $addr="_$addr";
                }
 
+       if ($addr =~ /^.+\-.+$/) { $addr="($addr)"; }
+
        $reg1="$regs{$reg1}" if defined($regs{$reg1});
        $reg2="$regs{$reg2}" if defined($regs{$reg2});
        if (($addr ne "") && ($addr ne 0))
@@ -117,6 +119,7 @@ sub get_mem
                {
                $ret.="$reg1$post]"
                }
+       $ret =~ s/\+\]/]/; # in case $addr was the only argument
        return($ret);
        }
 
@@ -160,7 +163,7 @@ sub main'push       { &out1("push",@_); $stack+=4; }
 sub main'pop   { &out1("pop",@_); $stack-=4; }
 sub main'bswap { &out1("bswap",@_); &using486(); }
 sub main'not   { &out1("not",@_); }
-sub main'call  { &out1("call",'_'.$_[0]); }
+sub main'call  { &out1("call",($_[0]=~/^\.L/?'':'_').$_[0]); }
 sub main'ret   { &out0("ret"); }
 sub main'nop   { &out0("nop"); }
 
@@ -312,7 +315,7 @@ sub main'label
        {
        if (!defined($label{$_[0]}))
                {
-               $label{$_[0]}="\$${label}${_[0]}";
+               $label{$_[0]}=".${label}${_[0]}";
                $label++;
                }
        return($label{$_[0]});
@@ -322,7 +325,7 @@ sub main'set_label
        {
        if (!defined($label{$_[0]}))
                {
-               $label{$_[0]}="${label}${_[0]}";
+               $label{$_[0]}=".${label}${_[0]}";
                $label++;
                }
        push(@out,"$label{$_[0]}:\n");