From bccc2f686381b08d9651e72f36e61e363044feb4 Mon Sep 17 00:00:00 2001
From: florian <florian@freepascal.org>
Date: Sun, 9 Jul 2017 21:33:24 +0000
Subject: [PATCH] + tcg.a_loadfpu_intreg_reg, make use of it in
 tcg.a_load_cgparaloc_anyreg

git-svn-id: trunk@36717 -
---
 compiler/cgobj.pas | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas
index 9cf439b43c..8325a6088b 100644
--- a/compiler/cgobj.pas
+++ b/compiler/cgobj.pas
@@ -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;