sub main'bswap { &out1("bswap",@_); &using486(); }
sub main'not { &out1("not",@_); }
sub main'call { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); }
+sub main'call_ptr { &out1p("call",@_); }
sub main'ret { &out0("ret"); }
sub main'nop { &out0("nop"); }
sub main'test { &out2("test",@_); }
local($name,$p1)=@_;
local($l,$t);
- push(@out,"\t$name\t ".&conv($p1)."\n");
+ push(@out,"\t$name\t".&conv($p1)."\n");
}
sub main'picmeup
local($f)=@_;
local($tmp)=<<___;
OPTION DOTNAME
-.CRT\$XIU SEGMENT DWORD PUBLIC 'DATA'
+.CRT\$XCU SEGMENT DWORD PUBLIC 'DATA'
EXTRN _$f:NEAR
DD _$f
-.CRT\$XIU ENDS
+.CRT\$XCU ENDS
___
push(@out,$tmp);
}
sub main'bswap { &out1("bswap",@_); &using486(); }
sub main'not { &out1("not",@_); }
sub main'call { &out1("call",($_[0]=~/^\@L/?'':$under).$_[0]); }
+sub main'call_ptr { &out1p("call",@_); }
sub main'ret { &out0("ret"); }
sub main'nop { &out0("nop"); }
sub main'test { &out2("test",@_); }
my($name,$p1)=@_;
my($l,$t);
- push(@out,"\t$name\t ".&conv($p1)."\n");
+ push(@out,"\t$name\t".&conv($p1)."\n");
}
sub main'picmeup
if ($main'win32)
{
local($tmp)=<<___;
-segment .CRT\$XIU data
+segment .CRT\$XCU data
extern $under$f
DD $under$f
___
{ if ($label{$i} eq $_[0]) { $pre=''; last; } }
&out1("call",$pre.$_[0]);
}
+sub main'call_ptr { &out1p("call",@_); }
sub main'ret { &out0("ret"); }
sub main'nop { &out0("nop"); }
sub main'test { &out2("testl",@_); }
&mov ("eax",&DWP(12+$i*4,"ebp"));
&mov (&DWP(0+$i*4,"esp"),"eax");
}
- &call (&DWP(8,"ebp"));# make the call...
+ &call_ptr (&DWP(8,"ebp"));# make the call...
&mov ("esp","ebp"); # ... and just restore the stack pointer
# without paying attention to what we called,
# (__cdecl *func) or (__stdcall *one).