Преглед изворни кода

+ thlcgobj.a_loadfpu/mm_loc_ref()

git-svn-id: branches/hlcgllvm@28372 -
Jonas Maebe пре 11 година
родитељ
комит
a64897ddee
1 измењених фајлова са 55 додато и 0 уклоњено
  1. 55 0
      compiler/hlcgobj.pas

+ 55 - 0
compiler/hlcgobj.pas

@@ -310,6 +310,7 @@ unit hlcgobj;
           procedure a_loadfpu_reg_ref(list: TAsmList; fromsize, tosize: tdef; reg: tregister; const ref: treference); virtual; abstract;
           procedure a_loadfpu_reg_ref(list: TAsmList; fromsize, tosize: tdef; reg: tregister; const ref: treference); virtual; abstract;
           procedure a_loadfpu_ref_ref(list: TAsmList; fromsize, tosize: tdef; const ref1,ref2: treference);virtual;
           procedure a_loadfpu_ref_ref(list: TAsmList; fromsize, tosize: tdef; const ref1,ref2: treference);virtual;
           procedure a_loadfpu_loc_reg(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const reg: tregister);virtual;
           procedure a_loadfpu_loc_reg(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const reg: tregister);virtual;
+          procedure a_loadfpu_loc_ref(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const ref: treference);virtual;
           procedure a_loadfpu_reg_loc(list: TAsmList; fromsize, tosize: tdef; const reg: tregister; const loc: tlocation);virtual;
           procedure a_loadfpu_reg_loc(list: TAsmList; fromsize, tosize: tdef; const reg: tregister; const loc: tlocation);virtual;
           procedure a_loadfpu_reg_cgpara(list : TAsmList;fromsize: tdef;const r : tregister;const cgpara : TCGPara);virtual;
           procedure a_loadfpu_reg_cgpara(list : TAsmList;fromsize: tdef;const r : tregister;const cgpara : TCGPara);virtual;
           procedure a_loadfpu_ref_cgpara(list : TAsmList;fromsize : tdef;const ref : treference;const cgpara : TCGPara);virtual;
           procedure a_loadfpu_ref_cgpara(list : TAsmList;fromsize : tdef;const ref : treference;const cgpara : TCGPara);virtual;
@@ -322,6 +323,7 @@ unit hlcgobj;
           { required for subsetreg/ref; still tcgsize rather than tdef because of reason mentioned above }
           { required for subsetreg/ref; still tcgsize rather than tdef because of reason mentioned above }
           procedure a_loadmm_loc_reg(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const reg: tregister; shuffle : pmmshuffle);virtual;
           procedure a_loadmm_loc_reg(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const reg: tregister; shuffle : pmmshuffle);virtual;
           procedure a_loadmm_reg_loc(list: TAsmList; fromsize, tosize: tdef; const reg: tregister; const loc: tlocation;shuffle : pmmshuffle);virtual;
           procedure a_loadmm_reg_loc(list: TAsmList; fromsize, tosize: tdef; const reg: tregister; const loc: tlocation;shuffle : pmmshuffle);virtual;
+          procedure a_loadmm_loc_ref(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const ref: treference; shuffle : pmmshuffle);virtual;
           procedure a_loadmm_reg_cgpara(list: TAsmList; fromsize: tdef; reg: tregister;const cgpara : TCGPara;shuffle : pmmshuffle); virtual;
           procedure a_loadmm_reg_cgpara(list: TAsmList; fromsize: tdef; reg: tregister;const cgpara : TCGPara;shuffle : pmmshuffle); virtual;
           procedure a_loadmm_ref_cgpara(list: TAsmList; fromsize: tdef; const ref: treference;const cgpara : TCGPara;shuffle : pmmshuffle); virtual;
           procedure a_loadmm_ref_cgpara(list: TAsmList; fromsize: tdef; const ref: treference;const cgpara : TCGPara;shuffle : pmmshuffle); virtual;
           procedure a_loadmm_loc_cgpara(list: TAsmList; fromsize: tdef; const loc: tlocation; const cgpara : TCGPara;shuffle : pmmshuffle); virtual;
           procedure a_loadmm_loc_cgpara(list: TAsmList; fromsize: tdef; const loc: tlocation; const cgpara : TCGPara;shuffle : pmmshuffle); virtual;
