* correct the fixups for inlined assembler code

This commit is contained in:
pierre 2000-03-16 15:10:25 +00:00
parent a511be87c4
commit 33cc2a0a35

View File

@ -749,8 +749,12 @@ Begin
{ this is not allowed, because we don't know if the self
register is still free, and loading it first is also
not possible, because this could break code }
opr.typ:=OPR_CONSTANT;
opr.val:=pvarsym(sym)^.address;
{opr.typ:=OPR_CONSTANT;
opr.val:=pvarsym(sym)^.address;}
{ I do not agree here people using method vars should ensure
that %esi is valid there }
opr.ref.base:=self_pointer;
opr.ref.offset:=pvarsym(sym)^.address;
hasvar:=true;
SetupVar:=true;
Exit;
@ -769,7 +773,9 @@ Begin
implementation
if (pvarsym(sym)^.owner=procinfo^.def^.parast) or }
GetOffset then
opr.ref.base:=procinfo^.framepointer
begin
opr.ref.base:=procinfo^.framepointer;
end
else
begin
if (procinfo^.framepointer=R_ESP) and
@ -783,8 +789,16 @@ Begin
message1(asmr_e_local_para_unreachable,hs);
end;
opr.ref.offset:=pvarsym(sym)^.address;
opr.ref.offsetfixup:=aktprocsym^.definition^.parast^.address_fixup;
opr.ref.options:=ref_parafixup;
if (lexlevel=pvarsym(sym)^.owner^.symtablelevel) then
begin
opr.ref.offsetfixup:=aktprocsym^.definition^.parast^.address_fixup;
opr.ref.options:=ref_parafixup;
end
else
begin
opr.ref.offsetfixup:=0;
opr.ref.options:=ref_none;
end;
end;
localsymtable :
begin
@ -810,8 +824,16 @@ Begin
message1(asmr_e_local_para_unreachable,hs);
end;
opr.ref.offset:=-(pvarsym(sym)^.address);
opr.ref.options:=ref_localfixup;
opr.ref.offsetfixup:=aktprocsym^.definition^.localst^.address_fixup;
if (lexlevel=pvarsym(sym)^.owner^.symtablelevel) then
begin
opr.ref.offsetfixup:=aktprocsym^.definition^.localst^.address_fixup;
opr.ref.options:=ref_localfixup;
end
else
begin
opr.ref.offsetfixup:=0;
opr.ref.options:=ref_none;
end;
end;
end;
end;
@ -1479,7 +1501,10 @@ end;
end.
{
$Log$
Revision 1.36 2000-03-15 23:10:01 pierre
Revision 1.37 2000-03-16 15:10:25 pierre
* correct the fixups for inlined assembler code
Revision 1.36 2000/03/15 23:10:01 pierre
* fix for bug 848 (that still genrated wrong code)
+ better testing for variables used in assembler
(gives an error if variable is not directly reachable !)