mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 08:59:26 +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',
|
||||
'fmdrr',
|
||||
'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',
|
||||
'lsr',
|
||||
'lsl',
|
||||
@ -186,8 +277,6 @@
|
||||
'sdiv',
|
||||
'udiv',
|
||||
'movt',
|
||||
'ldrex',
|
||||
'strex',
|
||||
'it',
|
||||
'ite',
|
||||
'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
|
||||
);
|
||||
|
@ -574,6 +574,132 @@ reg32,reg32,reg32,reg32 \x16\x00\x80\x90 ARM7
|
||||
|
||||
[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
|
||||
|
||||
[ASRcc]
|
||||
@ -590,10 +716,6 @@ reg32,reg32,reg32,reg32 \x16\x00\x80\x90 ARM7
|
||||
|
||||
[MOVTcc]
|
||||
|
||||
[LDREXcc]
|
||||
|
||||
[STREXcc]
|
||||
|
||||
[IT]
|
||||
|
||||
[ITE]
|
||||
|
@ -179,6 +179,97 @@ A_FUITOD,
|
||||
A_FUITOS,
|
||||
A_FMDRR,
|
||||
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_LSR,
|
||||
A_LSL,
|
||||
@ -186,8 +277,6 @@ A_ROR,
|
||||
A_SDIV,
|
||||
A_UDIV,
|
||||
A_MOVT,
|
||||
A_LDREX,
|
||||
A_STREX,
|
||||
A_IT,
|
||||
A_ITE,
|
||||
A_ITT,
|
||||
|
@ -656,25 +656,27 @@ Unit raarmgas;
|
||||
begin
|
||||
is_ConditionCode := false;
|
||||
|
||||
if actopcode in [A_IT,A_ITE,A_ITT,
|
||||
A_ITEE,A_ITTE,A_ITET,A_ITTT,
|
||||
A_ITEEE,A_ITTEE,A_ITETE,A_ITTTE,A_ITEET,A_ITTET,A_ITETT,A_ITTTT] then
|
||||
begin
|
||||
{ search for condition, conditions are always 2 chars }
|
||||
if length(hs)>1 then
|
||||
begin
|
||||
for icond:=low(tasmcond) to high(tasmcond) do
|
||||
begin
|
||||
if copy(hs,1,2)=uppercond2str[icond] then
|
||||
begin
|
||||
//actcondition:=icond;
|
||||
oper.opr.typ := OPR_COND;
|
||||
oper.opr.cc := icond;
|
||||
exit(true);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
case actopcode of
|
||||
A_IT,A_ITE,A_ITT,
|
||||
A_ITEE,A_ITTE,A_ITET,A_ITTT,
|
||||
A_ITEEE,A_ITTEE,A_ITETE,A_ITTTE,A_ITEET,A_ITTET,A_ITETT,A_ITTTT:
|
||||
begin
|
||||
{ search for condition, conditions are always 2 chars }
|
||||
if length(hs)>1 then
|
||||
begin
|
||||
for icond:=low(tasmcond) to high(tasmcond) do
|
||||
begin
|
||||
if copy(hs,1,2)=uppercond2str[icond] then
|
||||
begin
|
||||
//actcondition:=icond;
|
||||
oper.opr.typ := OPR_COND;
|
||||
oper.opr.cc := icond;
|
||||
exit(true);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user