mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-19 07:18:22 +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 }
|
{ reference in nested procedures, variable needs to be in memory }
|
||||||
make_not_regable(self);
|
make_not_regable(self);
|
||||||
end;
|
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
|
{ fix self type which is declared as voidpointer in the
|
||||||
definition }
|
definition }
|
||||||
if vo_is_self in tvarsym(symtableentry).varoptions then
|
if vo_is_self in tvarsym(symtableentry).varoptions then
|
||||||
@ -1141,7 +1145,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
* simple regvar support, not yet finished
|
||||||
|
|
||||||
Revision 1.128 2004/06/20 08:55:29 florian
|
Revision 1.128 2004/06/20 08:55:29 florian
|
||||||
|
@ -1375,17 +1375,12 @@ implementation
|
|||||||
|
|
||||||
|
|
||||||
procedure tvarsym.ppuwrite(ppufile:tcompilerppufile);
|
procedure tvarsym.ppuwrite(ppufile:tcompilerppufile);
|
||||||
var
|
|
||||||
hvo : tvaroptions;
|
|
||||||
begin
|
begin
|
||||||
inherited writesym(ppufile);
|
inherited writesym(ppufile);
|
||||||
ppufile.putbyte(byte(varspez));
|
ppufile.putbyte(byte(varspez));
|
||||||
ppufile.putlongint(fieldoffset);
|
ppufile.putlongint(fieldoffset);
|
||||||
ppufile.puttype(vartype);
|
ppufile.puttype(vartype);
|
||||||
{ symbols which are load are never candidates for a register,
|
ppufile.putsmallset(varoptions);
|
||||||
turn off the regable }
|
|
||||||
hvo:=varoptions-[vo_regable,vo_fpuregable];
|
|
||||||
ppufile.putsmallset(hvo);
|
|
||||||
if [vo_is_C_var,vo_is_dll_var]*varoptions<>[] then
|
if [vo_is_C_var,vo_is_dll_var]*varoptions<>[] then
|
||||||
ppufile.putstring(_mangledname^);
|
ppufile.putstring(_mangledname^);
|
||||||
ppufile.writeentry(ibvarsym);
|
ppufile.writeentry(ibvarsym);
|
||||||
@ -2216,7 +2211,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
* don't add stabs for register variables
|
||||||
|
|
||||||
Revision 1.177 2004/09/26 17:45:30 peter
|
Revision 1.177 2004/09/26 17:45:30 peter
|
||||||
|
@ -1632,13 +1632,17 @@ unit cgx86;
|
|||||||
var
|
var
|
||||||
href : treference;
|
href : treference;
|
||||||
r : integer;
|
r : integer;
|
||||||
|
hreg : tregister;
|
||||||
begin
|
begin
|
||||||
{ Copy registers from temp }
|
{ Copy registers from temp }
|
||||||
href:=current_procinfo.save_regs_ref;
|
href:=current_procinfo.save_regs_ref;
|
||||||
for r:=low(saved_standard_registers) to high(saved_standard_registers) do
|
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
|
if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
|
||||||
begin
|
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));
|
inc(href.offset,sizeof(aint));
|
||||||
end;
|
end;
|
||||||
tg.UnGetTemp(list,current_procinfo.save_regs_ref);
|
tg.UnGetTemp(list,current_procinfo.save_regs_ref);
|
||||||
@ -1675,7 +1679,10 @@ unit cgx86;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
* more spilling rewrites
|
||||||
|
|
||||||
Revision 1.127 2004/10/04 20:46:22 peter
|
Revision 1.127 2004/10/04 20:46:22 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user