mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 14:29:14 +02:00
* fix tcgx86.make_direct_ref: we need to use the register in which we loaded the symbol and combine that with the base register (if it is set) without using an ADD
git-svn-id: trunk@34557 -
This commit is contained in:
parent
bc2f213bd3
commit
89f7da58ea
@ -650,6 +650,7 @@ unit cgx86;
|
|||||||
begin
|
begin
|
||||||
if assigned(ref.symbol) and (ref.symbol.bind in asmsymbindindirect) then
|
if assigned(ref.symbol) and (ref.symbol.bind in asmsymbindindirect) then
|
||||||
begin
|
begin
|
||||||
|
{ load the symbol into a register }
|
||||||
hreg:=getaddressregister(list);
|
hreg:=getaddressregister(list);
|
||||||
reference_reset_symbol(href,ref.symbol,0,sizeof(pint));
|
reference_reset_symbol(href,ref.symbol,0,sizeof(pint));
|
||||||
{ tell make_simple_ref that we are loading the symbol address via an indirect
|
{ tell make_simple_ref that we are loading the symbol address via an indirect
|
||||||
@ -658,10 +659,13 @@ unit cgx86;
|
|||||||
a_op_ref_reg(list,OP_MOVE,OS_ADDR,href,hreg);
|
a_op_ref_reg(list,OP_MOVE,OS_ADDR,href,hreg);
|
||||||
if ref.base<>NR_NO then
|
if ref.base<>NR_NO then
|
||||||
begin
|
begin
|
||||||
{ don't use ADD, the flags may contain a value }
|
{ fold symbol register into base register }
|
||||||
reference_reset_base(href,ref.base,0,ref.alignment);
|
reference_reset_base(href,hreg,0,sizeof(pint));
|
||||||
|
href.index:=ref.base;
|
||||||
|
hreg:=getaddressregister(list);
|
||||||
a_loadaddr_ref_reg(list,href,hreg);
|
a_loadaddr_ref_reg(list,href,hreg);
|
||||||
end;
|
end;
|
||||||
|
{ we're done }
|
||||||
ref.symbol:=nil;
|
ref.symbol:=nil;
|
||||||
ref.base:=hreg;
|
ref.base:=hreg;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user