mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 17:29:33 +02:00
* better fix for previous revision
* also applied to x86 and m68k git-svn-id: trunk@5512 -
This commit is contained in:
parent
3c26e1c40b
commit
05a07a7dd2
@ -135,6 +135,8 @@ implementation
|
|||||||
internalerror(20020814);
|
internalerror(20020814);
|
||||||
|
|
||||||
location.register:=cg.getfpuregister(current_asmdata.CurrAsmList,opsize);
|
location.register:=cg.getfpuregister(current_asmdata.CurrAsmList,opsize);
|
||||||
|
if not(left.location.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_REFERENCE,LOC_CREFERENCE]) then
|
||||||
|
location_force_reg(current_asmdata.CurrAsmList,left.location,OS_INT,false);
|
||||||
case left.location.loc of
|
case left.location.loc of
|
||||||
LOC_REGISTER, LOC_CREGISTER:
|
LOC_REGISTER, LOC_CREGISTER:
|
||||||
begin
|
begin
|
||||||
|
@ -169,7 +169,7 @@ implementation
|
|||||||
internalerror(200110011);
|
internalerror(200110011);
|
||||||
|
|
||||||
if not(left.location.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_REFERENCE,LOC_CREFERENCE]) then
|
if not(left.location.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_REFERENCE,LOC_CREFERENCE]) then
|
||||||
location_force_reg(current_asmdata.CurrAsmList,left.location,OS_INT,false);
|
location_force_reg(current_asmdata.CurrAsmList,left.location,left.location.size,false);
|
||||||
case left.location.loc of
|
case left.location.loc of
|
||||||
LOC_REGISTER:
|
LOC_REGISTER:
|
||||||
begin
|
begin
|
||||||
|
@ -149,7 +149,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
if not(left.location.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_REFERENCE,LOC_CREFERENCE]) then
|
if not(left.location.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_REFERENCE,LOC_CREFERENCE]) then
|
||||||
location_force_reg(current_asmdata.CurrAsmList,left.location,OS_INT,false);
|
location_force_reg(current_asmdata.CurrAsmList,left.location,left.location.size,false);
|
||||||
case left.location.loc of
|
case left.location.loc of
|
||||||
// the conversion algorithm does not modify the input register, so it can
|
// the conversion algorithm does not modify the input register, so it can
|
||||||
// be used for both LOC_REGISTER and LOC_CREGISTER
|
// be used for both LOC_REGISTER and LOC_CREGISTER
|
||||||
|
@ -205,6 +205,9 @@ implementation
|
|||||||
hreg : tregister;
|
hreg : tregister;
|
||||||
op : tasmop;
|
op : tasmop;
|
||||||
begin
|
begin
|
||||||
|
if (left.location.loc in [LOC_SUBSETREG,LOC_CSUBSETREG,LOC_SUBSETREF,LOC_CSUBSETREF]) then
|
||||||
|
location_force_reg(current_asmdata.CurrAsmList,left.location,left.location.size,true);
|
||||||
|
|
||||||
{$ifdef x86_64}
|
{$ifdef x86_64}
|
||||||
if use_sse(resultdef) then
|
if use_sse(resultdef) then
|
||||||
begin
|
begin
|
||||||
@ -226,9 +229,6 @@ implementation
|
|||||||
location_reset(location,LOC_MMREGISTER,def_cgsize(resultdef));
|
location_reset(location,LOC_MMREGISTER,def_cgsize(resultdef));
|
||||||
location.register:=cg.getmmregister(current_asmdata.CurrAsmList,def_cgsize(resultdef));
|
location.register:=cg.getmmregister(current_asmdata.CurrAsmList,def_cgsize(resultdef));
|
||||||
|
|
||||||
if (left.location.loc in [LOC_SUBSETREG,LOC_CSUBSETREG,LOC_SUBSETREF,LOC_CSUBSETREF]) then
|
|
||||||
location_force_reg(current_asmdata.CurrAsmList,left.location,left.location.size,true);
|
|
||||||
|
|
||||||
case torddef(left.resultdef).ordtype of
|
case torddef(left.resultdef).ordtype of
|
||||||
u64bit:
|
u64bit:
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user