Browse Source

+ LOC_(C)LOC_SUBSETREF/G support for tcg.a_loadmm_loc_reg()

git-svn-id: trunk@20663 -
Jonas Maebe 13 years ago
parent
commit
dabcfc2806
1 changed files with 9 additions and 0 deletions
  1. 9 0
      compiler/cgobj.pas

+ 9 - 0
compiler/cgobj.pas

@@ -3193,6 +3193,8 @@ implementation
 
 
 
 
     procedure tcg.a_loadmm_loc_reg(list: TAsmList; size: tcgsize; const loc: tlocation; const reg: tregister;shuffle : pmmshuffle);
     procedure tcg.a_loadmm_loc_reg(list: TAsmList; size: tcgsize; const loc: tlocation; const reg: tregister;shuffle : pmmshuffle);
+      var
+        tmpreg: tregister;
       begin
       begin
         case loc.loc of
         case loc.loc of
           LOC_MMREGISTER,LOC_CMMREGISTER:
           LOC_MMREGISTER,LOC_CMMREGISTER:
@@ -3201,6 +3203,13 @@ implementation
             a_loadmm_ref_reg(list,loc.size,size,loc.reference,reg,shuffle);
             a_loadmm_ref_reg(list,loc.size,size,loc.reference,reg,shuffle);
           LOC_REGISTER,LOC_CREGISTER:
           LOC_REGISTER,LOC_CREGISTER:
             a_loadmm_intreg_reg(list,loc.size,size,loc.register,reg,shuffle);
             a_loadmm_intreg_reg(list,loc.size,size,loc.register,reg,shuffle);
+          LOC_SUBSETREF,LOC_CSUBSETREF,
+          LOC_SUBSETREG,LOC_CSUBSETREG:
+            begin
+              tmpreg:=getintregister(list,loc.size);
+              a_load_loc_reg(list,loc.size,loc,tmpreg);
+              a_loadmm_intreg_reg(list,loc.size,size,tmpreg,reg,shuffle);
+            end
           else
           else
             internalerror(200310121);
             internalerror(200310121);
         end;
         end;