* fixed alignment of variant records

* more alignment problems fixed
This commit is contained in:
florian 2004-08-15 13:30:18 +00:00
parent 0ccc15675e
commit cf25a973f8
7 changed files with 53 additions and 25 deletions

View File

@ -182,9 +182,6 @@ interface
{ please keep the size of this record <=12 bytes and keep it properly aligned } { please keep the size of this record <=12 bytes and keep it properly aligned }
toper = record toper = record
ot : longint; ot : longint;
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
dummy1,dummy2,dummy3 : byte;
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
case typ : toptype of case typ : toptype of
top_none : (); top_none : ();
top_reg : (reg:tregister); top_reg : (reg:tregister);
@ -2217,7 +2214,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.87 2004-08-14 14:50:42 florian Revision 1.88 2004-08-15 13:30:18 florian
* fixed alignment of variant records
* more alignment problems fixed
Revision 1.87 2004/08/14 14:50:42 florian
* fixed several sparc alignment issues * fixed several sparc alignment issues
+ Jonas' inline node patch; non functional yet + Jonas' inline node patch; non functional yet

View File

@ -81,6 +81,10 @@
{$define oldset} {$define oldset}
{$endif sparc} {$endif sparc}
{$ifdef cpusparc}
{$undef useinline}
{$endif cpusparc}
{$ifdef powerpc} {$ifdef powerpc}
{$define noopt} {$define noopt}
{$define oldset} {$define oldset}
@ -102,7 +106,11 @@
{ {
$Log$ $Log$
Revision 1.38 2004-06-20 08:55:29 florian Revision 1.39 2004-08-15 13:30:18 florian
* fixed alignment of variant records
* more alignment problems fixed
Revision 1.38 2004/06/20 08:55:29 florian
* logs truncated * logs truncated
Revision 1.37 2004/06/16 20:07:07 florian Revision 1.37 2004/06/16 20:07:07 florian

View File

@ -959,7 +959,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.121 2004-07-15 20:47:53 jonas Revision 1.122 2004-08-15 13:30:18 florian
* fixed alignment of variant records
* more alignment problems fixed
Revision 1.121 2004/07/15 20:47:53 jonas
- disabled temp-to-temp copy optimization, because it can cause errors - disabled temp-to-temp copy optimization, because it can cause errors
now that the local variables are temps as well (it can cause local now that the local variables are temps as well (it can cause local
variables to be "freed" in the middle of a procedure) variables to be "freed" in the middle of a procedure)

View File

@ -1209,13 +1209,16 @@ implementation
symtablestack:=symtablestack.next; symtablestack:=symtablestack.next;
{ Align the offset where the union symtable is added } { Align the offset where the union symtable is added }
if (trecordsymtable(symtablestack).usefieldalignment=-1) then if (trecordsymtable(symtablestack).usefieldalignment=-1) then
usedalign:=used_align(maxalignment,aktalignment.recordalignmin,aktalignment.maxCrecordalign) usedalign:=used_align(unionsymtable.recordalignment,aktalignment.recordalignmin,aktalignment.maxCrecordalign)
else else
usedalign:=used_align(maxalignment,aktalignment.recordalignmin,aktalignment.recordalignmax); usedalign:=used_align(unionsymtable.recordalignment,aktalignment.recordalignmin,aktalignment.recordalignmax);
offset:=align(trecordsymtable(symtablestack).datasize,usedalign); offset:=align(trecordsymtable(symtablestack).datasize,usedalign);
trecordsymtable(symtablestack).datasize:=offset+unionsymtable.datasize; trecordsymtable(symtablestack).datasize:=offset+unionsymtable.datasize;
if maxalignment>trecordsymtable(symtablestack).fieldalignment then
trecordsymtable(symtablestack).fieldalignment:=maxalignment; if unionsymtable.recordalignment>trecordsymtable(symtablestack).fieldalignment then
trecordsymtable(symtablestack).fieldalignment:=unionsymtable.recordalignment;
trecordsymtable(symtablestack).insertunionst(Unionsymtable,offset); trecordsymtable(symtablestack).insertunionst(Unionsymtable,offset);
Unionsym.owner:=nil; Unionsym.owner:=nil;
unionsym.free; unionsym.free;
@ -1231,7 +1234,11 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.77 2004-08-07 19:14:50 florian Revision 1.78 2004-08-15 13:30:18 florian
* fixed alignment of variant records
* more alignment problems fixed
Revision 1.77 2004/08/07 19:14:50 florian
* fixed problem with explicit specified calling conventions for property symbols * fixed problem with explicit specified calling conventions for property symbols
Revision 1.76 2004/07/14 23:19:22 olle Revision 1.76 2004/07/14 23:19:22 olle

View File

@ -168,7 +168,7 @@ uses
{ reference record } { reference record }
preference = ^treference; preference = ^treference;
treference = packed record treference = record
{ base register, R_NO if none } { base register, R_NO if none }
base, base,
{ index register, R_NO if none } { index register, R_NO if none }
@ -224,11 +224,7 @@ type
References are given from the caller's point of view. The usual References are given from the caller's point of view. The usual
TLocation isn't used, because contains a lot of unnessary fields. TLocation isn't used, because contains a lot of unnessary fields.
} }
tparalocation = tparalocation = record
{$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
packed
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
record
Size : TCGSize; Size : TCGSize;
{ The location type where the parameter is passed, usually { The location type where the parameter is passed, usually
LOC_REFERENCE,LOC_REGISTER or LOC_FPUREGISTER LOC_REFERENCE,LOC_REGISTER or LOC_FPUREGISTER
@ -262,7 +258,7 @@ type
end; end;
tlocation = packed record tlocation = record
size : TCGSize; size : TCGSize;
loc : tcgloc; loc : tcgloc;
case tcgloc of case tcgloc of
@ -571,7 +567,11 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.69 2004-08-14 14:50:42 florian Revision 1.70 2004-08-15 13:30:18 florian
* fixed alignment of variant records
* more alignment problems fixed
Revision 1.69 2004/08/14 14:50:42 florian
* fixed several sparc alignment issues * fixed several sparc alignment issues
+ Jonas' inline node patch; non functional yet + Jonas' inline node patch; non functional yet

View File

@ -1107,7 +1107,7 @@ implementation
varalign:=ps.vartype.def.alignment; varalign:=ps.vartype.def.alignment;
if varalign=0 then if varalign=0 then
varalign:=size_2_align(ps.getvaluesize); varalign:=size_2_align(ps.getvaluesize);
varalignrecord:=used_align(varalign,aktalignment.recordalignmin,aktalignment.recordalignmax); varalignrecord:=used_align(varalign,aktalignment.recordalignmin,fieldalignment);
recordalignment:=max(recordalignment,varalignrecord); recordalignment:=max(recordalignment,varalignrecord);
{ next } { next }
@ -2316,7 +2316,11 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.152 2004-07-09 22:17:32 peter Revision 1.153 2004-08-15 13:30:18 florian
* fixed alignment of variant records
* more alignment problems fixed
Revision 1.152 2004/07/09 22:17:32 peter
* revert has_localst patch * revert has_localst patch
* replace aktstaticsymtable/aktglobalsymtable with current_module * replace aktstaticsymtable/aktglobalsymtable with current_module

View File

@ -344,7 +344,7 @@ unit i_linux;
use_function_relative_addresses : true use_function_relative_addresses : true
); );
system_SPARC_linux_info : tsysteminfo = system_sparc_linux_info : tsysteminfo =
( (
system : system_SPARC_Linux; system : system_SPARC_Linux;
name : 'Linux for SPARC'; name : 'Linux for SPARC';
@ -514,7 +514,11 @@ initialization
end. end.
{ {
$Log$ $Log$
Revision 1.28 2004-06-29 21:00:08 peter Revision 1.29 2004-08-15 13:30:18 florian
* fixed alignment of variant records
* more alignment problems fixed
Revision 1.28 2004/06/29 21:00:08 peter
* only enable dwarf for supported platforms * only enable dwarf for supported platforms
Revision 1.27 2004/06/20 08:55:32 florian Revision 1.27 2004/06/20 08:55:32 florian