Browse Source

+ new fields for more precise control of alignment
+ support of new alignment control values for GNU AS writer
+ support of new alignment control values for binary writer
* better alignment settings on i386-win32
* improved inserted align directives for if nodes

git-svn-id: trunk@40159 -

florian 6 years ago
parent
commit
a092da723a

+ 5 - 0
compiler/aasmtai.pas

@@ -3095,6 +3095,7 @@ implementation
           fillsize:=0;
           fillop:=0;
           use_op:=false;
+          maxbytes:=aligntype;
        end;
 
 
@@ -3109,6 +3110,7 @@ implementation
           fillsize:=0;
           fillop:=_op;
           use_op:=true;
+          maxbytes:=aligntype;
        end;
 
 
@@ -3138,6 +3140,7 @@ implementation
          use_op:=true;
          fillsize:=0;
          fillop:=0;
+         maxbytes:=aligntype;
        end;
 
 
@@ -3157,6 +3160,7 @@ implementation
         fillsize:=0;
         fillop:=ppufile.getbyte;
         use_op:=ppufile.getboolean;
+        maxbytes:=ppufile.getbyte;
       end;
 
 
@@ -3166,6 +3170,7 @@ implementation
         ppufile.putbyte(aligntype);
         ppufile.putbyte(fillop);
         ppufile.putboolean(use_op);
+        ppufile.putbyte(maxbytes);
       end;
 
 

+ 28 - 8
compiler/aggas.pas

@@ -620,9 +620,10 @@ implementation
         end;
 
 
-      procedure doalign(alignment: byte; use_op: boolean; fillop: byte; out last_align: longint;lasthp:tai);
+      procedure doalign(alignment: byte; use_op: boolean; fillop: byte; maxbytes: byte; out last_align: longint;lasthp:tai);
         var
           i: longint;
+          alignment64 : int64;
 {$ifdef m68k}
           instr : string;
 {$endif}
@@ -649,14 +650,33 @@ implementation
                   else
                     begin
 {$endif m68k}
