+ tcg.a_loadfpu_intreg_reg, make use of it in tcg.a_load_cgparaloc_anyreg

git-svn-id: trunk@36717 -
This commit is contained in:
florian 2017-07-09 21:33:24 +00:00
parent dd3d62425c
commit bccc2f6863

View File

@ -264,6 +264,8 @@ unit cgobj;
procedure a_loadfpu_reg_cgpara(list : TAsmList;size : tcgsize;const r : tregister;const cgpara : TCGPara);virtual;
procedure a_loadfpu_ref_cgpara(list : TAsmList;size : tcgsize;const ref : treference;const cgpara : TCGPara);virtual;
procedure a_loadfpu_intreg_reg(list: TAsmList; fromsize, tosize : tcgsize; intreg, fpureg: tregister); virtual;
{ vector register move instructions }
procedure a_loadmm_reg_reg(list: TAsmList; fromsize, tosize : tcgsize;reg1, reg2: tregister;shuffle : pmmshuffle); virtual;
procedure a_loadmm_ref_reg(list: TAsmList; fromsize, tosize : tcgsize;const ref: treference; reg: tregister;shuffle : pmmshuffle); virtual;
@ -1158,6 +1160,8 @@ implementation
a_load_reg_reg(list,paraloc.size,regsize,paraloc.register,reg);
R_MMREGISTER:
a_loadmm_intreg_reg(list,paraloc.size,regsize,paraloc.register,reg,mms_movescalar);
R_FPUREGISTER:
a_loadfpu_intreg_reg(list,paraloc.size,regsize,paraloc.register,reg);
else
internalerror(2009112422);
end;
@ -1689,6 +1693,21 @@ implementation
end;
procedure tcg.a_loadfpu_intreg_reg(list : TAsmList; fromsize,tosize : tcgsize; intreg,fpureg : tregister);
var
tmpref: treference;
begin
if not(tcgsize2size[fromsize] in [4,8]) or
not(tcgsize2size[tosize] in [4,8]) or
(tcgsize2size[fromsize]<>tcgsize2size[tosize]) then
internalerror(2017070902);
tg.gettemp(list,tcgsize2size[fromsize],tcgsize2size[fromsize],tt_normal,tmpref);
a_load_reg_ref(list,fromsize,fromsize,intreg,tmpref);
a_loadfpu_ref_reg(list,tosize,tosize,tmpref,fpureg);
tg.ungettemp(list,tmpref);
end;
procedure tcg.a_op_const_ref(list : TAsmList; Op: TOpCG; size: TCGSize; a: tcgint; const ref: TReference);
var
tmpreg : tregister;