New switch "386" to generate 80386 code (emulate bswap).
This commit is contained in:
parent
bc37a6b81c
commit
0f247decd0
@ -18,6 +18,11 @@ sub main'asm_init
|
|||||||
($type,$fn)=@_;
|
($type,$fn)=@_;
|
||||||
$filename=$fn;
|
$filename=$fn;
|
||||||
|
|
||||||
|
if ($ARGV[$#ARGV] eq "386")
|
||||||
|
{
|
||||||
|
$i386=1;
|
||||||
|
}
|
||||||
|
|
||||||
$cpp=$sol=$aout=$win32=0;
|
$cpp=$sol=$aout=$win32=0;
|
||||||
if ( ($type eq "elf"))
|
if ( ($type eq "elf"))
|
||||||
{ require "x86unix.pl"; }
|
{ require "x86unix.pl"; }
|
||||||
@ -32,6 +37,8 @@ sub main'asm_init
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
print STDERR <<"EOF";
|
print STDERR <<"EOF";
|
||||||
|
Usage: $filename <target> [386]
|
||||||
|
|
||||||
Pick one target type from
|
Pick one target type from
|
||||||
elf - linux, FreeBSD etc
|
elf - linux, FreeBSD etc
|
||||||
a.out - old linux
|
a.out - old linux
|
||||||
|
@ -1,11 +1,5 @@
|
|||||||
#!/usr/local/bin/perl
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
# Because the bswapl instruction is not supported for old assembers
|
|
||||||
# (it was a new instruction for the 486), I've added .byte xxxx code
|
|
||||||
# to put it in.
|
|
||||||
# eric 24-Apr-1998
|
|
||||||
#
|
|
||||||
|
|
||||||
package x86unix;
|
package x86unix;
|
||||||
|
|
||||||
$label="L000";
|
$label="L000";
|
||||||
@ -158,12 +152,27 @@ sub main'dec { &out1("decl",@_); }
|
|||||||
sub main'inc { &out1("incl",@_); }
|
sub main'inc { &out1("incl",@_); }
|
||||||
sub main'push { &out1("pushl",@_); $stack+=4; }
|
sub main'push { &out1("pushl",@_); $stack+=4; }
|
||||||
sub main'pop { &out1("popl",@_); $stack-=4; }
|
sub main'pop { &out1("popl",@_); $stack-=4; }
|
||||||
sub main'bswap { &out1("bswapl",@_); }
|
|
||||||
sub main'not { &out1("notl",@_); }
|
sub main'not { &out1("notl",@_); }
|
||||||
sub main'call { &out1("call",$under.$_[0]); }
|
sub main'call { &out1("call",$under.$_[0]); }
|
||||||
sub main'ret { &out0("ret"); }
|
sub main'ret { &out0("ret"); }
|
||||||
sub main'nop { &out0("nop"); }
|
sub main'nop { &out0("nop"); }
|
||||||
|
|
||||||
|
# The bswapl instruction is new for the 486. Emulate if i386.
|
||||||
|
sub main'bswap
|
||||||
|
{
|
||||||
|
if ($main'i386)
|
||||||
|
{
|
||||||
|
&main'comment("bswapl @_");
|
||||||
|
&main'exch(main'HB(@_),main'LB(@_));
|
||||||
|
&main'rotr(@_,16);
|
||||||
|
&main'exch(main'HB(@_),main'LB(@_));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
&out1("bswapl",@_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub out2
|
sub out2
|
||||||
{
|
{
|
||||||
local($name,$p1,$p2)=@_;
|
local($name,$p1,$p2)=@_;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user