Browse Source

* support multiple register paralocs in tcgobj.a_loadfpu_ref_cgpara()

git-svn-id: trunk@30223 -
Jonas Maebe 10 years ago
parent
commit
6d02aedf70
1 changed files with 11 additions and 2 deletions
  1. 11 2
      compiler/cgobj.pas

+ 11 - 2
compiler/cgobj.pas

@@ -1644,13 +1644,22 @@ implementation
       var
       var
          href : treference;
          href : treference;
          hsize: tcgsize;
          hsize: tcgsize;
+         paraloc: PCGParaLocation;
       begin
       begin
          case cgpara.location^.loc of
          case cgpara.location^.loc of
           LOC_FPUREGISTER,LOC_CFPUREGISTER:
           LOC_FPUREGISTER,LOC_CFPUREGISTER:
             begin
             begin
-              cgpara.check_simple_location;
               paramanager.alloccgpara(list,cgpara);
               paramanager.alloccgpara(list,cgpara);
-              a_loadfpu_ref_reg(list,size,size,ref,cgpara.location^.register);
+              paraloc:=cgpara.location;
+              href:=ref;
+              while assigned(paraloc) do
+                begin
+                  if not(paraloc^.loc in [LOC_FPUREGISTER,LOC_CFPUREGISTER]) then
+                    internalerror(2015031501);
+                  a_loadfpu_ref_reg(list,paraloc^.size,paraloc^.size,href,paraloc^.register);
+                  inc(href.offset,tcgsize2size[paraloc^.size]);
+                  paraloc:=paraloc^.next;
+                end;
             end;
             end;
           LOC_REFERENCE,LOC_CREFERENCE:
           LOC_REFERENCE,LOC_CREFERENCE:
             begin
             begin