aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@linaro.org>2016-03-11 17:08:51 +0100
committerLinaro Code Review <review@review.linaro.org>2016-04-11 12:04:13 +0000
commit20a2acfb0cecc500bb204243df95707386943e41 (patch)
treea18d47e7dab66eb376bfe9b73b069e6ce7f2e4b5
parent788b3741485cf6d40eb0b1b6583d521ba44f072b (diff)
gcc/
Backport from trunk r229412. 2015-10-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/aarch64/aarch64-protos.h (struct tune_params): Add autoprefetcher_model field. * config/aarch64/aarch64.c: Include params.h (generic_tunings): Specify autoprefetcher_model value. (cortexa53_tunings): Likewise. (cortexa57_tunings): Likewise. (cortexa72_tunings): Likewise. (thunderx_tunings): Likewise. (xgene1_tunings): Likewise. (aarch64_first_cycle_multipass_dfa_lookahead_guard): New function. (TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD): Define. (aarch64_override_options_internal): Set PARAM_SCHED_AUTOPREF_QUEUE_DEPTH param. gcc/ Backport from trunk r230261. 2015-11-12 Evandro Menezes <e.menezes@samsung.com> * config/aarch64/aarch64-protos.h (tune_params): Add new members "max_case_values" and "cache_line_size". * config/aarch64/aarch64.c (aarch64_case_values_threshold): New function. (aarch64_override_options_internal): Tune heuristics based on new members in "tune_params". (TARGET_CASE_VALUES_THRESHOLD): Define macro. gcc/ Backport from trunk r230431. 2015-11-16 James Greenhalgh <james.greenhalgh@arm.com> * config/arm/arm-cores.def (cortex-a35): New. * config/arm/arm.c (arm_cortex_a35_tune): New. * config/arm/arm-tables.opt: Regenerate. * config/arm/arm-tune.md: Regenerate. * config/arm/bpabi.h (BE8_LINK_SPEC): Add cortex-a35. * config/arm/t-aprofile: Likewise. * doc/invoke.texi (-mcpu): Likewise. gcc/ Backport from trunk r230458. 2015-11-17 James Greenhalgh <james.greenhalgh@arm.com> * config/aarch64/aarch64-cores.def (cortex-a35): New. * config/aarch64/aarch64.c (cortexa35_tunings): New. * config/aarch64/aarch64-tune.md: Regenerate. * doc/invoke.texi (-mcpu): Add Cortex-A35 gcc/ Backport from trunk r233659. 2016-02-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/arm/arm-cores.def (cortex-a32): New entry. * config/arm/arm-tables.opt: Regenerate. * config/arm/arm-tune.md: Regenerate. * config/arm/bpabi.h (BE8_LINK_SPEC): Add mcpu=cortex-a32. * config/arm/t-aprofile: Handle mcpu=cortex-a32. * doc/invoke.texi (ARM Options): Document cortex-a32 as value for -mcpu and -mtune. gcc/ Backport from trunk r234040. 2016-03-07 Andre Vieira <andre.simoesdiasvieira@arm.com> * config/arm/arm-cores.def (cortex-r8): New. * config/arm/arm-tables.opt (cortex-r8): Regenerate. * config/arm/arm-tune.md: Likewise. * gcc/doc/invoke.texi: Add cortex-r8 to list of cpu values. gcc/testsuite/ Backport from trunk r234041. 2016-03-07 Andre Vieira <andre.simoesdiasvieira@arm.com> * gcc.target/arm/pr45701-1.c: Change assembler scan to not trigger for cortex-r8, when scanning for register r8. * gcc.target/arm/pr45701-2.c: Likewise. gcc/testsuite/ Backport from trunk r234109. 2016-03-10 Andre Vieira <andre.simoesdiasvieira@arm.com> * gcc.target/arm/pr45701-1.c: Escape brackets. * gcc.target/arm/pr45701-2.c: Likewise. Change-Id: I4f1c5bfc0a6640c9cb2e357751c9c1268b224998
-rw-r--r--gcc/config/aarch64/aarch64-cores.def1
-rw-r--r--gcc/config/aarch64/aarch64-protos.h21
-rw-r--r--gcc/config/aarch64/aarch64-tune.md2
-rw-r--r--gcc/config/aarch64/aarch64.c108
-rw-r--r--gcc/config/arm/arm-cores.def3
-rw-r--r--gcc/config/arm/arm-tables.opt9
-rw-r--r--gcc/config/arm/arm-tune.md5
-rw-r--r--gcc/config/arm/arm.c23
-rw-r--r--gcc/config/arm/bpabi.h3
-rw-r--r--gcc/config/arm/t-aprofile2
-rw-r--r--gcc/doc/invoke.texi12
-rw-r--r--gcc/testsuite/gcc.target/arm/pr45701-1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/pr45701-2.c2
13 files changed, 183 insertions, 10 deletions
diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def
index 4af70ca613c..f8fab28d912 100644
--- a/gcc/config/aarch64/aarch64-cores.def
+++ b/gcc/config/aarch64/aarch64-cores.def
@@ -40,6 +40,7 @@
/* V8 Architecture Processors. */
+AARCH64_CORE("cortex-a35", cortexa35, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa35, "0x41", "0xd04")
AARCH64_CORE("cortex-a53", cortexa53, cortexa53, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa53, "0x41", "0xd03")
AARCH64_CORE("cortex-a57", cortexa57, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa57, "0x41", "0xd07")
AARCH64_CORE("cortex-a72", cortexa72, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa72, "0x41", "0xd08")
diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
index 338b5ae9b22..e85132f484a 100644
--- a/gcc/config/aarch64/aarch64-protos.h
+++ b/gcc/config/aarch64/aarch64-protos.h
@@ -195,6 +195,27 @@ struct tune_params
int vec_reassoc_width;
int min_div_recip_mul_sf;
int min_div_recip_mul_df;
+ /* Value for aarch64_case_values_threshold; or 0 for the default. */
+ unsigned int max_case_values;
+ /* Value for PARAM_L1_CACHE_LINE_SIZE; or 0 to use the default. */
+ unsigned int cache_line_size;
+
+/* An enum specifying how to take into account CPU autoprefetch capabilities
+ during instruction scheduling:
+ - AUTOPREFETCHER_OFF: Do not take autoprefetch capabilities into account.
+ - AUTOPREFETCHER_WEAK: Attempt to sort sequences of loads/store in order of
+ offsets but allow the pipeline hazard recognizer to alter that order to
+ maximize multi-issue opportunities.
+ - AUTOPREFETCHER_STRONG: Attempt to sort sequences of loads/store in order of
+ offsets and prefer this even if it restricts multi-issue opportunities. */
+
+ enum aarch64_autoprefetch_model
+ {
+ AUTOPREFETCHER_OFF,
+ AUTOPREFETCHER_WEAK,
+ AUTOPREFETCHER_STRONG
+ } autoprefetcher_model;
+
unsigned int extra_tuning_flags;
};
diff --git a/gcc/config/aarch64/aarch64-tune.md b/gcc/config/aarch64/aarch64-tune.md
index c65a12420ad..cbc6f4879ed 100644
--- a/gcc/config/aarch64/aarch64-tune.md
+++ b/gcc/config/aarch64/aarch64-tune.md
@@ -1,5 +1,5 @@
;; -*- buffer-read-only: t -*-
;; Generated automatically by gentune.sh from aarch64-cores.def
(define_attr "tune"
- "cortexa53,cortexa57,cortexa72,exynosm1,qdf24xx,thunderx,xgene1,cortexa57cortexa53,cortexa72cortexa53"
+ "cortexa35,cortexa53,cortexa57,cortexa72,exynosm1,qdf24xx,thunderx,xgene1,cortexa57cortexa53,cortexa72cortexa53"
(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 59c96507ecb..47f41ab2197 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -86,6 +86,7 @@
#include "gimple-expr.h"
#include "is-a.h"
#include "gimple.h"
+#include "params.h"
#include "gimplify.h"
#include "optabs.h"
#include "dwarf2.h"
@@ -397,6 +398,34 @@ static const struct tune_params generic_tunings =
1, /* vec_reassoc_width. */
2, /* min_div_recip_mul_sf. */
2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
+ (AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
+};
+
+static const struct tune_params cortexa35_tunings =
+{
+ &cortexa53_extra_costs,
+ &generic_addrcost_table,
+ &cortexa53_regmove_cost,
+ &generic_vector_cost,
+ &generic_branch_cost,
+ 4, /* memmov_cost */
+ 1, /* issue_rate */
+ (AARCH64_FUSE_MOV_MOVK | AARCH64_FUSE_ADRP_ADD
+ | AARCH64_FUSE_MOVK_MOVK | AARCH64_FUSE_ADRP_LDR), /* fusible_ops */
+ 8, /* function_align. */
+ 8, /* jump_align. */
+ 4, /* loop_align. */
+ 2, /* int_reassoc_width. */
+ 4, /* fp_reassoc_width. */
+ 1, /* vec_reassoc_width. */
+ 2, /* min_div_recip_mul_sf. */
+ 2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */
(AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
};
@@ -419,6 +448,9 @@ static const struct tune_params cortexa53_tunings =
1, /* vec_reassoc_width. */
2, /* min_div_recip_mul_sf. */
2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */
(AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
};
@@ -441,6 +473,9 @@ static const struct tune_params cortexa57_tunings =
1, /* vec_reassoc_width. */
2, /* min_div_recip_mul_sf. */
2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_WEAK, /* autoprefetcher_model. */
(AARCH64_EXTRA_TUNE_RENAME_FMA_REGS) /* tune_flags. */
};
@@ -463,6 +498,9 @@ static const struct tune_params cortexa72_tunings =
1, /* vec_reassoc_width. */
2, /* min_div_recip_mul_sf. */
2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
(AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
};
@@ -484,6 +522,9 @@ static const struct tune_params thunderx_tunings =
1, /* vec_reassoc_width. */
2, /* min_div_recip_mul_sf. */
2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
(AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
};
@@ -505,6 +546,9 @@ static const struct tune_params xgene1_tunings =
1, /* vec_reassoc_width. */
2, /* min_div_recip_mul_sf. */
2, /* min_div_recip_mul_df. */
+ 0, /* max_case_values. */
+ 0, /* cache_line_size. */
+ tune_params::AUTOPREFETCHER_OFF, /* autoprefetcher_model. */
(AARCH64_EXTRA_TUNE_NONE) /* tune_flags. */
};
@@ -3289,6 +3333,20 @@ aarch64_cannot_force_const_mem (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
return aarch64_tls_referenced_p (x);
}
+/* Implement TARGET_CASE_VALUES_THRESHOLD. */
+
+static unsigned int
+aarch64_case_values_threshold (void)
+{
+ /* Use the specified limit for the number of cases before using jump
+ tables at higher optimization levels. */
+ if (optimize > 2
+ && selected_cpu->tune->max_case_values != 0)
+ return selected_cpu->tune->max_case_values;
+ else
+ return default_case_values_threshold ();
+}
+
/* Return true if register REGNO is a valid index register.
STRICT_P is true if REG_OK_STRICT is in effect. */
@@ -7125,6 +7183,19 @@ aarch64_sched_first_cycle_multipass_dfa_lookahead (void)
return issue_rate > 1 && !sched_fusion ? issue_rate : 0;
}
+
+/* Implement TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD as
+ autopref_multipass_dfa_lookahead_guard from haifa-sched.c. It only
+ has an effect if PARAM_SCHED_AUTOPREF_QUEUE_DEPTH > 0. */
+
+static int
+aarch64_first_cycle_multipass_dfa_lookahead_guard (rtx_insn *insn,
+ int ready_index)
+{
+ return autopref_multipass_dfa_lookahead_guard (insn, ready_index);
+}
+
+
/* Vectorizer cost model target hooks. */
/* Implement targetm.vectorize.builtin_vectorization_cost. */
@@ -7718,6 +7789,36 @@ aarch64_override_options_internal (struct gcc_options *opts)
initialize_aarch64_code_model (opts);
initialize_aarch64_tls_size (opts);
+ int queue_depth = 0;
+ switch (aarch64_tune_params.autoprefetcher_model)
+ {
+ case tune_params::AUTOPREFETCHER_OFF:
+ queue_depth = -1;
+ break;
+ case tune_params::AUTOPREFETCHER_WEAK:
+ queue_depth = 0;
+ break;
+ case tune_params::AUTOPREFETCHER_STRONG:
+ queue_depth = max_insn_queue_index + 1;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+
+ /* We don't mind passing in global_options_set here as we don't use
+ the *options_set structs anyway. */
+ maybe_set_param_value (PARAM_SCHED_AUTOPREF_QUEUE_DEPTH,
+ queue_depth,
+ opts->x_param_values,
+ global_options_set.x_param_values);
+
+ /* Set the L1 cache line size. */
+ if (selected_cpu->tune->cache_line_size != 0)
+ maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE,
+ selected_cpu->tune->cache_line_size,
+ opts->x_param_values,
+ global_options_set.x_param_values);
+
aarch64_override_options_after_change_1 (opts);
}
@@ -13502,6 +13603,9 @@ aarch64_unspec_may_trap_p (const_rtx x, unsigned flags)
#undef TARGET_CANNOT_FORCE_CONST_MEM
#define TARGET_CANNOT_FORCE_CONST_MEM aarch64_cannot_force_const_mem
+#undef TARGET_CASE_VALUES_THRESHOLD
+#define TARGET_CASE_VALUES_THRESHOLD aarch64_case_values_threshold
+
#undef TARGET_CONDITIONAL_REGISTER_USAGE
#define TARGET_CONDITIONAL_REGISTER_USAGE aarch64_conditional_register_usage
@@ -13658,6 +13762,10 @@ aarch64_unspec_may_trap_p (const_rtx x, unsigned flags)
#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD \
aarch64_sched_first_cycle_multipass_dfa_lookahead
+#undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD
+#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD \
+ aarch64_first_cycle_multipass_dfa_lookahead_guard
+
#undef TARGET_TRAMPOLINE_INIT
#define TARGET_TRAMPOLINE_INIT aarch64_trampoline_init
diff --git a/gcc/config/arm/arm-cores.def b/gcc/config/arm/arm-cores.def
index 86ed0cb1dbe..90a9b3842e0 100644
--- a/gcc/config/arm/arm-cores.def
+++ b/gcc/config/arm/arm-cores.def
@@ -155,6 +155,7 @@ ARM_CORE("cortex-r4", cortexr4, cortexr4, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED |
ARM_CORE("cortex-r4f", cortexr4f, cortexr4f, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7R), cortex)
ARM_CORE("cortex-r5", cortexr5, cortexr5, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), cortex)
ARM_CORE("cortex-r7", cortexr7, cortexr7, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), cortex)
+ARM_CORE("cortex-r8", cortexr8, cortexr7, 7R, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_ARM_DIV | FL_FOR_ARCH7R), cortex)
ARM_CORE("cortex-m7", cortexm7, cortexm7, 7EM, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_NO_VOLATILE_CE | FL_FOR_ARCH7EM), cortex_m7)
ARM_CORE("cortex-m4", cortexm4, cortexm4, 7EM, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7EM), v7m)
ARM_CORE("cortex-m3", cortexm3, cortexm3, 7M, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_FOR_ARCH7M), v7m)
@@ -165,6 +166,8 @@ ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7, 7A, ARM_FSET_MAKE_
ARM_CORE("cortex-a17.cortex-a7", cortexa17cortexa7, cortexa7, 7A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV | FL_FOR_ARCH7A), cortex_a12)
/* V8 Architecture Processors */
+ARM_CORE("cortex-a32", cortexa32, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)
+ARM_CORE("cortex-a35", cortexa35, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a35)
ARM_CORE("cortex-a53", cortexa53, cortexa53, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a53)
ARM_CORE("cortex-a57", cortexa57, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
ARM_CORE("cortex-a72", cortexa72, cortexa57, 8A, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_CRC32 | FL_FOR_ARCH8A), cortex_a57)
diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt
index 51fa3dff4ff..06e808a40ac 100644
--- a/gcc/config/arm/arm-tables.opt
+++ b/gcc/config/arm/arm-tables.opt
@@ -286,6 +286,9 @@ EnumValue
Enum(processor_type) String(cortex-r7) Value(cortexr7)
EnumValue
+Enum(processor_type) String(cortex-r8) Value(cortexr8)
+
+EnumValue
Enum(processor_type) String(cortex-m7) Value(cortexm7)
EnumValue
@@ -304,6 +307,12 @@ EnumValue
Enum(processor_type) String(cortex-a17.cortex-a7) Value(cortexa17cortexa7)
EnumValue
+Enum(processor_type) String(cortex-a32) Value(cortexa32)
+
+EnumValue
+Enum(processor_type) String(cortex-a35) Value(cortexa35)
+
+EnumValue
Enum(processor_type) String(cortex-a53) Value(cortexa53)
EnumValue
diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md
index e56b5ad8cb5..d9f02a177e3 100644
--- a/gcc/config/arm/arm-tune.md
+++ b/gcc/config/arm/arm-tune.md
@@ -30,8 +30,9 @@
cortexa8,cortexa9,cortexa12,
cortexa15,cortexa17,cortexr4,
cortexr4f,cortexr5,cortexr7,
- cortexm7,cortexm4,cortexm3,
- marvell_pj4,cortexa15cortexa7,cortexa17cortexa7,
+ cortexr8,cortexm7,cortexm4,
+ cortexm3,marvell_pj4,cortexa15cortexa7,
+ cortexa17cortexa7,cortexa32,cortexa35,
cortexa53,cortexa57,cortexa72,
exynosm1,qdf24xx,xgene1,
cortexa57cortexa53,cortexa72cortexa53"
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index e3958b6e782..371528b0405 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -1976,6 +1976,29 @@ const struct tune_params arm_cortex_a15_tune =
tune_params::SCHED_AUTOPREF_FULL
};
+const struct tune_params arm_cortex_a35_tune =
+{
+ arm_9e_rtx_costs,
+ &cortexa53_extra_costs,
+ NULL, /* Sched adj cost. */
+ arm_default_branch_cost,
+ &arm_default_vec_cost,
+ 1, /* Constant limit. */
+ 5, /* Max cond insns. */
+ 8, /* Memset max inline. */
+ 1, /* Issue rate. */
+ ARM_PREFETCH_NOT_BENEFICIAL,
+ tune_params::PREF_CONST_POOL_FALSE,
+ tune_params::PREF_LDRD_FALSE,
+ tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* Thumb. */
+ tune_params::LOG_OP_NON_SHORT_CIRCUIT_TRUE, /* ARM. */
+ tune_params::DISPARAGE_FLAGS_NEITHER,
+ tune_params::PREF_NEON_64_FALSE,
+ tune_params::PREF_NEON_STRINGOPS_TRUE,
+ FUSE_OPS (tune_params::FUSE_MOVW_MOVT),
+ tune_params::SCHED_AUTOPREF_OFF
+};
+
const struct tune_params arm_cortex_a53_tune =
{
arm_9e_rtx_costs,
diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h
index 8af460549b0..d0fc25e51ad 100644
--- a/gcc/config/arm/bpabi.h
+++ b/gcc/config/arm/bpabi.h
@@ -68,6 +68,8 @@
|mcpu=cortex-a15.cortex-a7 \
|mcpu=cortex-a17.cortex-a7 \
|mcpu=marvell-pj4 \
+ |mcpu=cortex-a32 \
+ |mcpu=cortex-a35 \
|mcpu=cortex-a53 \
|mcpu=cortex-a57 \
|mcpu=cortex-a57.cortex-a53 \
@@ -94,6 +96,7 @@
|mcpu=cortex-a12|mcpu=cortex-a17 \
|mcpu=cortex-a15.cortex-a7 \
|mcpu=cortex-a17.cortex-a7 \
+ |mcpu=cortex-a35 \
|mcpu=cortex-a53 \
|mcpu=cortex-a57 \
|mcpu=cortex-a57.cortex-a53 \
diff --git a/gcc/config/arm/t-aprofile b/gcc/config/arm/t-aprofile
index 94fd0ca9259..1d0185d5c3c 100644
--- a/gcc/config/arm/t-aprofile
+++ b/gcc/config/arm/t-aprofile
@@ -86,6 +86,8 @@ MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a12
MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a17
MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a15.cortex-a7
MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a17.cortex-a7
+MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a32
+MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a35
MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a53
MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a57
MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a57.cortex-a53
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 8bef09d2ca4..09d917b9807 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -12367,8 +12367,9 @@ processors implementing the target architecture.
@opindex mtune
Specify the name of the target processor for which GCC should tune the
performance of the code. Permissible values for this option are:
-@samp{generic}, @samp{cortex-a53}, @samp{cortex-a57}, @samp{cortex-a72},
-@samp{exynos-m1}, @samp{qdf24xx}, @samp{thunderx}, @samp{xgene1}.
+@samp{generic}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a57},
+@samp{cortex-a72}, @samp{exynos-m1}, @samp{qdf24xx}, @samp{thunderx},
+@samp{xgene1}.
Additionally, this option can specify that GCC should tune the performance
of the code for a big.LITTLE system. Permissible values for this
@@ -13271,9 +13272,10 @@ Permissible names are: @samp{arm2}, @samp{arm250},
@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8},
@samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17},
-@samp{cortex-a53}, @samp{cortex-a57}, @samp{cortex-a72},
-@samp{cortex-r4},
-@samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-m7},
+@samp{cortex-a32}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a57},
+@samp{cortex-a72}, @samp{cortex-r4},
+@samp{cortex-r4f}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8},
+@samp{cortex-m7},
@samp{cortex-m4},
@samp{cortex-m3},
@samp{cortex-m1},
diff --git a/gcc/testsuite/gcc.target/arm/pr45701-1.c b/gcc/testsuite/gcc.target/arm/pr45701-1.c
index 454a087eedb..01db15abfd0 100644
--- a/gcc/testsuite/gcc.target/arm/pr45701-1.c
+++ b/gcc/testsuite/gcc.target/arm/pr45701-1.c
@@ -2,7 +2,7 @@
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
/* { dg-options "-mthumb -Os" } */
/* { dg-final { scan-assembler "push\t\{r3" } } */
-/* { dg-final { scan-assembler-not "r8" } } */
+/* { dg-final { scan-assembler-not "\[^\-\]r8" } } */
extern int hist_verify;
extern int a1;
diff --git a/gcc/testsuite/gcc.target/arm/pr45701-2.c b/gcc/testsuite/gcc.target/arm/pr45701-2.c
index afe0840d44b..ce66d7509d1 100644
--- a/gcc/testsuite/gcc.target/arm/pr45701-2.c
+++ b/gcc/testsuite/gcc.target/arm/pr45701-2.c
@@ -2,7 +2,7 @@
/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
/* { dg-options "-mthumb -Os" } */
/* { dg-final { scan-assembler "push\t\{r3" } } */
-/* { dg-final { scan-assembler-not "r8" } } */
+/* { dg-final { scan-assembler-not "\[^\-\]r8" } } */
extern int hist_verify;
extern int a1;