mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 12:09:30 +02:00
* perform double->single-conversion-before-storing workaround for
fpu bug on some ppc's depending on the selected target cpu type rather than depending on whether we're compiling for 64 bit git-svn-id: trunk@9685 -
This commit is contained in:
parent
831a76905d
commit
6e9b3bf345
@ -532,9 +532,7 @@ unit cgppc;
|
|||||||
var
|
var
|
||||||
op: tasmop;
|
op: tasmop;
|
||||||
ref2: treference;
|
ref2: treference;
|
||||||
{$ifndef cpu64bit}
|
|
||||||
reg2: tregister;
|
reg2: tregister;
|
||||||
{$endif cpu64bit}
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if not(fromsize in [OS_F32,OS_F64]) or
|
if not(fromsize in [OS_F32,OS_F64]) or
|
||||||
@ -543,17 +541,17 @@ unit cgppc;
|
|||||||
ref2 := ref;
|
ref2 := ref;
|
||||||
fixref(list,ref2);
|
fixref(list,ref2);
|
||||||
op := fpustoreinstr[tosize,ref2.index <> NR_NO,false];
|
op := fpustoreinstr[tosize,ref2.index <> NR_NO,false];
|
||||||
{$ifndef cpu64bit}
|
|
||||||
{ some ppc's have a bug whereby storing a double to memory }
|
{ some PPCs have a bug whereby storing a double to memory }
|
||||||
{ as single corrupts the value -> convert double to single }
|
{ as single corrupts the value -> convert double to single }
|
||||||
{ first }
|
{ first (bug confirmed on some G4s, but not on G5s) }
|
||||||
if (tosize < fromsize) then
|
if (tosize < fromsize) and
|
||||||
|
(current_settings.cputype < cpu_PPC970) then
|
||||||
begin
|
begin
|
||||||
reg2:=getfpuregister(list,tosize);
|
reg2:=getfpuregister(list,tosize);
|
||||||
a_loadfpu_reg_reg(list,fromsize,tosize,reg,reg2);
|
a_loadfpu_reg_reg(list,fromsize,tosize,reg,reg2);
|
||||||
reg:=reg2;
|
reg:=reg2;
|
||||||
end;
|
end;
|
||||||
{$endif not cpu64bit}
|
|
||||||
a_load_store(list,op,reg,ref2);
|
a_load_store(list,op,reg,ref2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user