Browse Source

* Xtensa: reduce stack usage

git-svn-id: trunk@44492 -
florian 5 years ago
parent
commit
b41c8342c8
2 changed files with 10 additions and 16 deletions
  1. 5 2
      compiler/xtensa/cgcpu.pas
  2. 5 14
      compiler/xtensa/cpupi.pas

+ 5 - 2
compiler/xtensa/cgcpu.pas

@@ -633,8 +633,11 @@ implementation
                     end
                     end
                   else
                   else
                     begin
                     begin
-                      { spill area }
-                      inc(localsize,max(txtensaprocinfo(current_procinfo).maxcall,4)*4);
+                      { default spill area }
+                      inc(localsize,4*4);
+                      { additional spill area? }
+                      if pi_do_call in current_procinfo.flags then
+                        inc(localsize,txtensaprocinfo(current_procinfo).maxcall*4);
 
 
                       localsize:=align(localsize,current_settings.alignment.localalignmax);
                       localsize:=align(localsize,current_settings.alignment.localalignmax);
                     end;
                     end;

+ 5 - 14
compiler/xtensa/cpupi.pas

@@ -65,7 +65,7 @@ unit cpupi;
     constructor txtensaprocinfo.create(aparent: tprocinfo);
     constructor txtensaprocinfo.create(aparent: tprocinfo);
       begin
       begin
         inherited create(aparent);
         inherited create(aparent);
-        maxpushedparasize := 0;
+        maxpushedparasize:=0;
         if target_info.abi=abi_xtensa_windowed then
         if target_info.abi=abi_xtensa_windowed then
           begin
           begin
             callins:=A_CALL8;
             callins:=A_CALL8;
@@ -92,23 +92,15 @@ unit cpupi;
         localsize : aint;
         localsize : aint;
         i : longint;
         i : longint;
       begin
       begin
-        if (po_nostackframe in procdef.procoptions) then
-          begin
-             { maxpushedparasize sghould be zero,
-               if not we will get an error later. }
-             tg.setfirsttemp(maxpushedparasize);
-             exit;
-          end;
+        tg.setfirsttemp(maxpushedparasize);
 
 
-        if tg.direction = -1 then
-          tg.setfirsttemp(-(1+12)*4)
-        else
-          tg.setfirsttemp(maxpushedparasize);
+        if po_nostackframe in procdef.procoptions then
+          exit;
 
 
         { estimate stack frame size }
         { estimate stack frame size }
         if pi_estimatestacksize in flags then
         if pi_estimatestacksize in flags then
           begin
           begin
-            stackframesize:=maxpushedparasize+32;
+            stackframesize:=maxpushedparasize;
             localsize:=0;
             localsize:=0;
             for i:=0 to procdef.localst.SymList.Count-1 do
             for i:=0 to procdef.localst.SymList.Count-1 do
               if tsym(procdef.localst.SymList[i]).typ=localvarsym then
               if tsym(procdef.localst.SymList[i]).typ=localvarsym then
@@ -126,7 +118,6 @@ unit cpupi;
                   else
                   else
                     inc(localsize,tabstractnormalvarsym(procdef.parast.SymList[i]).getsize);
                     inc(localsize,tabstractnormalvarsym(procdef.parast.SymList[i]).getsize);
                 end;
                 end;
-
             inc(stackframesize,localsize);
             inc(stackframesize,localsize);
 
 
             if pi_needs_implicit_finally in flags then
             if pi_needs_implicit_finally in flags then