* regvar fixes from Peter

This commit is contained in:
Jonas Maebe 2004-10-06 19:26:50 +00:00
parent 0cf348b3df
commit 2b030488b2
3 changed files with 22 additions and 10 deletions

View File

@ -267,6 +267,10 @@ implementation
{ reference in nested procedures, variable needs to be in memory }
make_not_regable(self);
end;
{ static variables referenced in procedures, variable needs to be in memory }
if (symtable.symtabletype=staticsymtable) and
(symtable.symtablelevel<>current_procinfo.procdef.parast.symtablelevel) then
make_not_regable(self);
{ fix self type which is declared as voidpointer in the
definition }
if vo_is_self in tvarsym(symtableentry).varoptions then
@ -1141,7 +1145,10 @@ begin
end.
{
$Log$
Revision 1.129 2004-09-26 17:45:30 peter
Revision 1.130 2004-10-06 19:26:50 jonas
* regvar fixes from Peter
Revision 1.129 2004/09/26 17:45:30 peter
* simple regvar support, not yet finished
Revision 1.128 2004/06/20 08:55:29 florian

View File

@ -1375,17 +1375,12 @@ implementation
procedure tvarsym.ppuwrite(ppufile:tcompilerppufile);
var
hvo : tvaroptions;
begin
inherited writesym(ppufile);
ppufile.putbyte(byte(varspez));
ppufile.putlongint(fieldoffset);
ppufile.puttype(vartype);
{ symbols which are load are never candidates for a register,
turn off the regable }
hvo:=varoptions-[vo_regable,vo_fpuregable];
ppufile.putsmallset(hvo);
ppufile.putsmallset(varoptions);
if [vo_is_C_var,vo_is_dll_var]*varoptions<>[] then
ppufile.putstring(_mangledname^);
ppufile.writeentry(ibvarsym);
@ -2216,7 +2211,10 @@ implementation
end.
{
$Log$
Revision 1.178 2004-10-01 15:22:22 peter
Revision 1.179 2004-10-06 19:26:50 jonas
* regvar fixes from Peter
Revision 1.178 2004/10/01 15:22:22 peter
* don't add stabs for register variables
Revision 1.177 2004/09/26 17:45:30 peter

View File

@ -1632,13 +1632,17 @@ unit cgx86;
var
href : treference;
r : integer;
hreg : tregister;
begin
{ Copy registers from temp }
href:=current_procinfo.save_regs_ref;
for r:=low(saved_standard_registers) to high(saved_standard_registers) do
if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
begin
a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE));
hreg:=newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE);
{ Allocate register so the optimizer does remove the load }
a_reg_alloc(list,hreg);
a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,hreg);
inc(href.offset,sizeof(aint));
end;
tg.UnGetTemp(list,current_procinfo.save_regs_ref);
@ -1675,7 +1679,10 @@ unit cgx86;
end.
{
$Log$
Revision 1.128 2004-10-05 20:41:02 peter
Revision 1.129 2004-10-06 19:27:35 jonas
* regvar fixes from Peter
Revision 1.128 2004/10/05 20:41:02 peter
* more spilling rewrites
Revision 1.127 2004/10/04 20:46:22 peter