* use index register when available for generating a reference with

only a signle register. Using the base register could possibly
    destroy the framepointer
This commit is contained in:
peter 2002-09-01 19:27:34 +00:00
parent a73ecec989
commit f77536fece
2 changed files with 16 additions and 6 deletions

View File

@ -120,9 +120,9 @@ implementation
end end
else else
begin begin
cg.a_loadaddr_ref_reg(exprasmlist,location.reference,location.reference.base); cg.a_loadaddr_ref_reg(exprasmlist,location.reference,location.reference.index);
rg.ungetregisterint(exprasmlist,location.reference.index); rg.ungetregisterint(exprasmlist,location.reference.base);
reference_reset_base(location.reference,location.reference.base,0); reference_reset_base(location.reference,location.reference.index,0);
end; end;
{ insert the new index register and scalefactor or { insert the new index register and scalefactor or
do the multiplication manual } do the multiplication manual }
@ -156,7 +156,12 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.42 2002-09-01 18:46:01 peter Revision 1.43 2002-09-01 19:27:35 peter
* use index register when available for generating a reference with
only a signle register. Using the base register could possibly
destroy the framepointer
Revision 1.42 2002/09/01 18:46:01 peter
* fixed generic tcgvecnode * fixed generic tcgvecnode
* move code that updates a reference with index register and multiplier * move code that updates a reference with index register and multiplier
to separate method so it can be overriden for scaled indexing to separate method so it can be overriden for scaled indexing

View File

@ -595,7 +595,7 @@ implementation
(l.reference.index<>R_NO)) then (l.reference.index<>R_NO)) then
begin begin
{ load address into a single base register } { load address into a single base register }
if l.reference.base=R_NO then if l.reference.index<>R_NO then
begin begin
cg.a_loadaddr_ref_reg(list,l.reference,l.reference.index); cg.a_loadaddr_ref_reg(list,l.reference,l.reference.index);
rg.ungetregister(list,l.reference.base); rg.ungetregister(list,l.reference.base);
@ -1786,7 +1786,12 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.45 2002-09-01 18:50:20 peter Revision 1.46 2002-09-01 19:27:34 peter
* use index register when available for generating a reference with
only a signle register. Using the base register could possibly
destroy the framepointer
Revision 1.45 2002/09/01 18:50:20 peter
* fixed maybe_save that did not support a reference with only * fixed maybe_save that did not support a reference with only
a index register. It now also updates the location with the new a index register. It now also updates the location with the new
base register only base register only