From b5ea6ab7d817225f6d4cec7abc4b3db48a99ce45 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Sat, 20 Aug 2011 07:53:03 +0000 Subject: [PATCH] + thlcgobj.location_force_fpureg() implementation git-svn-id: branches/jvmbackend@18370 - --- compiler/hlcgobj.pas | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/compiler/hlcgobj.pas b/compiler/hlcgobj.pas index a4e5c36d14..2a17af3e0a 100644 --- a/compiler/hlcgobj.pas +++ b/compiler/hlcgobj.pas @@ -416,7 +416,7 @@ unit hlcgobj; { routines migrated from ncgutil } procedure location_force_reg(list:TAsmList;var l:tlocation;src_size,dst_size:tdef;maybeconst:boolean);virtual; - procedure location_force_fpureg(list:TAsmList;var l: tlocation;size: tdef;maybeconst:boolean);virtual;abstract; + procedure location_force_fpureg(list:TAsmList;var l: tlocation;size: tdef;maybeconst:boolean);virtual; procedure location_force_mem(list:TAsmList;var l:tlocation;size:tdef);virtual; // procedure location_force_mmregscalar(list:TAsmList;var l: tlocation;size:tdef;maybeconst:boolean);virtual;abstract; // procedure location_force_mmreg(list:TAsmList;var l: tlocation;size:tdef;maybeconst:boolean);virtual;abstract; @@ -1649,6 +1649,25 @@ implementation location_freetemp(list,oldloc); end; + procedure thlcgobj.location_force_fpureg(list: TAsmList; var l: tlocation; size: tdef; maybeconst: boolean); + var + reg : tregister; + href : treference; + begin + if (l.loc<>LOC_FPUREGISTER) and + ((l.loc<>LOC_CFPUREGISTER) or (not maybeconst)) then + begin + { if it's in an mm register, store to memory first } + if (l.loc in [LOC_MMREGISTER,LOC_CMMREGISTER]) then + internalerror(2011012903); + reg:=getfpuregister(list,size); + a_loadfpu_loc_reg(list,size,size,l,reg); + location_freetemp(list,l); + location_reset(l,LOC_FPUREGISTER,l.size); + l.register:=reg; + end; + end; + procedure thlcgobj.location_force_mem(list: TAsmList; var l: tlocation; size: tdef); var r : treference;