2
0
Эх сурвалжийг харах

* separate virtual method for loading the function result para (needed by
llvm)

git-svn-id: branches/hlcgllvm@27011 -

Jonas Maebe 11 жил өмнө
parent
commit
f36848c243
1 өөрчлөгдсөн 8 нэмэгдсэн , 5 устгасан
  1. 8 5
      compiler/hlcgobj.pas

+ 8 - 5
compiler/hlcgobj.pas

@@ -519,6 +519,7 @@ unit hlcgobj;
             location if it's not initialised by the Pascal code, e.g.
             stack-based architectures. By default it does nothing }
           procedure gen_load_uninitialized_function_result(list: TAsmList; pd: tprocdef; resdef: tdef; const resloc: tcgpara);virtual;
+          procedure gen_load_loc_function_result(list: TAsmList; vardef: tdef; const l: tlocation);virtual;
          public
           { load a tlocation into a cgpara }
           procedure gen_load_loc_cgpara(list: TAsmList; vardef: tdef; const l: tlocation; const cgpara: tcgpara);virtual;
@@ -4584,6 +4585,11 @@ implementation
       { do nothing by default }
     end;
 
+  procedure thlcgobj.gen_load_loc_function_result(list: TAsmList; vardef: tdef; const l: tlocation);
+    begin
+      gen_load_loc_cgpara(list,vardef,l,current_procinfo.procdef.funcretloc[calleeside]);
+    end;
+
   procedure thlcgobj.gen_load_loc_cgpara(list: TAsmList; vardef: tdef; const l: tlocation; const cgpara: tcgpara);
     begin
       { Handle Floating point types differently
@@ -4661,7 +4667,6 @@ implementation
   procedure thlcgobj.gen_load_return_value(list: TAsmList);
     var
       ressym : tabstractnormalvarsym;
-      funcretloc : TCGPara;
       retdef : tdef;
     begin
       { Is the loading needed? }
@@ -4674,8 +4679,6 @@ implementation
          ) then
         exit;
 
-      funcretloc:=current_procinfo.procdef.funcretloc[calleeside];
-
       { constructors return self }
       if (current_procinfo.procdef.proctypeoption=potype_constructor) then
         begin
@@ -4695,10 +4698,10 @@ implementation
         begin
           { was: don't do anything if funcretloc.loc in [LOC_INVALID,LOC_REFERENCE] }
           if not paramanager.ret_in_param(current_procinfo.procdef.returndef,current_procinfo.procdef) then
-            gen_load_loc_cgpara(list,retdef,ressym.localloc,funcretloc);
+            gen_load_loc_function_result(list,retdef,ressym.localloc);
         end
       else
-        gen_load_uninitialized_function_result(list,current_procinfo.procdef,retdef,funcretloc)
+        gen_load_uninitialized_function_result(list,current_procinfo.procdef,retdef,current_procinfo.procdef.funcretloc[calleeside])
     end;
 
   procedure thlcgobj.record_generated_code_for_procdef(pd: tprocdef; code, data: TAsmList);