-                  writer.AsmWrite(#9'.balign '+tostr(alignment));
-                  if use_op then
-                    writer.AsmWrite(','+tostr(fillop))
+                      alignment64:=alignment;
+                      if (maxbytes<>alignment) and ispowerof2(alignment64,i) then
+                        begin
+                          if use_op then
+                            begin
+                              writer.AsmWrite(#9'.p2align '+tostr(i)+','+tostr(fillop)+','+tostr(maxbytes));
+                              writer.AsmLn;
+                              writer.AsmWrite(#9'.p2align '+tostr(i-1)+','+tostr(fillop));
+                            end
+                          else
+                            begin
+                              writer.AsmWrite(#9'.p2align '+tostr(i)+',,'+tostr(maxbytes));
+                              writer.AsmLn;
+                              writer.AsmWrite(#9'.p2align '+tostr(i-1));
+                            end
+                        end
+                      else
+                        begin
+                          writer.AsmWrite(#9'.balign '+tostr(alignment));
+                          if use_op then
+                            writer.AsmWrite(','+tostr(fillop))
 {$ifdef x86}
-                  { force NOP as alignment op code }
-                  else if (LastSecType=sec_code) and (asminfo^.id<>as_solaris_as) then
-                    writer.AsmWrite(',0x90');
+                          { force NOP as alignment op code }
+                          else if (LastSecType=sec_code) and (asminfo^.id<>as_solaris_as) then
+                            writer.AsmWrite(',0x90');
 {$endif x86}
+                        end;
 {$ifdef m68k}
                     end;
 {$endif m68k}
@@ -746,7 +766,7 @@ implementation
 
            ait_align :
              begin
-               doalign(tai_align_abstract(hp).aligntype,tai_align_abstract(hp).use_op,tai_align_abstract(hp).fillop,last_align,lasthp);
+               doalign(tai_align_abstract(hp).aligntype,tai_align_abstract(hp).use_op,tai_align_abstract(hp).fillop,tai_align_abstract(hp).maxbytes,last_align,lasthp);
              end;
 
            ait_section :

+ 7 - 0
compiler/assemble.pas

@@ -1700,6 +1700,13 @@ Implementation
                      { here we must determine the fillsize which is used in pass2 }
                      Tai_align_abstract(hp).fillsize:=align(ObjData.CurrObjSec.Size,Tai_align_abstract(hp).aligntype)-
                        ObjData.CurrObjSec.Size;
+
+                     { maximum number of bytes for alignment exeeded? }
+                     if (Tai_align_abstract(hp).aligntype<>Tai_align_abstract(hp).maxbytes) and
+                       (Tai_align_abstract(hp).fillsize>Tai_align_abstract(hp).maxbytes) then
+                       Tai_align_abstract(hp).fillsize:=align(ObjData.CurrObjSec.Size,Byte(Tai_align_abstract(hp).aligntype div 2))-
+                         ObjData.CurrObjSec.Size;
+
                      ObjData.alloc(Tai_align_abstract(hp).fillsize);
                    end;
                end;

+ 3 - 0
compiler/globals.pas

@@ -404,6 +404,9 @@ interface
           procalign : 0;
           loopalign : 0;
           jumpalign : 0;
+          jumpalignmax    : 0;
+          coalescealign   : 0;
+          coalescealignmax: 0;
           constalignmin : 0;
           constalignmax : 0;
           varalignmin : 0;

+ 7 - 2
compiler/ncgflw.pas

@@ -319,6 +319,8 @@ implementation
 *)
                    ;
                    hlcg.a_jmp_always(current_asmdata.CurrAsmList,hl);
+                   if not(cs_opt_size in current_settings.optimizerswitches) then
+                     current_asmdata.CurrAsmList.concat(cai_align.create_max(current_settings.alignment.jumpalign,current_settings.alignment.jumpalignmax));
                 end;
               hlcg.a_label(current_asmdata.CurrAsmList,left.location.falselabel);
               secondpass(t1);
@@ -347,12 +349,15 @@ implementation
                   current_asmdata.CurrAsmList := TAsmList.create;
                 end;
 *)
-              current_asmdata.CurrAsmList.concat(cai_align.create(current_settings.alignment.jumpalign));
+              if not(cs_opt_size in current_settings.optimizerswitches) then
+                current_asmdata.CurrAsmList.concat(cai_align.create_max(current_settings.alignment.coalescealign,current_settings.alignment.coalescealignmax));
               hlcg.a_label(current_asmdata.CurrAsmList,left.location.falselabel);
            end;
          if not(assigned(right)) then
            begin
-              hlcg.a_label(current_asmdata.CurrAsmList,left.location.truelabel);
+             if not(cs_opt_size in current_settings.optimizerswitches) then
+               current_asmdata.CurrAsmList.concat(cai_align.create_max(current_settings.alignment.coalescealign,current_settings.alignment.coalescealignmax));
+             hlcg.a_label(current_asmdata.CurrAsmList,left.location.truelabel);
            end;
 
 (*

+ 1 - 0
compiler/options.pas

@@ -4399,6 +4399,7 @@ begin
    begin
      init_settings.alignment.procalign:=1;
      init_settings.alignment.jumpalign:=1;
+     init_settings.alignment.coalescealign:=1;
      init_settings.alignment.loopalign:=1;
 {$ifdef x86}
      { constalignmax=1 keeps the executable and thus the memory foot print small but

+ 6 - 0
compiler/scanner.pas

@@ -3042,6 +3042,9 @@ type
             alignment.procalign:=tokenreadlongint;
             alignment.loopalign:=tokenreadlongint;
             alignment.jumpalign:=tokenreadlongint;
+            alignment.jumpalignmax:=tokenreadlongint;
+            alignment.coalescealign:=tokenreadlongint;
+            alignment.coalescealignmax:=tokenreadlongint;
             alignment.constalignmin:=tokenreadlongint;
             alignment.constalignmax:=tokenreadlongint;
             alignment.varalignmin:=tokenreadlongint;
@@ -3122,6 +3125,9 @@ type
             tokenwritelongint(alignment.procalign);
             tokenwritelongint(alignment.loopalign);
             tokenwritelongint(alignment.jumpalign);
+            tokenwritelongint(alignment.jumpalignmax);
+            tokenwritelongint(alignment.coalescealign);
+            tokenwritelongint(alignment.coalescealignmax);
             tokenwritelongint(alignment.constalignmin);
             tokenwritelongint(alignment.constalignmax);
             tokenwritelongint(alignment.varalignmin);

+ 19 - 0
compiler/systems.pas

@@ -44,7 +44,18 @@ interface
        talignmentinfo = packed record
          procalign,
          loopalign,
+         { alignment for labels after unconditional jumps, this must be a power of two }
          jumpalign,
+         { max. alignment for labels after unconditional jumps:
+           the compiler tries to align jumpalign, however, to do so it inserts at maximum jumpalignmax bytes or uses
+           the next smaller power of two of jumpalign }
+         jumpalignmax,
+         { alignment for labels where two flows of the program flow coalesce, this must be a power of two }
+         coalescealign,
+         { max. alignment for labels where two flows of the program flow coalesce
+           the compiler tries to align to coalescealign, however, to do so it inserts at maximum coalescealignmax bytes or uses
+           the next smaller power of two of coalescealign }
+         coalescealignmax,
          constalignmin,
          constalignmax,
          varalignmin,
@@ -658,6 +669,14 @@ begin
        jumpalign:=s.jumpalign
      else if s.jumpalign<>0 then
        result:=false;
+     if (s.coalescealign in [1,2,4,8,16,32,64,128]) or (s.coalescealign=256) then
+       coalescealign:=s.coalescealign
+     else if s.coalescealign<>0 then
+       result:=false;
+     if s.jumpalignmax>0 then
+       jumpalignmax:=s.jumpalignmax;
+     if s.coalescealign>0 then
+       coalescealignmax:=s.coalescealignmax;
      { general update rules:
        minimum: if higher then update
        maximum: if lower then update or if undefined then update }

+ 6 - 0
compiler/systems/i_aix.pas

@@ -76,6 +76,9 @@ unit i_aix;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -140,6 +143,9 @@ unit i_aix;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 8;
                 constalignmax   : 16;
                 varalignmin     : 8;

+ 6 - 0
compiler/systems/i_amiga.pas

@@ -75,6 +75,9 @@ unit i_amiga;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -138,6 +141,9 @@ unit i_amiga;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 15 - 0
compiler/systems/i_android.pas

@@ -78,6 +78,9 @@ unit i_android;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -144,6 +147,9 @@ unit i_android;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -210,6 +216,9 @@ unit i_android;
                  procalign       : 8;
                  loopalign       : 4;
                  jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                  constalignmin   : 0;
                  constalignmax   : 8;
                  varalignmin     : 0;
@@ -276,6 +285,9 @@ unit i_android;
                  procalign       : 16;
                  loopalign       : 8;
                  jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                  constalignmin   : 0;
                  constalignmax   : 8;
                  varalignmin     : 0;
@@ -341,6 +353,9 @@ unit i_android;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;

+ 9 - 0
compiler/systems/i_aros.pas

@@ -75,6 +75,9 @@ unit i_aros;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -138,6 +141,9 @@ unit i_aros;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -200,6 +206,9 @@ unit i_aros;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_atari.pas

@@ -75,6 +75,9 @@ unit i_atari;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_beos.pas

@@ -76,6 +76,9 @@ unit i_beos;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 54 - 0
compiler/systems/i_bsd.pas

@@ -105,6 +105,9 @@ unit i_bsd;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -173,6 +176,9 @@ unit i_bsd;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -240,6 +246,9 @@ unit i_bsd;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -304,6 +313,9 @@ unit i_bsd;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -367,6 +379,9 @@ unit i_bsd;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -434,6 +449,9 @@ unit i_bsd;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -498,6 +516,9 @@ unit i_bsd;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 1;
                 varalignmin     : 0;
@@ -561,6 +582,9 @@ unit i_bsd;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -628,6 +652,9 @@ unit i_bsd;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -691,6 +718,9 @@ unit i_bsd;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -754,6 +784,9 @@ unit i_bsd;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -819,6 +852,9 @@ unit i_bsd;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -884,6 +920,9 @@ unit i_bsd;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -949,6 +988,9 @@ unit i_bsd;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 4;
                 constalignmax   : 8;
                 varalignmin     : 4;
@@ -1014,6 +1056,9 @@ unit i_bsd;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -1078,6 +1123,9 @@ unit i_bsd;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -1142,6 +1190,9 @@ unit i_bsd;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -1207,6 +1258,9 @@ unit i_bsd;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;

+ 21 - 0
compiler/systems/i_embed.pas

@@ -82,6 +82,9 @@ unit i_embed;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -146,6 +149,9 @@ unit i_embed;
                 procalign       : 1;
                 loopalign       : 1;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 1;
                 varalignmin     : 0;
@@ -210,6 +216,9 @@ unit i_embed;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -274,6 +283,9 @@ unit i_embed;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -338,6 +350,9 @@ unit i_embed;
                 procalign       : 16;
                 loopalign       : 8;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -413,6 +428,9 @@ unit i_embed;
                 procalign       : 1;
                 loopalign       : 1;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 2;
                 varalignmin     : 0;
@@ -477,6 +495,9 @@ unit i_embed;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_emx.pas

@@ -86,6 +86,9 @@ unit i_emx;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_gba.pas

@@ -76,6 +76,9 @@ unit i_gba;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_go32v2.pas

@@ -75,6 +75,9 @@ unit i_go32v2;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_haiku.pas

@@ -77,6 +77,9 @@ unit i_haiku;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 6 - 0
compiler/systems/i_jvm.pas

@@ -93,6 +93,9 @@ unit i_jvm;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 4;
@@ -159,6 +162,9 @@ unit i_jvm;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 4;

+ 51 - 0
compiler/systems/i_linux.pas

@@ -81,6 +81,9 @@ unit i_linux;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -147,6 +150,9 @@ unit i_linux;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 16;
                 varalignmin     : 0;
@@ -213,6 +219,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -278,6 +287,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -342,6 +354,9 @@ unit i_linux;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 4;
                 constalignmax   : 16;
                 varalignmin     : 4;
@@ -407,6 +422,9 @@ unit i_linux;
                 procalign       : 16;
                 loopalign       : 8;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -474,6 +492,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 4;
                 constalignmax   : 8;
                 varalignmin     : 4;
@@ -541,6 +562,9 @@ unit i_linux;
                 procalign       : 16;
                 loopalign       : 8;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 4;
                 constalignmax   : 16;
                 varalignmin     : 4;
@@ -608,6 +632,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -675,6 +702,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -742,6 +772,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -807,6 +840,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -878,6 +914,9 @@ unit i_linux;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -945,6 +984,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -1012,6 +1054,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -1078,6 +1123,9 @@ unit i_linux;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -1144,6 +1192,9 @@ unit i_linux;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 4;
                 constalignmax   : 16;
                 varalignmin     : 4;

+ 6 - 0
compiler/systems/i_macos.pas

@@ -74,6 +74,9 @@ unit i_macos;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -138,6 +141,9 @@ unit i_macos;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_morph.pas

@@ -76,6 +76,9 @@ unit i_morph;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_msdos.pas

@@ -93,6 +93,9 @@ unit i_msdos;
                 procalign       : 1;
                 loopalign       : 1;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 2;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_nativent.pas

@@ -80,6 +80,9 @@ unit i_nativent;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 16;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_nds.pas

@@ -76,6 +76,9 @@ unit i_nds;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;//4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_nwl.pas

@@ -75,6 +75,9 @@ unit i_nwl;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_nwm.pas

@@ -75,6 +75,9 @@ unit i_nwm;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_os2.pas

@@ -86,6 +86,9 @@ unit i_os2;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 6 - 0
compiler/systems/i_palmos.pas

@@ -76,6 +76,9 @@ unit i_palmos;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -150,6 +153,9 @@ unit i_palmos;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 9 - 0
compiler/systems/i_sunos.pas

@@ -78,6 +78,9 @@ unit i_sunos;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -147,6 +150,9 @@ unit i_sunos;
                 procalign       : 8;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 8;
                 varalignmin     : 0;
@@ -215,6 +221,9 @@ unit i_sunos;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 4;
                 constalignmax   : 8;
                 varalignmin     : 4;

+ 6 - 0
compiler/systems/i_symbian.pas

@@ -77,6 +77,9 @@ unit i_symbian;
                 procalign       : 16;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 16;
                 varalignmin     : 0;
@@ -141,6 +144,9 @@ unit i_symbian;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_watcom.pas

@@ -75,6 +75,9 @@ unit i_watcom;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_wdosx.pas

@@ -75,6 +75,9 @@ unit i_wdosx;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_wii.pas

@@ -75,6 +75,9 @@ unit i_wii;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 13 - 1
compiler/systems/i_win.pas

@@ -79,7 +79,10 @@ unit i_win;
               (
                 procalign       : 16;
                 loopalign       : 8;
-                jumpalign       : 4;
+                jumpalign       : 16;
+                jumpalignmax    : 10;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 16;
                 varalignmin     : 0;
@@ -148,6 +151,9 @@ unit i_win;
                 procalign       : 16;
                 loopalign       : 8;
                 jumpalign       : 4;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 16;
                 varalignmin     : 0;
@@ -214,6 +220,9 @@ unit i_win;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;
@@ -280,6 +289,9 @@ unit i_win;
                 procalign       : 4;
                 loopalign       : 4;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 4;
                 varalignmin     : 0;

+ 3 - 0
compiler/systems/i_win16.pas

@@ -94,6 +94,9 @@ unit i_win16;
                 procalign       : 1;
                 loopalign       : 1;
                 jumpalign       : 0;
+                jumpalignmax    : 0;
+                coalescealign   : 0;
+                coalescealignmax: 0;
                 constalignmin   : 0;
                 constalignmax   : 2;
                 varalignmin     : 0;