* 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 }
toper = record
ot : longint;
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
dummy1,dummy2,dummy3 : byte;
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
case typ : toptype of
top_none : ();
top_reg : (reg:tregister);
@ -2217,7 +2214,11 @@ begin
end.
{
$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
+ Jonas' inline node patch; non functional yet

View File

@ -81,6 +81,10 @@
{$define oldset}
{$endif sparc}
{$ifdef cpusparc}
{$undef useinline}
{$endif cpusparc}
{$ifdef powerpc}
{$define noopt}
{$define oldset}
@ -102,7 +106,11 @@
{
$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
Revision 1.37 2004/06/16 20:07:07 florian

View File

@ -959,7 +959,11 @@ begin
end.
{
$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
now that the local variables are temps as well (it can cause local
variables to be "freed" in the middle of a procedure)

View File

@ -1209,13 +1209,16 @@ implementation
symtablestack:=symtablestack.next;
{ Align the offset where the union symtable is added }
if (trecordsymtable(symtablestack).usefieldalignment=-1) then
usedalign:=used_align(maxalignment,aktalignment.recordalignmin,aktalignment.maxCrecordalign)
usedalign:=used_align(unionsymtable.recordalignment,aktalignment.recordalignmin,aktalignment.maxCrecordalign)
else
usedalign:=used_align(maxalignment,aktalignment.recordalignmin,aktalignment.recordalignmax);
usedalign:=used_align(unionsymtable.recordalignment,aktalignment.recordalignmin,aktalignment.recordalignmax);
offset:=align(trecordsymtable(symtablestack).datasize,usedalign);
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);
Unionsym.owner:=nil;
unionsym.free;
@ -1231,7 +1234,11 @@ implementation
end.
{
$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
Revision 1.76 2004/07/14 23:19:22 olle

View File

@ -168,7 +168,7 @@ uses
{ reference record }
preference = ^treference;
treference = packed record
treference = record
{ base register, R_NO if none }
base,
{ index register, R_NO if none }
@ -224,11 +224,7 @@ type
References are given from the caller's point of view. The usual
TLocation isn't used, because contains a lot of unnessary fields.
}
tparalocation =
{$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}
packed
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
record
tparalocation = record
Size : TCGSize;
{ The location type where the parameter is passed, usually
LOC_REFERENCE,LOC_REGISTER or LOC_FPUREGISTER
@ -262,7 +258,7 @@ type
end;
tlocation = packed record
tlocation = record
size : TCGSize;
loc : tcgloc;
case tcgloc of
@ -571,7 +567,11 @@ implementation
end.
{
$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
+ Jonas' inline node patch; non functional yet

View File

@ -1107,7 +1107,7 @@ implementation
varalign:=ps.vartype.def.alignment;
if varalign=0 then
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);
{ next }
@ -2316,7 +2316,11 @@ implementation
end.
{
$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
* replace aktstaticsymtable/aktglobalsymtable with current_module

View File

@ -344,7 +344,7 @@ unit i_linux;
use_function_relative_addresses : true
);
system_SPARC_linux_info : tsysteminfo =
system_sparc_linux_info : tsysteminfo =
(
system : system_SPARC_Linux;
name : 'Linux for SPARC';
@ -514,7 +514,11 @@ initialization
end.
{
$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
Revision 1.27 2004/06/20 08:55:32 florian