diff --git a/compiler/aasmtai.pas b/compiler/aasmtai.pas index e88bc87c23..22a5b2f30a 100644 --- a/compiler/aasmtai.pas +++ b/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; diff --git a/compiler/aggas.pas b/compiler/aggas.pas index d01ba4ff5e..add53a957d 100644 --- a/compiler/aggas.pas +++ b/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 : diff --git a/compiler/assemble.pas b/compiler/assemble.pas index 3e684fde05..2ad66ab2cf 100644 --- a/compiler/assemble.pas +++ b/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; diff --git a/compiler/globals.pas b/compiler/globals.pas index d4f9af7be4..516105d9e3 100644 --- a/compiler/globals.pas +++ b/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; diff --git a/compiler/ncgflw.pas b/compiler/ncgflw.pas index 1cc519860b..4510ba8b0a 100644 --- a/compiler/ncgflw.pas +++ b/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; (* diff --git a/compiler/options.pas b/compiler/options.pas index 8b1638be3a..14bc368977 100644 --- a/compiler/options.pas +++ b/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 diff --git a/compiler/scanner.pas b/compiler/scanner.pas index ec426aba89..e654c2fda4 100644 --- a/compiler/scanner.pas +++ b/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); diff --git a/compiler/systems.pas b/compiler/systems.pas index a0e131645b..19c004feb5 100644 --- a/compiler/systems.pas +++ b/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 } diff --git a/compiler/systems/i_aix.pas b/compiler/systems/i_aix.pas index 6fba4b1095..4d226ab9c2 100644 --- a/compiler/systems/i_aix.pas +++ b/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; diff --git a/compiler/systems/i_amiga.pas b/compiler/systems/i_amiga.pas index b5d31eaf43..e093546915 100644 --- a/compiler/systems/i_amiga.pas +++ b/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; diff --git a/compiler/systems/i_android.pas b/compiler/systems/i_android.pas index 815cb2c2a9..be301881c4 100644 --- a/compiler/systems/i_android.pas +++ b/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; diff --git a/compiler/systems/i_aros.pas b/compiler/systems/i_aros.pas index 412295f663..bc715f81c6 100644 --- a/compiler/systems/i_aros.pas +++ b/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; diff --git a/compiler/systems/i_atari.pas b/compiler/systems/i_atari.pas index ddfb34f566..6ac0a8c746 100644 --- a/compiler/systems/i_atari.pas +++ b/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; diff --git a/compiler/systems/i_beos.pas b/compiler/systems/i_beos.pas index 81ff6ffbcf..d3475fb10c 100644 --- a/compiler/systems/i_beos.pas +++ b/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; diff --git a/compiler/systems/i_bsd.pas b/compiler/systems/i_bsd.pas index e5c2c2777f..029b42135a 100644 --- a/compiler/systems/i_bsd.pas +++ b/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; diff --git a/compiler/systems/i_embed.pas b/compiler/systems/i_embed.pas index 62d0e5bdaa..d11920f47c 100644 --- a/compiler/systems/i_embed.pas +++ b/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; diff --git a/compiler/systems/i_emx.pas b/compiler/systems/i_emx.pas index cc5e8b00d0..ec61d9ff68 100644 --- a/compiler/systems/i_emx.pas +++ b/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; diff --git a/compiler/systems/i_gba.pas b/compiler/systems/i_gba.pas index 1e20da1cf0..47f23c3ba2 100644 --- a/compiler/systems/i_gba.pas +++ b/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; diff --git a/compiler/systems/i_go32v2.pas b/compiler/systems/i_go32v2.pas index 69b93fe14e..e8bc8812be 100644 --- a/compiler/systems/i_go32v2.pas +++ b/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; diff --git a/compiler/systems/i_haiku.pas b/compiler/systems/i_haiku.pas index dd9c94a51a..bf4767a8fd 100644 --- a/compiler/systems/i_haiku.pas +++ b/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; diff --git a/compiler/systems/i_jvm.pas b/compiler/systems/i_jvm.pas index 3e8727b7e4..fa62d4e2ec 100644 --- a/compiler/systems/i_jvm.pas +++ b/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; diff --git a/compiler/systems/i_linux.pas b/compiler/systems/i_linux.pas index c65535df91..dbd2804936 100644 --- a/compiler/systems/i_linux.pas +++ b/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; diff --git a/compiler/systems/i_macos.pas b/compiler/systems/i_macos.pas index 4e10411802..2924c67794 100644 --- a/compiler/systems/i_macos.pas +++ b/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; diff --git a/compiler/systems/i_morph.pas b/compiler/systems/i_morph.pas index a8d02c7a53..e33d279d66 100644 --- a/compiler/systems/i_morph.pas +++ b/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; diff --git a/compiler/systems/i_msdos.pas b/compiler/systems/i_msdos.pas index 1f79f41d5b..4bb0c9f697 100644 --- a/compiler/systems/i_msdos.pas +++ b/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; diff --git a/compiler/systems/i_nativent.pas b/compiler/systems/i_nativent.pas index f75e2b41bc..3356a02290 100644 --- a/compiler/systems/i_nativent.pas +++ b/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; diff --git a/compiler/systems/i_nds.pas b/compiler/systems/i_nds.pas index bfdf0c9550..dc83ba0f0b 100644 --- a/compiler/systems/i_nds.pas +++ b/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; diff --git a/compiler/systems/i_nwl.pas b/compiler/systems/i_nwl.pas index 24da5a0fb1..ea316a0e5c 100644 --- a/compiler/systems/i_nwl.pas +++ b/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; diff --git a/compiler/systems/i_nwm.pas b/compiler/systems/i_nwm.pas index 0ff23451ac..e734149a3d 100644 --- a/compiler/systems/i_nwm.pas +++ b/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; diff --git a/compiler/systems/i_os2.pas b/compiler/systems/i_os2.pas index 15b499f97c..94d4b416c4 100644 --- a/compiler/systems/i_os2.pas +++ b/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; diff --git a/compiler/systems/i_palmos.pas b/compiler/systems/i_palmos.pas index d114eb7292..fe21743c44 100644 --- a/compiler/systems/i_palmos.pas +++ b/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; diff --git a/compiler/systems/i_sunos.pas b/compiler/systems/i_sunos.pas index 8f2d992cd3..0f33e39d09 100644 --- a/compiler/systems/i_sunos.pas +++ b/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; diff --git a/compiler/systems/i_symbian.pas b/compiler/systems/i_symbian.pas index cb98b1d5e7..810a2c9bcc 100644 --- a/compiler/systems/i_symbian.pas +++ b/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; diff --git a/compiler/systems/i_watcom.pas b/compiler/systems/i_watcom.pas index 30c0977dc4..282e1742bd 100644 --- a/compiler/systems/i_watcom.pas +++ b/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; diff --git a/compiler/systems/i_wdosx.pas b/compiler/systems/i_wdosx.pas index 77081db6f8..53d2b64b93 100644 --- a/compiler/systems/i_wdosx.pas +++ b/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; diff --git a/compiler/systems/i_wii.pas b/compiler/systems/i_wii.pas index f11adb90f1..fee2896839 100644 --- a/compiler/systems/i_wii.pas +++ b/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; diff --git a/compiler/systems/i_win.pas b/compiler/systems/i_win.pas index c947073b1e..6e4b41be0e 100644 --- a/compiler/systems/i_win.pas +++ b/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; diff --git a/compiler/systems/i_win16.pas b/compiler/systems/i_win16.pas index 399b113e4a..b64c6769d5 100644 --- a/compiler/systems/i_win16.pas +++ b/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;