mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 18:19:16 +02:00
+ support for REV and several other ARMv6/ARMv6T2+ opcodes (mantis #21888)
git-svn-id: trunk@21285 -
This commit is contained in:
parent
f95925dd91
commit
ef2d665a50
@ -179,6 +179,97 @@
|
|||||||
'fuitos',
|
'fuitos',
|
||||||
'fmdrr',
|
'fmdrr',
|
||||||
'fmrrd',
|
'fmrrd',
|
||||||
|
'bfc',
|
||||||
|
'bfi',
|
||||||
|
'clrex',
|
||||||
|
'ldrex',
|
||||||
|
'ldrexb',
|
||||||
|
'ldrexd',
|
||||||
|
'ldrexh',
|
||||||
|
'mls',
|
||||||
|
'pkh',
|
||||||
|
'pli',
|
||||||
|
'qadd16',
|
||||||
|
'qadd8',
|
||||||
|
'qasx',
|
||||||
|
'qsax',
|
||||||
|
'qsub16',
|
||||||
|
'qsub8',
|
||||||
|
'rbit',
|
||||||
|
'rev',
|
||||||
|
'rev16',
|
||||||
|
'revsh',
|
||||||
|
'sadd16',
|
||||||
|
'sadd8',
|
||||||
|
'sasx',
|
||||||
|
'sbfx',
|
||||||
|
'sel',
|
||||||
|
'setend',
|
||||||
|
'sev',
|
||||||
|
'shadd16',
|
||||||
|
'shadd8',
|
||||||
|
'shasx',
|
||||||
|
'shsax',
|
||||||
|
'shsub16',
|
||||||
|
'shsub8',
|
||||||
|
'smlad',
|
||||||
|
'smlald',
|
||||||
|
'smlsd',
|
||||||
|
'smlsld',
|
||||||
|
'smmla',
|
||||||
|
'smmls',
|
||||||
|
'smmul',
|
||||||
|
'smuad',
|
||||||
|
'smusd',
|
||||||
|
'srs',
|
||||||
|
'ssat',
|
||||||
|
'ssat16',
|
||||||
|
'ssax',
|
||||||
|
'ssub16',
|
||||||
|
'ssub8',
|
||||||
|
'strex',
|
||||||
|
'strexb',
|
||||||
|
'strexd',
|
||||||
|
'strexh',
|
||||||
|
'sxtab',
|
||||||
|
'sxtab16',
|
||||||
|
'sxtah',
|
||||||
|
'sxtb',
|
||||||
|
'sxtb16',
|
||||||
|
'sxth',
|
||||||
|
'uadd16',
|
||||||
|
'uadd8',
|
||||||
|
'uasx',
|
||||||
|
'ubfx',
|
||||||
|
'uhadd16',
|
||||||
|
'uhadd8',
|
||||||
|
'uhasx',
|
||||||
|
'uhsax',
|
||||||
|
'uhsub16',
|
||||||
|
'uhsub8',
|
||||||
|
'umaal',
|
||||||
|
'uqadd16',
|
||||||
|
'uqadd8',
|
||||||
|
'uqasx',
|
||||||
|
'uqsax',
|
||||||
|
'uqsub16',
|
||||||
|
'uqsub8',
|
||||||
|
'uqsad8',
|
||||||
|
'uqsada8',
|
||||||
|
'usat',
|
||||||
|
'usat16',
|
||||||
|
'usax',
|
||||||
|
'usub16',
|
||||||
|
'usub8',
|
||||||
|
'uxtab',
|
||||||
|
'uxtab16',
|
||||||
|
'uxtah',
|
||||||
|
'uxtb',
|
||||||
|
'uxtb16',
|
||||||
|
'uxth',
|
||||||
|
'wfe',
|
||||||
|
'wfi',
|
||||||
|
'yield',
|
||||||
'asr',
|
'asr',
|
||||||
'lsr',
|
'lsr',
|
||||||
'lsl',
|
'lsl',
|
||||||
@ -186,8 +277,6 @@
|
|||||||
'sdiv',
|
'sdiv',
|
||||||
'udiv',
|
'udiv',
|
||||||
'movt',
|
'movt',
|
||||||
'ldrex',
|
|
||||||
'strex',
|
|
||||||
'it',
|
'it',
|
||||||
'ite',
|
'ite',
|
||||||
'itt',
|
'itt',
|
||||||
|
@ -204,5 +204,94 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
attsufNONE
|
attsufNONE
|
||||||
);
|
);
|
||||||
|
@ -574,6 +574,132 @@ reg32,reg32,reg32,reg32 \x16\x00\x80\x90 ARM7
|
|||||||
|
|
||||||
[FMRRDcc]
|
[FMRRDcc]
|
||||||
|
|
||||||
|
; ARMv6
|
||||||
|
|
||||||
|
[BFCcc]
|
||||||
|
|
||||||
|
[BFIcc]
|
||||||
|
|
||||||
|
[CLREX]
|
||||||
|
|
||||||
|
[LDREXcc]
|
||||||
|
[LDREXBcc]
|
||||||
|
[LDREXDcc]
|
||||||
|
[LDREXHcc]
|
||||||
|
|
||||||
|
[MLScc]
|
||||||
|
|
||||||
|
[PKHcc]
|
||||||
|
|
||||||
|
[PLI]
|
||||||
|
|
||||||
|
[QADD16cc]
|
||||||
|
[QADD8cc]
|
||||||
|
[QASXcc]
|
||||||
|
[QSAXcc]
|
||||||
|
[QSUB16cc]
|
||||||
|
[QSUB8cc]
|
||||||
|
|
||||||
|
[RBITcc]
|
||||||
|
|
||||||
|
[REVcc]
|
||||||
|
[REV16cc]
|
||||||
|
[REVSHcc]
|
||||||
|
|
||||||
|
[SADD16cc]
|
||||||
|
[SADD8cc]
|
||||||
|
[SASXcc]
|
||||||
|
|
||||||
|
[SBFXcc]
|
||||||
|
|
||||||
|
[SELcc]
|
||||||
|
|
||||||
|
[SETEND]
|
||||||
|
|
||||||
|
[SEVcc]
|
||||||
|
|
||||||
|
[SHADD16cc]
|
||||||
|
[SHADD8cc]
|
||||||
|
[SHASXcc]
|
||||||
|
[SHSAXcc]
|
||||||
|
[SHSUB16cc]
|
||||||
|
[SHSUB8cc]
|
||||||
|
|
||||||
|
[SMLADcc]
|
||||||
|
[SMLALDcc]
|
||||||
|
[SMLSDcc]
|
||||||
|
[SMLSLDcc]
|
||||||
|
[SMMLAcc]
|
||||||
|
[SMMLScc]
|
||||||
|
[SMMULcc]
|
||||||
|
[SMUADcc]
|
||||||
|
[SMUSDcc]
|
||||||
|
|
||||||
|
[SRScc]
|
||||||
|
|
||||||
|
[SSATcc]
|
||||||
|
[SSAT16cc]
|
||||||
|
[SSAXcc]
|
||||||
|
|
||||||
|
[SSUB16cc]
|
||||||
|
[SSUB8cc]
|
||||||
|
|
||||||
|
[STREXcc]
|
||||||
|
[STREXBcc]
|
||||||
|
[STREXDcc]
|
||||||
|
[STREXHcc]
|
||||||
|
|
||||||
|
[SXTABcc]
|
||||||
|
[SXTAB16cc]
|
||||||
|
[SXTAHcc]
|
||||||
|
[SXTBcc]
|
||||||
|
[SXTB16cc]
|
||||||
|
[SXTHcc]
|
||||||
|
|
||||||
|
[UADD16cc]
|
||||||
|
[UADD8cc]
|
||||||
|
[UASXcc]
|
||||||
|
|
||||||
|
[UBFXcc]
|
||||||
|
|
||||||
|
[UHADD16cc]
|
||||||
|
[UHADD8cc]
|
||||||
|
[UHASXcc]
|
||||||
|
[UHSAXcc]
|
||||||
|
[UHSUB16cc]
|
||||||
|
[UHSUB8cc]
|
||||||
|
|
||||||
|
[UMAALcc]
|
||||||
|
|
||||||
|
[UQADD16cc]
|
||||||
|
[UQADD8]
|
||||||
|
[UQASXcc]
|
||||||
|
[UQSAXcc]
|
||||||
|
|
||||||
|
[UQSUB16cc]
|
||||||
|
[UQSUB8cc]
|
||||||
|
[UQSAD8cc]
|
||||||
|
[UQSADA8cc]
|
||||||
|
|
||||||
|
[USATcc]
|
||||||
|
[USAT16cc]
|
||||||
|
[USAXcc]
|
||||||
|
|
||||||
|
[USUB16cc]
|
||||||
|
[USUB8cc]
|
||||||
|
|
||||||
|
[UXTABcc]
|
||||||
|
[UXTAB16cc]
|
||||||
|
[UXTAHcc]
|
||||||
|
|
||||||
|
[UXTBcc]
|
||||||
|
[UXTB16cc]
|
||||||
|
[UXTHcc]
|
||||||
|
|
||||||
|
[WFEcc]
|
||||||
|
[WFIcc]
|
||||||
|
[YIELDcc]
|
||||||
|
|
||||||
; Thumb-2
|
; Thumb-2
|
||||||
|
|
||||||
[ASRcc]
|
[ASRcc]
|
||||||
@ -590,10 +716,6 @@ reg32,reg32,reg32,reg32 \x16\x00\x80\x90 ARM7
|
|||||||
|
|
||||||
[MOVTcc]
|
[MOVTcc]
|
||||||
|
|
||||||
[LDREXcc]
|
|
||||||
|
|
||||||
[STREXcc]
|
|
||||||
|
|
||||||
[IT]
|
[IT]
|
||||||
|
|
||||||
[ITE]
|
[ITE]
|
||||||
|
@ -179,6 +179,97 @@ A_FUITOD,
|
|||||||
A_FUITOS,
|
A_FUITOS,
|
||||||
A_FMDRR,
|
A_FMDRR,
|
||||||
A_FMRRD,
|
A_FMRRD,
|
||||||
|
A_BFC,
|
||||||
|
A_BFI,
|
||||||
|
A_CLREX,
|
||||||
|
A_LDREX,
|
||||||
|
A_LDREXB,
|
||||||
|
A_LDREXD,
|
||||||
|
A_LDREXH,
|
||||||
|
A_MLS,
|
||||||
|
A_PKH,
|
||||||
|
A_PLI,
|
||||||
|
A_QADD16,
|
||||||
|
A_QADD8,
|
||||||
|
A_QASX,
|
||||||
|
A_QSAX,
|
||||||
|
A_QSUB16,
|
||||||
|
A_QSUB8,
|
||||||
|
A_RBIT,
|
||||||
|
A_REV,
|
||||||
|
A_REV16,
|
||||||
|
A_REVSH,
|
||||||
|
A_SADD16,
|
||||||
|
A_SADD8,
|
||||||
|
A_SASX,
|
||||||
|
A_SBFX,
|
||||||
|
A_SEL,
|
||||||
|
A_SETEND,
|
||||||
|
A_SEV,
|
||||||
|
A_SHADD16,
|
||||||
|
A_SHADD8,
|
||||||
|
A_SHASX,
|
||||||
|
A_SHSAX,
|
||||||
|
A_SHSUB16,
|
||||||
|
A_SHSUB8,
|
||||||
|
A_SMLAD,
|
||||||
|
A_SMLALD,
|
||||||
|
A_SMLSD,
|
||||||
|
A_SMLSLD,
|
||||||
|
A_SMMLA,
|
||||||
|
A_SMMLS,
|
||||||
|
A_SMMUL,
|
||||||
|
A_SMUAD,
|
||||||
|
A_SMUSD,
|
||||||
|
A_SRS,
|
||||||
|
A_SSAT,
|
||||||
|
A_SSAT16,
|
||||||
|
A_SSAX,
|
||||||
|
A_SSUB16,
|
||||||
|
A_SSUB8,
|
||||||
|
A_STREX,
|
||||||
|
A_STREXB,
|
||||||
|
A_STREXD,
|
||||||
|
A_STREXH,
|
||||||
|
A_SXTAB,
|
||||||
|
A_SXTAB16,
|
||||||
|
A_SXTAH,
|
||||||
|
A_SXTB,
|
||||||
|
A_SXTB16,
|
||||||
|
A_SXTH,
|
||||||
|
A_UADD16,
|
||||||
|
A_UADD8,
|
||||||
|
A_UASX,
|
||||||
|
A_UBFX,
|
||||||
|
A_UHADD16,
|
||||||
|
A_UHADD8,
|
||||||
|
A_UHASX,
|
||||||
|
A_UHSAX,
|
||||||
|
A_UHSUB16,
|
||||||
|
A_UHSUB8,
|
||||||
|
A_UMAAL,
|
||||||
|
A_UQADD16,
|
||||||
|
A_UQADD8,
|
||||||
|
A_UQASX,
|
||||||
|
A_UQSAX,
|
||||||
|
A_UQSUB16,
|
||||||
|
A_UQSUB8,
|
||||||
|
A_UQSAD8,
|
||||||
|
A_UQSADA8,
|
||||||
|
A_USAT,
|
||||||
|
A_USAT16,
|
||||||
|
A_USAX,
|
||||||
|
A_USUB16,
|
||||||
|
A_USUB8,
|
||||||
|
A_UXTAB,
|
||||||
|
A_UXTAB16,
|
||||||
|
A_UXTAH,
|
||||||
|
A_UXTB,
|
||||||
|
A_UXTB16,
|
||||||
|
A_UXTH,
|
||||||
|
A_WFE,
|
||||||
|
A_WFI,
|
||||||
|
A_YIELD,
|
||||||
A_ASR,
|
A_ASR,
|
||||||
A_LSR,
|
A_LSR,
|
||||||
A_LSL,
|
A_LSL,
|
||||||
@ -186,8 +277,6 @@ A_ROR,
|
|||||||
A_SDIV,
|
A_SDIV,
|
||||||
A_UDIV,
|
A_UDIV,
|
||||||
A_MOVT,
|
A_MOVT,
|
||||||
A_LDREX,
|
|
||||||
A_STREX,
|
|
||||||
A_IT,
|
A_IT,
|
||||||
A_ITE,
|
A_ITE,
|
||||||
A_ITT,
|
A_ITT,
|
||||||
|
@ -656,25 +656,27 @@ Unit raarmgas;
|
|||||||
begin
|
begin
|
||||||
is_ConditionCode := false;
|
is_ConditionCode := false;
|
||||||
|
|
||||||
if actopcode in [A_IT,A_ITE,A_ITT,
|
case actopcode of
|
||||||
A_ITEE,A_ITTE,A_ITET,A_ITTT,
|
A_IT,A_ITE,A_ITT,
|
||||||
A_ITEEE,A_ITTEE,A_ITETE,A_ITTTE,A_ITEET,A_ITTET,A_ITETT,A_ITTTT] then
|
A_ITEE,A_ITTE,A_ITET,A_ITTT,
|
||||||
begin
|
A_ITEEE,A_ITTEE,A_ITETE,A_ITTTE,A_ITEET,A_ITTET,A_ITETT,A_ITTTT:
|
||||||
{ search for condition, conditions are always 2 chars }
|
begin
|
||||||
if length(hs)>1 then
|
{ search for condition, conditions are always 2 chars }
|
||||||
begin
|
if length(hs)>1 then
|
||||||
for icond:=low(tasmcond) to high(tasmcond) do
|
begin
|
||||||
begin
|
for icond:=low(tasmcond) to high(tasmcond) do
|
||||||
if copy(hs,1,2)=uppercond2str[icond] then
|
begin
|
||||||
begin
|
if copy(hs,1,2)=uppercond2str[icond] then
|
||||||
//actcondition:=icond;
|
begin
|
||||||
oper.opr.typ := OPR_COND;
|
//actcondition:=icond;
|
||||||
oper.opr.cc := icond;
|
oper.opr.typ := OPR_COND;
|
||||||
exit(true);
|
oper.opr.cc := icond;
|
||||||
end;
|
exit(true);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user