Переглянути джерело

* per-parameter alignment set in target specific paramanager now overrides default alignment of parameter locals

git-svn-id: trunk@3272 -
tom_at_work 19 роки тому
батько
коміт
3f2f694d48
2 змінених файлів з 9 додано та 6 видалено
  1. 1 1
      compiler/ncgutil.pas
  2. 8 5
      compiler/tgobj.pas

+ 1 - 1
compiler/ncgutil.pas

@@ -2078,7 +2078,7 @@ implementation
                                       if isaddr then
                                         tg.GetLocal(list,sizeof(aint),voidpointertype.def,localloc.reference)
                                       else
-                                        tg.GetLocal(list,getsize,vartype.def,localloc.reference);
+                                        tg.GetLocal(list,getsize,tparavarsym(sym).paraloc[calleeside].alignment,vartype.def,localloc.reference);
                                     end;
                                 end;
                               localsymtable,

+ 8 - 5
compiler/tgobj.pas

@@ -101,6 +101,7 @@ unit tgobj;
 
           { Allocate space for a local }
           procedure getlocal(list: TAsmList; size : longint;def:tdef;var ref : treference);
+          procedure getlocal(list: TAsmList; size : longint; alignment : shortint; def:tdef;var ref : treference);
           procedure UnGetLocal(list: TAsmList; const ref : treference);
        end;
 
@@ -576,16 +577,18 @@ implementation
 
 
     procedure ttgobj.getlocal(list: TAsmList; size : longint;def:tdef;var ref : treference);
-      var
-        varalign : shortint;
       begin
-        varalign:=def.alignment;
-        varalign:=used_align(varalign,aktalignment.localalignmin,aktalignment.localalignmax);
+        getlocal(list, size, def.alignment, def, ref);
+      end;
+
+    procedure ttgobj.getlocal(list: TAsmList; size : longint; alignment : shortint; def:tdef;var ref : treference);
+      begin
+        alignment:=used_align(alignment,aktalignment.localalignmin,aktalignment.localalignmax);
         { can't use reference_reset_base, because that will let tgobj depend
           on cgobj (PFV) }
         fillchar(ref,sizeof(ref),0);
         ref.base:=current_procinfo.framepointer;
-        ref.offset:=alloctemp(list,size,varalign,tt_persistent,nil);
+        ref.offset:=alloctemp(list,size,alignment,tt_persistent,nil);
       end;