+ support for REV and several other ARMv6/ARMv6T2+ opcodes (mantis #21888)

git-svn-id: trunk@21285 -
This commit is contained in:
Jonas Maebe 2012-05-13 12:14:26 +00:00
parent f95925dd91
commit ef2d665a50
5 changed files with 418 additions and 27 deletions

View File

@ -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',

View File

@ -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
);

View File

@ -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]

View File

@ -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,

View File

@ -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;