@@ -1041,6 +1041,20 @@ static const struct arm_arch_core_flag arm_arch_core_flags[] =
},
},
{
+ "armv8-r",
+ {
+ ISA_ARMv8r,
+ isa_nobit
+ },
+ },
+ {
+ "armv8-r+crc",
+ {
+ ISA_ARMv8r,isa_bit_crc32,
+ isa_nobit
+ },
+ },
+ {
"iwmmxt",
{
ISA_ARMv5te,isa_bit_xscale,isa_bit_iwmmxt,
@@ -1478,6 +1478,26 @@ static const struct processors all_architectures[] =
NULL
},
{
+ "armv8-r", TARGET_CPU_cortexr4,
+ (TF_CO_PROC),
+ "8R", BASE_ARCH_8R,
+ {
+ ISA_ARMv8r,
+ isa_nobit
+ },
+ NULL
+ },
+ {
+ "armv8-r+crc", TARGET_CPU_cortexr4,
+ (TF_CO_PROC),
+ "8R", BASE_ARCH_8R,
+ {
+ ISA_ARMv8r,isa_bit_crc32,
+ isa_nobit
+ },
+ NULL
+ },
+ {
"iwmmxt", TARGET_CPU_iwmmxt,
(TF_LDSCHED | TF_STRONG | TF_XSCALE),
"5TE", BASE_ARCH_5TE,
@@ -287,6 +287,20 @@ begin arch armv8-m.main+dsp
isa ARMv8m_main bit_ARMv7em
end arch armv8-m.main+dsp
+begin arch armv8-r
+ tune for cortex-r4
+ tune flags CO_PROC
+ base 8R
+ isa ARMv8r
+end arch armv8-r
+
+begin arch armv8-r+crc
+ tune for cortex-r4
+ tune flags CO_PROC
+ base 8R
+ isa ARMv8r bit_crc32
+end arch armv8-r+crc
+
begin arch iwmmxt
tune for iwmmxt
tune flags LDSCHED STRONG XSCALE
@@ -125,6 +125,7 @@ enum isa_feature
#define ISA_ARMv8_2a ISA_ARMv8_1a, isa_bit_ARMv8_2
#define ISA_ARMv8m_base ISA_ARMv6m, isa_bit_ARMv8, isa_bit_cmse, isa_bit_tdiv
#define ISA_ARMv8m_main ISA_ARMv7m, isa_bit_ARMv8, isa_bit_cmse
+#define ISA_ARMv8r ISA_ARMv8a
/* List of all FPU bits to strip out if -mfpu is used to override the
default. isa_bit_fp16 is deliberately missing from this list. */
@@ -461,10 +461,16 @@ EnumValue
Enum(arm_arch) String(armv8-m.main+dsp) Value(33)
EnumValue
-Enum(arm_arch) String(iwmmxt) Value(34)
+Enum(arm_arch) String(armv8-r) Value(34)
EnumValue
-Enum(arm_arch) String(iwmmxt2) Value(35)
+Enum(arm_arch) String(armv8-r+crc) Value(35)
+
+EnumValue
+Enum(arm_arch) String(iwmmxt) Value(36)
+
+EnumValue
+Enum(arm_arch) String(iwmmxt2) Value(37)
Enum
Name(arm_fpu) Type(enum fpu_type)
@@ -373,7 +373,8 @@ enum base_architecture
BASE_ARCH_7EM = 7,
BASE_ARCH_8A = 8,
BASE_ARCH_8M_BASE = 8,
- BASE_ARCH_8M_MAIN = 8
+ BASE_ARCH_8M_MAIN = 8,
+ BASE_ARCH_8R = 8
};
/* The major revision number of the ARM Architecture implemented by the target. */
@@ -99,6 +99,8 @@
|march=armv8-m.base|mcpu=cortex-m23 \
|march=armv8-m.main \
|march=armv8-m.main+dsp|mcpu=cortex-m33 \
+ |march-armv8-r \
+ |march-armv8-r+crc \
:%{!r:--be8}}}"
#else
#define BE8_LINK_SPEC \
@@ -139,6 +141,8 @@
|march=armv8-m.base|mcpu=cortex-m23 \
|march=armv8-m.main \
|march=armv8-m.main+dsp|mcpu=cortex-m33 \
+ |march=armv8-r \
+ |march=armv8-r+crc \
:%{!r:--be8}}}"
#endif
@@ -15147,7 +15147,8 @@ of the @option{-mcpu=} option. Permissible names are: @samp{armv2},
@samp{armv7}, @samp{armv7-a}, @samp{armv7-m}, @samp{armv7-r}, @samp{armv7e-m},
@samp{armv7ve}, @samp{armv8-a}, @samp{armv8-a+crc}, @samp{armv8.1-a},
@samp{armv8.1-a+crc}, @samp{armv8-m.base}, @samp{armv8-m.main},
-@samp{armv8-m.main+dsp}, @samp{iwmmxt}, @samp{iwmmxt2}.
+@samp{armv8-m.main+dsp}, @samp{armv8-r}, , @samp{armv8-r+crc},
+@samp{iwmmxt}, @samp{iwmmxt2}.
Architecture revisions older than @samp{armv4t} are deprecated.
@@ -15161,6 +15162,8 @@ compatibility.
extensions.
@option{-march=armv8-a+crc} enables code generation for the ARMv8-A
+architecture together with the optional CRC32 extensions. Similarly,
+@option{-march=armv8-r+crc} enables code generation for the ARMv8-R
architecture together with the optional CRC32 extensions.
@option{-march=armv8.1-a} enables compiler support for the ARMv8.1-A
@@ -3781,7 +3781,8 @@ foreach { armfunc armflag armdef } {
v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
v8_2a "-march=armv8.2a" __ARM_ARCH_8A__
v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" __ARM_ARCH_8M_BASE__
- v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
+ v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__
+ v8r "-march=armv8-r" __ARM_ARCH_8R__ } {
eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
proc check_effective_target_arm_arch_FUNC_ok { } {
if { [ string match "*-marm*" "FLAG" ] &&
@@ -109,7 +109,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#endif
#if defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH_8M_BASE__) \
- || defined(__ARM_ARCH_8M_MAIN__)
+ || defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8R__)
# define __ARM_ARCH__ 8
#endif