From 9d1646e2a872a6bfa2d4bda19d21d1bba26ec853 Mon Sep 17 00:00:00 2001 From: Jeppe Johansen Date: Sat, 26 Dec 2015 23:53:11 +0000 Subject: [PATCH] Add support for writeback in RFE and SRS instructions. git-svn-id: trunk@32749 - --- compiler/arm/agarmgas.pas | 2 +- compiler/arm/armatt.inc | 1 + compiler/arm/armatts.inc | 1 + compiler/arm/armins.dat | 1 + compiler/arm/armop.inc | 1 + compiler/arm/raarmgas.pas | 2 +- 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/arm/agarmgas.pas b/compiler/arm/agarmgas.pas index 687a1c7a3f..0187a07bfd 100644 --- a/compiler/arm/agarmgas.pas +++ b/compiler/arm/agarmgas.pas @@ -360,7 +360,7 @@ unit agarmgas; // writeln(taicpu(hp).fileinfo.line); { LDM and STM use references as first operand but they are written like a register } - if (i=0) and (op in [A_LDM,A_STM,A_FSTM,A_FLDM,A_VSTM,A_VLDM]) then + if (i=0) and (op in [A_LDM,A_STM,A_FSTM,A_FLDM,A_VSTM,A_VLDM,A_SRS,A_RFE]) then begin case taicpu(hp).oper[0]^.typ of top_ref: diff --git a/compiler/arm/armatt.inc b/compiler/arm/armatt.inc index 363944ff45..66ad588ff6 100644 --- a/compiler/arm/armatt.inc +++ b/compiler/arm/armatt.inc @@ -167,6 +167,7 @@ 'smuad', 'smusd', 'srs', +'rfe', 'ssat', 'ssat16', 'ssax', diff --git a/compiler/arm/armatts.inc b/compiler/arm/armatts.inc index fcab30cb1c..621f3e60bc 100644 --- a/compiler/arm/armatts.inc +++ b/compiler/arm/armatts.inc @@ -352,5 +352,6 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, +attsufNONE, attsufNONE ); diff --git a/compiler/arm/armins.dat b/compiler/arm/armins.dat index edfa65faab..3dcdceaf58 100644 --- a/compiler/arm/armins.dat +++ b/compiler/arm/armins.dat @@ -1030,6 +1030,7 @@ reg32,reg32,reg32 \x80\xFB\x40\xF0\x0 THUMB32,ARMv6T2 reg32,reg32,reg32 \x15\x7\x00\x5\xF ARM32,ARMv6 [SRScc] +[RFEcc] [SSATcc] reg32,immshifter,reg32 \x83\xF3\x00\x0\x0 THUMB32,ARMv6T2 diff --git a/compiler/arm/armop.inc b/compiler/arm/armop.inc index 84aa9755f7..41a3cb6d5a 100644 --- a/compiler/arm/armop.inc +++ b/compiler/arm/armop.inc @@ -167,6 +167,7 @@ A_SMMUL, A_SMUAD, A_SMUSD, A_SRS, +A_RFE, A_SSAT, A_SSAT16, A_SSAX, diff --git a/compiler/arm/raarmgas.pas b/compiler/arm/raarmgas.pas index 08673371f8..f31bbb259e 100644 --- a/compiler/arm/raarmgas.pas +++ b/compiler/arm/raarmgas.pas @@ -1004,7 +1004,7 @@ Unit raarmgas; oper.opr.typ:=OPR_REGISTER; oper.opr.reg:=tempreg; end - else if (actasmtoken=AS_NOT) and (actopcode in [A_LDM,A_STM,A_FLDM,A_FSTM,A_VLDM,A_VSTM]) then + else if (actasmtoken=AS_NOT) and (actopcode in [A_LDM,A_STM,A_FLDM,A_FSTM,A_VLDM,A_VSTM,A_SRS,A_RFE]) then begin consume(AS_NOT); oper.opr.typ:=OPR_REFERENCE;