mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 23:49:22 +02:00
* fixed more alignment issues
This commit is contained in:
parent
b80d10cb70
commit
35b8e93073
@ -141,8 +141,9 @@ interface
|
|||||||
toptype=(top_none,top_reg,top_ref,top_const,top_symbol,top_bool,top_local,
|
toptype=(top_none,top_reg,top_ref,top_const,top_symbol,top_bool,top_local,
|
||||||
{ ARM only }
|
{ ARM only }
|
||||||
top_regset,
|
top_regset,
|
||||||
{ ARM only }
|
top_shifterop,
|
||||||
top_shifterop);
|
{ m68k only }
|
||||||
|
top_reglist);
|
||||||
|
|
||||||
{ kinds of operations that an instruction can perform on an operand }
|
{ kinds of operations that an instruction can perform on an operand }
|
||||||
topertype = (operand_read,operand_write,operand_readwrite);
|
topertype = (operand_read,operand_write,operand_readwrite);
|
||||||
@ -163,6 +164,9 @@ interface
|
|||||||
top_regset : (regset:^tcpuregisterset);
|
top_regset : (regset:^tcpuregisterset);
|
||||||
top_shifterop : (shifterop : pshifterop);
|
top_shifterop : (shifterop : pshifterop);
|
||||||
{$endif arm}
|
{$endif arm}
|
||||||
|
{$ifdef m68k}
|
||||||
|
top_regset : (regset:^tcpuregisterset);
|
||||||
|
{$endif m68k}
|
||||||
end;
|
end;
|
||||||
poper=^toper;
|
poper=^toper;
|
||||||
|
|
||||||
@ -1971,7 +1975,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.67 2004-01-26 16:12:27 daniel
|
Revision 1.68 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.67 2004/01/26 16:12:27 daniel
|
||||||
* reginfo now also only allocated during register allocation
|
* reginfo now also only allocated during register allocation
|
||||||
* third round of gdb cleanups: kick out most of concatstabto
|
* third round of gdb cleanups: kick out most of concatstabto
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ Type
|
|||||||
{ structure or to improve alignment }
|
{ structure or to improve alignment }
|
||||||
TStateInt = Byte;
|
TStateInt = Byte;
|
||||||
|
|
||||||
TContent = Packed Record
|
TContent = Record
|
||||||
{ start and end of block instructions that defines the }
|
{ start and end of block instructions that defines the }
|
||||||
{ content of this register. If Typ = con_const, then }
|
{ content of this register. If Typ = con_const, then }
|
||||||
{ Longint(StartMod) = value of the constant) }
|
{ Longint(StartMod) = value of the constant) }
|
||||||
@ -788,7 +788,10 @@ End.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.8 2002-11-18 17:31:54 peter
|
Revision 1.9 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.8 2002/11/18 17:31:54 peter
|
||||||
* pass proccalloption to ret_in_xxx and push_xxx functions
|
* pass proccalloption to ret_in_xxx and push_xxx functions
|
||||||
|
|
||||||
Revision 1.7 2002/08/18 18:16:55 florian
|
Revision 1.7 2002/08/18 18:16:55 florian
|
||||||
|
@ -364,71 +364,6 @@ uses
|
|||||||
const
|
const
|
||||||
max_operands = 5;
|
max_operands = 5;
|
||||||
|
|
||||||
(*
|
|
||||||
{# Table of registers which can be allocated by the code generator
|
|
||||||
internally, when generating the code.
|
|
||||||
}
|
|
||||||
{ legend: }
|
|
||||||
{ xxxregs = set of all possibly used registers of that type in the code }
|
|
||||||
{ generator }
|
|
||||||
{ usableregsxxx = set of all 32bit components of registers that can be }
|
|
||||||
{ possible allocated to a regvar or using getregisterxxx (this }
|
|
||||||
{ excludes registers which can be only used for parameter }
|
|
||||||
{ passing on ABI's that define this) }
|
|
||||||
{ c_countusableregsxxx = amount of registers in the usableregsxxx set }
|
|
||||||
|
|
||||||
maxintregs = 18;
|
|
||||||
{ to determine how many registers to use for regvars }
|
|
||||||
maxintscratchregs = 3;
|
|
||||||
usableregsint = [RS_R13..RS_R27];
|
|
||||||
c_countusableregsint = 18;
|
|
||||||
|
|
||||||
maxfpuregs = 31-14+1;
|
|
||||||
usableregsfpu = [RS_F14..RS_F31];
|
|
||||||
c_countusableregsfpu = 31-14+1;
|
|
||||||
|
|
||||||
usableregsmm = [RS_M14..RS_M31];
|
|
||||||
c_countusableregsmm = 31-14+1;
|
|
||||||
|
|
||||||
{ no distinction on this platform }
|
|
||||||
maxaddrregs = 0;
|
|
||||||
addrregs = [];
|
|
||||||
usableregsaddr = [];
|
|
||||||
c_countusableregsaddr = 0;
|
|
||||||
|
|
||||||
firstsaveintreg = RS_R13;
|
|
||||||
lastsaveintreg = RS_R31;
|
|
||||||
firstsavefpureg = RS_F14;
|
|
||||||
lastsavefpureg = RS_F31;
|
|
||||||
{ no altivec support yet. Need to override tcgobj.a_loadmm_* first in tcgppc }
|
|
||||||
firstsavemmreg = RS_INVALID;
|
|
||||||
lastsavemmreg = RS_INVALID;
|
|
||||||
|
|
||||||
maxvarregs = 15;
|
|
||||||
varregs : Array [1..maxvarregs] of Tsuperregister =
|
|
||||||
(RS_R14,RS_R15,RS_R16,RS_R17,RS_R18,RS_R19,RS_R20,RS_R21,
|
|
||||||
RS_R22,RS_R23,RS_R24,RS_R25,RS_R26,RS_R27,RS_R28);
|
|
||||||
|
|
||||||
maxfpuvarregs = 31-14+1;
|
|
||||||
fpuvarregs : Array [1..maxfpuvarregs] of Tsuperregister =
|
|
||||||
(RS_F14,RS_F15,RS_F16,RS_F17,RS_F18,RS_F19,RS_F20,RS_F21,RS_F22,RS_F23,
|
|
||||||
RS_F24,RS_F25,RS_F26,RS_F27,RS_F28,RS_F29,RS_F30,RS_F31);
|
|
||||||
|
|
||||||
{
|
|
||||||
// max_param_regs_int = 8;
|
|
||||||
// param_regs_int: Array[1..max_param_regs_int] of Tsuperregister =
|
|
||||||
// (R_3,R_4,R_5,R_6,R_7,R_8,R_9,R_10);
|
|
||||||
|
|
||||||
// max_param_regs_fpu = 13;
|
|
||||||
// param_regs_fpu: Array[1..max_param_regs_fpu] of Toldregister =
|
|
||||||
// (RS_F1,RS_F2,RS_F3,RS_F4,RS_F5,RS_F6,RS_F7,RS_F8,RS_F9,RS_F10,RS_F11,RS_F12,RS_F13);
|
|
||||||
|
|
||||||
max_param_regs_mm = 13;
|
|
||||||
param_regs_mm: Array[1..max_param_regs_mm] of Toldregister =
|
|
||||||
(R_M1,R_M2,R_M3,R_M4,R_M5,R_M6,R_M7,R_M8,R_M9,R_M10,R_M11,R_M12,R_M13);
|
|
||||||
}
|
|
||||||
|
|
||||||
*)
|
|
||||||
|
|
||||||
{*****************************************************************************
|
{*****************************************************************************
|
||||||
Default generic sizes
|
Default generic sizes
|
||||||
@ -694,7 +629,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.82 2004-01-10 00:16:21 jonas
|
Revision 1.83 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.82 2004/01/10 00:16:21 jonas
|
||||||
* fixed mtfsb0 instruction for assembler reader/writer
|
* fixed mtfsb0 instruction for assembler reader/writer
|
||||||
* fixed initialisation of fpscr register to avoid spurious SIGPFE's
|
* fixed initialisation of fpscr register to avoid spurious SIGPFE's
|
||||||
(uses mtfsb0 instruction, so added extra define in options.pas to avoid
|
(uses mtfsb0 instruction, so added extra define in options.pas to avoid
|
||||||
|
@ -41,7 +41,7 @@ type
|
|||||||
{$endif Test_Double_checksum}
|
{$endif Test_Double_checksum}
|
||||||
|
|
||||||
const
|
const
|
||||||
CurrentPPUVersion=38;
|
CurrentPPUVersion=39;
|
||||||
|
|
||||||
{ buffer sizes }
|
{ buffer sizes }
|
||||||
maxentrysize = 1024;
|
maxentrysize = 1024;
|
||||||
@ -153,9 +153,9 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
tppuentry=packed record
|
tppuentry=packed record
|
||||||
|
size : longint;
|
||||||
id : byte;
|
id : byte;
|
||||||
nr : byte;
|
nr : byte;
|
||||||
size : longint;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
tppufile=class
|
tppufile=class
|
||||||
@ -993,7 +993,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.44 2003-11-10 22:02:52 peter
|
Revision 1.45 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.44 2003/11/10 22:02:52 peter
|
||||||
* cross unit inlining fixed
|
* cross unit inlining fixed
|
||||||
|
|
||||||
Revision 1.43 2003/10/22 20:40:00 peter
|
Revision 1.43 2003/10/22 20:40:00 peter
|
||||||
|
@ -39,7 +39,7 @@ unit rabase;
|
|||||||
tcbaseasmreader = class of tbaseasmreader;
|
tcbaseasmreader = class of tbaseasmreader;
|
||||||
|
|
||||||
pasmmodeinfo = ^tasmmodeinfo;
|
pasmmodeinfo = ^tasmmodeinfo;
|
||||||
tasmmodeinfo = packed record
|
tasmmodeinfo = record
|
||||||
id : tasmmode;
|
id : tasmmode;
|
||||||
idtxt : string[8];
|
idtxt : string[8];
|
||||||
casmreader : tcbaseasmreader;
|
casmreader : tcbaseasmreader;
|
||||||
@ -106,7 +106,10 @@ finalization
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.2 2003-11-12 16:58:42 peter
|
Revision 1.3 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.2 2003/11/12 16:58:42 peter
|
||||||
* fixed wrong initialization
|
* fixed wrong initialization
|
||||||
|
|
||||||
Revision 1.1 2003/11/12 16:05:39 florian
|
Revision 1.1 2003/11/12 16:05:39 florian
|
||||||
|
@ -1141,7 +1141,7 @@ implementation
|
|||||||
var
|
var
|
||||||
ps,nps : tvarsym;
|
ps,nps : tvarsym;
|
||||||
pd,npd : tdef;
|
pd,npd : tdef;
|
||||||
varalignrecord,
|
varalignrecord,varalign,
|
||||||
storesize,storealign : longint;
|
storesize,storealign : longint;
|
||||||
begin
|
begin
|
||||||
storesize:=datasize;
|
storesize:=datasize;
|
||||||
@ -1162,8 +1162,14 @@ implementation
|
|||||||
symsearch.insert(ps);
|
symsearch.insert(ps);
|
||||||
{ update address }
|
{ update address }
|
||||||
ps.fieldoffset:=datasize;
|
ps.fieldoffset:=datasize;
|
||||||
|
|
||||||
{ update alignment of this record }
|
{ update alignment of this record }
|
||||||
varalignrecord:=used_align(ps.vartype.def.alignment,aktalignment.recordalignmin,aktalignment.recordalignmax);
|
varalign:=ps.vartype.def.alignment;
|
||||||
|
{
|
||||||
|
if varalign=0 then
|
||||||
|
varalign:=size_2_align(ps.getvaluesize);
|
||||||
|
}
|
||||||
|
varalignrecord:=used_align(varalign,aktalignment.recordalignmin,aktalignment.recordalignmax);
|
||||||
recordalignment:=max(recordalignment,varalignrecord);
|
recordalignment:=max(recordalignment,varalignrecord);
|
||||||
{ next }
|
{ next }
|
||||||
ps:=nps;
|
ps:=nps;
|
||||||
@ -2333,7 +2339,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.129 2004-01-29 16:51:29 peter
|
Revision 1.130 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.129 2004/01/29 16:51:29 peter
|
||||||
* fixed alignment calculation for variant records
|
* fixed alignment calculation for variant records
|
||||||
* fixed alignment padding of records
|
* fixed alignment padding of records
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ interface
|
|||||||
|
|
||||||
|
|
||||||
palignmentinfo = ^talignmentinfo;
|
palignmentinfo = ^talignmentinfo;
|
||||||
talignmentinfo = packed record
|
talignmentinfo = record
|
||||||
procalign,
|
procalign,
|
||||||
loopalign,
|
loopalign,
|
||||||
jumpalign,
|
jumpalign,
|
||||||
@ -195,7 +195,7 @@ interface
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
pasminfo = ^tasminfo;
|
pasminfo = ^tasminfo;
|
||||||
tasminfo = packed record
|
tasminfo = record
|
||||||
id : tasm;
|
id : tasm;
|
||||||
idtxt : string[9];
|
idtxt : string[9];
|
||||||
asmbin : string[8];
|
asmbin : string[8];
|
||||||
@ -211,13 +211,13 @@ interface
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
parinfo = ^tarinfo;
|
parinfo = ^tarinfo;
|
||||||
tarinfo = packed record
|
tarinfo = record
|
||||||
id : tar;
|
id : tar;
|
||||||
arcmd : string[50];
|
arcmd : string[50];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
presinfo = ^tresinfo;
|
presinfo = ^tresinfo;
|
||||||
tresinfo = packed record
|
tresinfo = record
|
||||||
id : tres;
|
id : tres;
|
||||||
resbin : string[8];
|
resbin : string[8];
|
||||||
rescmd : string[50];
|
rescmd : string[50];
|
||||||
@ -650,7 +650,10 @@ finalization
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.81 2004-01-28 15:36:46 florian
|
Revision 1.82 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.81 2004/01/28 15:36:46 florian
|
||||||
* fixed another couple of arm bugs
|
* fixed another couple of arm bugs
|
||||||
|
|
||||||
Revision 1.80 2004/01/21 20:53:50 marco
|
Revision 1.80 2004/01/21 20:53:50 marco
|
||||||
|
@ -257,9 +257,9 @@ begin
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
first:=false;
|
first:=false;
|
||||||
writeln(confile,'NR_',names[i],' = ',numbers[i],';');
|
|
||||||
writeln(supfile,'RS_',names[i],' = ',supregs[i],';');
|
writeln(supfile,'RS_',names[i],' = ',supregs[i],';');
|
||||||
write(numfile,'NR_',names[i]);
|
writeln(confile,'NR_'+names[i],' = ','tregister(',numbers[i],')',';');
|
||||||
|
write(numfile,'tregister(',numbers[i],')');
|
||||||
write(stdfile,'''',stdnames[i],'''');
|
write(stdfile,'''',stdnames[i],'''');
|
||||||
write(stabfile,stabs[i]);
|
write(stabfile,stabs[i]);
|
||||||
write(rnifile,regnumber_index[i]);
|
write(rnifile,regnumber_index[i]);
|
||||||
@ -293,6 +293,9 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.2 2003-12-10 02:22:59 karoly
|
Revision 1.3 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.2 2003/12/10 02:22:59 karoly
|
||||||
* fixed logs
|
* fixed logs
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ uses
|
|||||||
type
|
type
|
||||||
{ reference record }
|
{ reference record }
|
||||||
preference = ^treference;
|
preference = ^treference;
|
||||||
treference = packed record
|
treference = record
|
||||||
segment,
|
segment,
|
||||||
base,
|
base,
|
||||||
index : tregister;
|
index : tregister;
|
||||||
@ -253,7 +253,7 @@ uses
|
|||||||
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 = packed record
|
tparalocation = record
|
||||||
size : TCGSize;
|
size : TCGSize;
|
||||||
loc : TCGLoc;
|
loc : TCGLoc;
|
||||||
alignment : byte;
|
alignment : byte;
|
||||||
@ -535,7 +535,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.37 2004-01-15 14:01:32 florian
|
Revision 1.38 2004-01-30 13:42:03 florian
|
||||||
|
* fixed more alignment issues
|
||||||
|
|
||||||
|
Revision 1.37 2004/01/15 14:01:32 florian
|
||||||
+ x86 instruction tables for x86-64 extended
|
+ x86 instruction tables for x86-64 extended
|
||||||
|
|
||||||
Revision 1.36 2004/01/14 23:39:05 florian
|
Revision 1.36 2004/01/14 23:39:05 florian
|
||||||
|
Loading…
Reference in New Issue
Block a user