Browse Source

* handle non-smallset sets in registers in LLVM like arrays and records

git-svn-id: trunk@43884 -
Jonas Maebe 5 years ago
parent
commit
9462d6b1ea
1 changed files with 4 additions and 1 deletions
  1. 4 1
      compiler/llvm/hlcgllvm.pas

+ 4 - 1
compiler/llvm/hlcgllvm.pas

@@ -695,6 +695,7 @@ implementation
                 pass via a temp in that case
                 pass via a temp in that case
               }
               }
               if (fromsize.typ in [arraydef,recorddef]) or
               if (fromsize.typ in [arraydef,recorddef]) or
+                 (is_set(fromsize) and not is_smallset(fromsize)) or
                  (tosize.size in [3,5,6,7]) then
                  (tosize.size in [3,5,6,7]) then
                 begin
                 begin
                   { store struct/array-in-register to memory }
                   { store struct/array-in-register to memory }
@@ -901,7 +902,9 @@ implementation
       else
       else
         begin
         begin
           if ((fromsize.typ in [arraydef,recorddef]) or
           if ((fromsize.typ in [arraydef,recorddef]) or
-              (tosize.typ in [arraydef,recorddef])) and
+              (tosize.typ in [arraydef,recorddef]) or
+              (is_set(fromsize) and not is_smallset(fromsize)) or
+              (is_set(tosize) and not is_smallset(tosize))) and
              (fromsize<>tosize) then
              (fromsize<>tosize) then
             begin
             begin
               if handle_agg_load_ref_anyreg(list,fromsize,tosize,sref,register,nil) then
               if handle_agg_load_ref_anyreg(list,fromsize,tosize,sref,register,nil) then