ソースを参照

* support thlcg2ll.gen_loadfpu_loc_cgpara() from LOC_REGISTER to
LOC_FPUREGISTER (can happen with certain ABIs due to records
having to be passed in floating point registers)

git-svn-id: trunk@30225 -

Jonas Maebe 10 年 前
コミット
a02d52f533
1 ファイル変更18 行追加1 行削除
  1. 18 1
      compiler/hlcg2ll.pas

+ 18 - 1
compiler/hlcg2ll.pas

@@ -1424,7 +1424,24 @@ implementation
                end
              else
 {$endif not cpu64bitalu}
-               cg.a_load_loc_cgpara(list,l,cgpara);
+             case cgpara.location^.loc of
+               LOC_FPUREGISTER,
+               LOC_CFPUREGISTER:
+                 begin
+                   tmploc:=l;
+                   location_force_mem(list,tmploc,size);
+                   cg.a_loadfpu_ref_cgpara(list,locsize,tmploc.reference,cgpara);
+                 end;
+               LOC_MMREGISTER,
+               LOC_CMMREGISTER:
+                 begin
+                   tmploc:=l;
+                   location_force_mem(list,tmploc,size);
+                   cg.a_loadmm_ref_cgpara(list,locsize,tmploc.reference,cgpara,mms_movescalar);
+                 end;
+               else
+                 cg.a_load_loc_cgpara(list,l,cgpara);
+             end;
           end;
         else
           internalerror(2002042432);