mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-10 19:45:59 +02:00
* macos: changing code gen for references to globals
This commit is contained in:
parent
84b5d460ea
commit
5e90be8184
@ -1386,14 +1386,14 @@ const
|
|||||||
if target_info.system = system_powerpc_macos then
|
if target_info.system = system_powerpc_macos then
|
||||||
begin
|
begin
|
||||||
if ref2.base <> R_NO then
|
if ref2.base <> R_NO then
|
||||||
internalerror(2002103102);
|
internalerror(2002103102); //TODO: Implement this if needed
|
||||||
|
|
||||||
reference_reset(tmpref);
|
reference_reset(tmpref);
|
||||||
tmpref.offset := ref2.offset;
|
tmpref.offset := ref2.offset;
|
||||||
tmpref.symbol := ref2.symbol;
|
tmpref.symbol := ref2.symbol;
|
||||||
tmpref.symaddr := refs_full;
|
tmpref.symaddr := refs_full;
|
||||||
tmpref.base := R_2;
|
tmpref.base := R_NO;
|
||||||
list.concat(taicpu.op_reg_ref(A_LWZ,r,tmpref));
|
list.concat(taicpu.op_reg_reg_ref(A_ADDI,r,R_TOC,tmpref));
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -1758,26 +1758,35 @@ const
|
|||||||
begin
|
begin
|
||||||
if target_info.system = system_powerpc_macos then
|
if target_info.system = system_powerpc_macos then
|
||||||
begin
|
begin
|
||||||
(* base is often erroneous set to r13, when r2 is ment.
|
|
||||||
if ref.base <> R_NO then
|
if ref.base <> R_NO then
|
||||||
begin
|
begin
|
||||||
|
{Generates
|
||||||
|
add tempreg, ref.base, RTOC
|
||||||
|
op reg, symbolplusoffset, tempreg
|
||||||
|
which is eqvivalent to the more comprehensive
|
||||||
|
addi tempreg, RTOC, symbolplusoffset
|
||||||
|
add tempreg, ref.base, RTOC
|
||||||
|
op reg, tempreg
|
||||||
|
but which saves one instruction.}
|
||||||
|
|
||||||
tmpreg := get_scratch_reg_address(list);
|
tmpreg := get_scratch_reg_address(list);
|
||||||
reference_reset(tmpref);
|
reference_reset(tmpref);
|
||||||
tmpref.symbol := ref.symbol;
|
tmpref.symbol := ref.symbol;
|
||||||
tmpref.offset := ref.offset;
|
tmpref.offset := ref.offset;
|
||||||
tmpref.symaddr := refs_full;
|
tmpref.symaddr := refs_full;
|
||||||
list.concat(taicpu.op_reg_reg_ref(A_ADDI,tmpreg,
|
tmpref.base:= tmpreg;
|
||||||
ref.base,tmpref));
|
|
||||||
list.concat(taicpu.op_reg_reg(op,reg,tmpreg));
|
list.concat(taicpu.op_reg_reg_reg(A_ADD,tmpreg,
|
||||||
//list.concat(tai_comment.create('HALABALO'));
|
ref.base,R_TOC));
|
||||||
|
list.concat(taicpu.op_reg_ref(op,reg,tmpref));
|
||||||
end
|
end
|
||||||
else *)
|
else
|
||||||
begin
|
begin
|
||||||
reference_reset(tmpref);
|
reference_reset(tmpref);
|
||||||
tmpref.symbol := ref.symbol;
|
tmpref.symbol := ref.symbol;
|
||||||
tmpref.offset := ref.offset;
|
tmpref.offset := ref.offset;
|
||||||
tmpref.symaddr := refs_full;
|
tmpref.symaddr := refs_full;
|
||||||
tmpref.base:= R_2;
|
tmpref.base:= R_TOC;
|
||||||
list.concat(taicpu.op_reg_ref(op,reg,tmpref));
|
list.concat(taicpu.op_reg_ref(op,reg,tmpref));
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
@ -1924,7 +1933,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.65 2002-11-07 15:50:23 jonas
|
Revision 1.66 2002-11-28 10:55:16 olle
|
||||||
|
* macos: changing code gen for references to globals
|
||||||
|
|
||||||
|
Revision 1.65 2002/11/07 15:50:23 jonas
|
||||||
* fixed bctr(l) problems
|
* fixed bctr(l) problems
|
||||||
|
|
||||||
Revision 1.64 2002/11/04 18:24:19 olle
|
Revision 1.64 2002/11/04 18:24:19 olle
|
||||||
|
Loading…
Reference in New Issue
Block a user