mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-11 22:46:01 +02:00
* fix for sparc that pushes floats in int registers
This commit is contained in:
parent
8fade03fa5
commit
96463e762a
@ -221,25 +221,42 @@ implementation
|
|||||||
case left.location.loc of
|
case left.location.loc of
|
||||||
LOC_MMREGISTER,
|
LOC_MMREGISTER,
|
||||||
LOC_CMMREGISTER:
|
LOC_CMMREGISTER:
|
||||||
begin
|
case tempparaloc.loc of
|
||||||
if tempparaloc.loc in [LOC_FPUREGISTER,LOC_CFPUREGISTER] then
|
LOC_REFERENCE,
|
||||||
|
LOC_CREFERENCE,
|
||||||
|
LOC_MMREGISTER,
|
||||||
|
LOC_CMMREGISTER:
|
||||||
|
cg.a_parammm_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc,mms_movescalar);
|
||||||
|
LOC_FPUREGISTER,
|
||||||
|
LOC_CFPUREGISTER:
|
||||||
begin
|
begin
|
||||||
location_force_fpureg(exprasmlist,left.location,false);
|
location_force_fpureg(exprasmlist,left.location,false);
|
||||||
cg.a_paramfpu_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc);
|
cg.a_paramfpu_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc);
|
||||||
end
|
end;
|
||||||
else
|
else
|
||||||
cg.a_parammm_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc,mms_movescalar);
|
internalerror(2002042433);
|
||||||
end;
|
end;
|
||||||
LOC_FPUREGISTER,
|
LOC_FPUREGISTER,
|
||||||
LOC_CFPUREGISTER:
|
LOC_CFPUREGISTER:
|
||||||
begin
|
case tempparaloc.loc of
|
||||||
if tempparaloc.loc in [LOC_MMREGISTER,LOC_CMMREGISTER] then
|
LOC_MMREGISTER,
|
||||||
|
LOC_CMMREGISTER:
|
||||||
begin
|
begin
|
||||||
location_force_mmregscalar(exprasmlist,left.location,false);
|
location_force_mmregscalar(exprasmlist,left.location,false);
|
||||||
cg.a_parammm_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc,mms_movescalar);
|
cg.a_parammm_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc,mms_movescalar);
|
||||||
end
|
end;
|
||||||
else
|
{$ifdef sparc}
|
||||||
|
{ sparc pushes floats in normal registers }
|
||||||
|
LOC_REGISTER,
|
||||||
|
LOC_CREGISTER,
|
||||||
|
{$endif sparc}
|
||||||
|
LOC_REFERENCE,
|
||||||
|
LOC_CREFERENCE,
|
||||||
|
LOC_FPUREGISTER,
|
||||||
|
LOC_CFPUREGISTER:
|
||||||
cg.a_paramfpu_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc);
|
cg.a_paramfpu_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc);
|
||||||
|
else
|
||||||
|
internalerror(2002042433);
|
||||||
end;
|
end;
|
||||||
LOC_REFERENCE,
|
LOC_REFERENCE,
|
||||||
LOC_CREFERENCE:
|
LOC_CREFERENCE:
|
||||||
@ -247,6 +264,11 @@ implementation
|
|||||||
LOC_MMREGISTER,
|
LOC_MMREGISTER,
|
||||||
LOC_CMMREGISTER:
|
LOC_CMMREGISTER:
|
||||||
cg.a_parammm_ref(exprasmlist,def_cgsize(left.resulttype.def),left.location.reference,tempparaloc,mms_movescalar);
|
cg.a_parammm_ref(exprasmlist,def_cgsize(left.resulttype.def),left.location.reference,tempparaloc,mms_movescalar);
|
||||||
|
{$ifdef sparc}
|
||||||
|
{ sparc pushes floats in normal registers }
|
||||||
|
LOC_REGISTER,
|
||||||
|
LOC_CREGISTER,
|
||||||
|
{$endif sparc}
|
||||||
LOC_REFERENCE,
|
LOC_REFERENCE,
|
||||||
LOC_CREFERENCE,
|
LOC_CREFERENCE,
|
||||||
LOC_FPUREGISTER,
|
LOC_FPUREGISTER,
|
||||||
@ -1242,7 +1264,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.161 2004-03-09 13:04:12 mazen
|
Revision 1.162 2004-03-09 16:28:31 peter
|
||||||
|
* fix for sparc that pushes floats in int registers
|
||||||
|
|
||||||
|
Revision 1.161 2004/03/09 13:04:12 mazen
|
||||||
+ difference between three similar internal errors
|
+ difference between three similar internal errors
|
||||||
|
|
||||||
Revision 1.160 2004/02/27 10:21:05 florian
|
Revision 1.160 2004/02/27 10:21:05 florian
|
||||||
|
Loading…
Reference in New Issue
Block a user