Explorar o código

* converted tcg.g_releasevaluepara_openarray() to thlcg

git-svn-id: trunk@21879 -
Jonas Maebe %!s(int64=13) %!d(string=hai) anos
pai
achega
be8f8fec76
Modificáronse 3 ficheiros con 15 adicións e 27 borrados
  1. 0 19
      compiler/cgobj.pas
  2. 0 7
      compiler/hlcg2ll.pas
  3. 15 1
      compiler/hlcgobj.pas

+ 0 - 19
compiler/cgobj.pas

@@ -394,8 +394,6 @@ unit cgobj;
           procedure g_overflowcheck(list: TAsmList; const Loc:tlocation; def:tdef); virtual;abstract;
           procedure g_overflowCheck_loc(List:TAsmList;const Loc:TLocation;def:TDef;ovloc : tlocation);virtual;
 
-          procedure g_releasevaluepara_openarray(list : TAsmList;const l:tlocation);virtual;
-
           {# Emits instructions when compilation is done in profile
              mode (this is set as a command line option). The default
              behavior does nothing, should be overridden as required.
@@ -2107,23 +2105,6 @@ implementation
 *****************************************************************************}
 
 
-    procedure tcg.g_releasevaluepara_openarray(list : TAsmList;const l:tlocation);
-      var
-        cgpara1 : TCGPara;
-      begin
-        { do move call }
-        cgpara1.init;
-        paramanager.getintparaloc(pocall_default,1,voidpointertype,cgpara1);
-        { load source }
-        a_load_loc_cgpara(list,l,cgpara1);
-        paramanager.freecgpara(list,cgpara1);
-        allocallcpuregisters(list);
-        a_call_name(list,'FPC_FREEMEM',false);
-        deallocallcpuregisters(list);
-        cgpara1.done;
-      end;
-
-
     procedure tcg.g_save_registers(list:TAsmList);
       var
         href : treference;

+ 0 - 7
compiler/hlcg2ll.pas

@@ -282,8 +282,6 @@ unit hlcg2ll;
           procedure g_overflowcheck(list: TAsmList; const Loc:tlocation; def:tdef); override;
           procedure g_overflowCheck_loc(List:TAsmList;const Loc:TLocation;def:TDef;var ovloc : tlocation);override;
 
-          procedure g_releasevaluepara_openarray(list : TAsmList;arrdef: tarraydef;const l:tlocation);override;
-
           {# Emits instructions when compilation is done in profile
              mode (this is set as a command line option). The default
              behavior does nothing, should be overridden as required.
@@ -938,11 +936,6 @@ implementation
       cg.g_overflowCheck_loc(list,loc,def,ovloc);
     end;
 
-  procedure thlcg2ll.g_releasevaluepara_openarray(list: TAsmList; arrdef: tarraydef; const l: tlocation);
-    begin
-      cg.g_releasevaluepara_openarray(list,l);
-    end;
-
   procedure thlcg2ll.g_profilecode(list: TAsmList);
     begin
       cg.g_profilecode(list);

+ 15 - 1
compiler/hlcgobj.pas

@@ -419,7 +419,7 @@ unit hlcgobj;
           procedure g_overflowCheck_loc(List:TAsmList;const Loc:TLocation;def:TDef;var ovloc : tlocation);virtual; abstract;
 
           procedure g_copyvaluepara_openarray(list : TAsmList;const ref:treference;const lenloc:tlocation;arrdef: tarraydef;destreg:tregister);virtual;
-          procedure g_releasevaluepara_openarray(list : TAsmList;arrdef: tarraydef;const l:tlocation);virtual;abstract;
+          procedure g_releasevaluepara_openarray(list : TAsmList;arrdef: tarraydef;const l:tlocation);virtual;
 
           {# Emits instructions when compilation is done in profile
              mode (this is set as a command line option). The default
@@ -3312,6 +3312,20 @@ implementation
       cgpara1.done;
     end;
 
+  procedure thlcgobj.g_releasevaluepara_openarray(list: TAsmList; arrdef: tarraydef; const l: tlocation);
+    var
+      cgpara1 : TCGPara;
+    begin
+      { do freemem call }
+      cgpara1.init;
+      paramanager.getintparaloc(pocall_default,1,voidpointertype,cgpara1);
+      { load source }
+      a_load_loc_cgpara(list,getpointerdef(arrdef),l,cgpara1);
+      paramanager.freecgpara(list,cgpara1);
+      g_call_system_proc(list,'fpc_freemem',nil);
+      cgpara1.done;
+    end;
+
   procedure thlcgobj.g_profilecode(list: TAsmList);
     begin
     end;