Browse Source

* don't make localvar copies for assembler procedures

peter 26 years ago
parent
commit
ffddbaccac
3 changed files with 21 additions and 7 deletions
  1. 10 5
      compiler/cg386ld.pas
  2. 6 1
      compiler/symsym.inc
  3. 5 1
      compiler/symsymh.inc

+ 10 - 5
compiler/cg386ld.pas

@@ -110,10 +110,12 @@ implementation
                                 begin
                                    p^.location.reference.base:=procinfo.framepointer;
                                    p^.location.reference.offset:=pvarsym(p^.symtableentry)^.address;
-                                   if (symtabletype=localsymtable) or (symtabletype=inlinelocalsymtable) then
-                                     p^.location.reference.offset:=-p^.location.reference.offset;
-                                   if (symtabletype=parasymtable) or (symtabletype=inlineparasymtable) then
-                                     inc(p^.location.reference.offset,p^.symtable^.call_offset);
+                                   if (symtabletype in [localsymtable,inlinelocalsymtable]) or
+                                      pvarsym(p^.symtableentry)^.islocalcopy then
+                                     p^.location.reference.offset:=-p^.location.reference.offset
+                                   else
+                                     if (symtabletype in [parasymtable,inlineparasymtable]) then
+                                       inc(p^.location.reference.offset,p^.symtable^.call_offset);
                                    if (lexlevel>(p^.symtable^.symtablelevel)) then
                                      begin
                                         hregister:=getregister32;
@@ -728,7 +730,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.40  1998-12-30 13:41:07  peter
+  Revision 1.41  1999-01-20 10:20:18  peter
+    * don't make localvar copies for assembler procedures
+
+  Revision 1.40  1998/12/30 13:41:07  peter
     * released valuepara
 
   Revision 1.39  1998/12/19 00:23:45  florian

+ 6 - 1
compiler/symsym.inc

@@ -840,6 +840,7 @@
          address:=0;
          localaddress:=-1;
          islocalcopy:=false;
+         localvarsym:=nil;
          refs:=0;
          is_valid := 1;
          var_options:=0;
@@ -895,6 +896,7 @@
            address:=0;
          localaddress:=-1;
          islocalcopy:=false;
+         localvarsym:=nil;
          definition:=readdefref;
          var_options:=readbyte;
          if (var_options and vo_is_C_var)<>0 then
@@ -1755,7 +1757,10 @@
 
 {
   $Log$
-  Revision 1.68  1999-01-12 14:25:36  peter
+  Revision 1.69  1999-01-20 10:20:20  peter
+    * don't make localvar copies for assembler procedures
+
+  Revision 1.68  1999/01/12 14:25:36  peter
     + BrowserLog for browser.log generation
     + BrowserCol for browser info in TCollections
     * released all other UseBrowser

+ 5 - 1
compiler/symsymh.inc

@@ -176,6 +176,7 @@
        pvarsym = ^tvarsym;
        tvarsym = object(tsym)
           address      : longint;
+          localvarsym  : pvarsym;
           localaddress : longint;  { address of the local copy of a value para, -1 means not used }
           islocalcopy  : boolean;
           definition   : pdef;
@@ -327,7 +328,10 @@
 
 {
   $Log$
-  Revision 1.13  1999-01-14 21:49:59  peter
+  Revision 1.14  1999-01-20 10:20:22  peter
+    * don't make localvar copies for assembler procedures
+
+  Revision 1.13  1999/01/14 21:49:59  peter
     * fixed forwardpointer problem with multiple forwards for the same
       typesym. It now uses a linkedlist instead of a single pointer