@@ -2380,6 +2382,26 @@ implementation
       end;
       end;
     end;
     end;
 
 
+  procedure thlcgobj.a_loadfpu_loc_ref(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const ref: treference);
+    var
+      reg: tregister;
+    begin
+      case loc.loc of
+        LOC_REFERENCE, LOC_CREFERENCE:
+          begin
+            reg:=getfpuregister(list,tosize);
+            a_loadfpu_ref_reg(list,fromsize,tosize,loc.reference,reg);
+            a_loadfpu_reg_ref(list,tosize,tosize,reg,ref);
+          end;
+        LOC_FPUREGISTER, LOC_CFPUREGISTER:
+          begin
+            a_loadfpu_reg_ref(list,fromsize,tosize,loc.register,ref);
+          end;
+        else
+          internalerror(2014080802);
+      end;
+    end;
+
   procedure thlcgobj.a_loadfpu_reg_loc(list: TAsmList; fromsize, tosize: tdef; const reg: tregister; const loc: tlocation);
   procedure thlcgobj.a_loadfpu_reg_loc(list: TAsmList; fromsize, tosize: tdef; const reg: tregister; const loc: tlocation);
     begin
     begin
       case loc.loc of
       case loc.loc of
@@ -2504,6 +2526,39 @@ implementation
       end;
       end;
     end;
     end;
 
 
+  procedure thlcgobj.a_loadmm_loc_ref(list: TAsmList; fromsize, tosize: tdef; const loc: tlocation; const ref: treference; shuffle: pmmshuffle);
+    var
+      intreg, reg: tregister;
+    begin
+      case loc.loc of
+        LOC_MMREGISTER,LOC_CMMREGISTER:
+          a_loadmm_reg_ref(list,fromsize,tosize,loc.register,ref,shuffle);
+        LOC_REFERENCE,LOC_CREFERENCE:
+          begin
+            reg:=getmmregister(list,tosize);
+            a_loadmm_ref_reg(list,fromsize,tosize,loc.reference,reg,shuffle);
+            a_loadmm_reg_ref(list,tosize,tosize,reg,ref,shuffle);
+          end;
+        LOC_REGISTER,LOC_CREGISTER:
+          begin
+            reg:=getmmregister(list,tosize);
+            a_loadmm_intreg_reg(list,fromsize,tosize,loc.register,reg,shuffle);
+            a_loadmm_reg_ref(list,tosize,tosize,reg,ref,shuffle);
+          end;
+        LOC_SUBSETREG,LOC_CSUBSETREG,
+        LOC_SUBSETREF,LOC_CSUBSETREF:
+          begin
+            intreg:=getintregister(list,fromsize);
+            reg:=getmmregister(list,tosize);
+            a_load_loc_reg(list,fromsize,fromsize,loc,intreg);
+            a_loadmm_intreg_reg(list,fromsize,tosize,intreg,reg,shuffle);
+            a_loadmm_reg_ref(list,tosize,tosize,reg,ref,shuffle);
+          end
+        else
+          internalerror(2014080803);
+      end;
+    end;
+
   procedure thlcgobj.a_loadmm_reg_cgpara(list: TAsmList; fromsize: tdef; reg: tregister; const cgpara: TCGPara; shuffle: pmmshuffle);
   procedure thlcgobj.a_loadmm_reg_cgpara(list: TAsmList; fromsize: tdef; reg: tregister; const cgpara: TCGPara; shuffle: pmmshuffle);
     var
     var
       href  : treference;
       href  : treference;