mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-03 05:38:25 +02:00
* regvar fixes from Peter
This commit is contained in:
parent
0cf348b3df
commit
2b030488b2
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user