mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-24 13:09:17 +02:00
* patch by Jeppe Johansen to support jumptable generation for case nodes on arm/thumb-2, resolves #19502
git-svn-id: trunk@18233 -
This commit is contained in:
parent
1e1c45c665
commit
2eb39c8843
@ -113,7 +113,9 @@ interface
|
|||||||
relsyms (nor do they support dwarf, for that matter)
|
relsyms (nor do they support dwarf, for that matter)
|
||||||
}
|
}
|
||||||
aitconst_darwin_dwarf_delta64,
|
aitconst_darwin_dwarf_delta64,
|
||||||
aitconst_darwin_dwarf_delta32
|
aitconst_darwin_dwarf_delta32,
|
||||||
|
{ ARM Thumb-2 only }
|
||||||
|
aitconst_half16bit { used for table jumps. The actual value is the 16bit value shifted left once }
|
||||||
);
|
);
|
||||||
|
|
||||||
const
|
const
|
||||||
@ -1326,6 +1328,8 @@ implementation
|
|||||||
result:=LengthUleb128(qword(value));
|
result:=LengthUleb128(qword(value));
|
||||||
aitconst_sleb128bit :
|
aitconst_sleb128bit :
|
||||||
result:=LengthSleb128(value);
|
result:=LengthSleb128(value);
|
||||||
|
aitconst_half16bit:
|
||||||
|
result:=2;
|
||||||
else
|
else
|
||||||
internalerror(200603253);
|
internalerror(200603253);
|
||||||
end;
|
end;
|
||||||
|
@ -195,10 +195,10 @@ implementation
|
|||||||
|
|
||||||
|
|
||||||
const
|
const
|
||||||
ait_const2str : array[aitconst_128bit..aitconst_darwin_dwarf_delta32] of string[20]=(
|
ait_const2str : array[aitconst_128bit..aitconst_half16bit] of string[20]=(
|
||||||
#9'.fixme128'#9,#9'.quad'#9,#9'.long'#9,#9'.short'#9,#9'.byte'#9,
|
#9'.fixme128'#9,#9'.quad'#9,#9'.long'#9,#9'.short'#9,#9'.byte'#9,
|
||||||
#9'.sleb128'#9,#9'.uleb128'#9,
|
#9'.sleb128'#9,#9'.uleb128'#9,
|
||||||
#9'.rva'#9,#9'.secrel32'#9,#9'.quad'#9,#9'.long'#9
|
#9'.rva'#9,#9'.secrel32'#9,#9'.quad'#9,#9'.long'#9,#9'.short'#9
|
||||||
);
|
);
|
||||||
|
|
||||||
function ReplaceForbiddenChars(const s: string): string;
|
function ReplaceForbiddenChars(const s: string): string;
|
||||||
@ -835,7 +835,8 @@ implementation
|
|||||||
aitconst_rva_symbol,
|
aitconst_rva_symbol,
|
||||||
aitconst_secrel32_symbol,
|
aitconst_secrel32_symbol,
|
||||||
aitconst_darwin_dwarf_delta32,
|
aitconst_darwin_dwarf_delta32,
|
||||||
aitconst_darwin_dwarf_delta64:
|
aitconst_darwin_dwarf_delta64,
|
||||||
|
aitconst_half16bit:
|
||||||
begin
|
begin
|
||||||
if (target_info.system in systems_darwin) and
|
if (target_info.system in systems_darwin) and
|
||||||
(constdef in [aitconst_uleb128bit,aitconst_sleb128bit]) then
|
(constdef in [aitconst_uleb128bit,aitconst_sleb128bit]) then
|
||||||
@ -881,6 +882,9 @@ implementation
|
|||||||
{ 64 bit constants are already handled above in this case }
|
{ 64 bit constants are already handled above in this case }
|
||||||
s:=tostr(longint(tai_const(hp).value));
|
s:=tostr(longint(tai_const(hp).value));
|
||||||
{$endif cpu64bitaddr}
|
{$endif cpu64bitaddr}
|
||||||
|
if constdef = aitconst_half16bit then
|
||||||
|
s:='('+s+')/2';
|
||||||
|
|
||||||
AsmWrite(s);
|
AsmWrite(s);
|
||||||
inc(l,length(s));
|
inc(l,length(s));
|
||||||
{ Values with symbols are written on a single line to improve
|
{ Values with symbols are written on a single line to improve
|
||||||
|
@ -202,5 +202,7 @@
|
|||||||
'iteet',
|
'iteet',
|
||||||
'ittet',
|
'ittet',
|
||||||
'itett',
|
'itett',
|
||||||
'itttt'
|
'itttt',
|
||||||
|
'tbb',
|
||||||
|
'tbh'
|
||||||
);
|
);
|
||||||
|
@ -202,5 +202,7 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
attsufNONE
|
attsufNONE
|
||||||
);
|
);
|
||||||
|
@ -623,3 +623,6 @@ reg32,reg32,reg32,reg32 \x16\x00\x80\x90 ARM7
|
|||||||
[ITETT]
|
[ITETT]
|
||||||
|
|
||||||
[ITTTT]
|
[ITTTT]
|
||||||
|
|
||||||
|
[TBB]
|
||||||
|
[TBH]
|
||||||
|
@ -202,5 +202,7 @@ A_ITTTE,
|
|||||||
A_ITEET,
|
A_ITEET,
|
||||||
A_ITTET,
|
A_ITTET,
|
||||||
A_ITETT,
|
A_ITETT,
|
||||||
A_ITTTT
|
A_ITTTT,
|
||||||
|
A_TBB,
|
||||||
|
A_TBH
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user