arm-arches.def (armv8-m.base): Define new architecture.
2016-07-07 Thomas Preud'homme <thomas.preudhomme@arm.com> gcc/ * config/arm/arm-arches.def (armv8-m.base): Define new architecture. (armv8-m.main): Likewise. (armv8-m.main+dsp): Likewise. * config/arm/arm-protos.h (FL_FOR_ARCH8M_BASE): Define. (FL_FOR_ARCH8M_MAIN): Likewise. * config/arm/arm-tables.opt: Regenerate. * config/arm/bpabi.h: Add armv8-m.base, armv8-m.main and armv8-m.main+dsp to BE8_LINK_SPEC. * config/arm/arm.h (TARGET_HAVE_LDACQ): Exclude ARMv8-M. (enum base_architecture): Add BASE_ARCH_8M_BASE and BASE_ARCH_8M_MAIN. * config/arm/arm.c (arm_arch_name): Increase size to work with ARMv8-M Baseline and Mainline. (arm_option_override_internal): Also disable arm_restrict_it when !arm_arch_notm. Update comment for -munaligned-access to also cover ARMv8-M Baseline. (arm_file_start): Increase buffer size for printing architecture name. * doc/invoke.texi: Document architectures armv8-m.base, armv8-m.main and armv8-m.main+dsp. (mno-unaligned-access): Clarify that this is disabled by default for ARMv8-M Baseline architectures as well. gcc/testsuite/ * lib/target-supports.exp: Generate add_options_for_arm_arch_FUNC and check_effective_target_arm_arch_FUNC_multilib for ARMv8-M Baseline and ARMv8-M Mainline architectures. libgcc/ * config/arm/lib1funcs.S (__ARM_ARCH__): Define to 8 for ARMv8-M. From-SVN: r238081
This commit is contained in:
parent
3d16d9ec3c
commit
05a437c1f3
12 changed files with 82 additions and 16 deletions
|
@ -1,3 +1,26 @@
|
|||
2016-07-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||
|
||||
* config/arm/arm-arches.def (armv8-m.base): Define new architecture.
|
||||
(armv8-m.main): Likewise.
|
||||
(armv8-m.main+dsp): Likewise.
|
||||
* config/arm/arm-protos.h (FL_FOR_ARCH8M_BASE): Define.
|
||||
(FL_FOR_ARCH8M_MAIN): Likewise.
|
||||
* config/arm/arm-tables.opt: Regenerate.
|
||||
* config/arm/bpabi.h: Add armv8-m.base, armv8-m.main and
|
||||
armv8-m.main+dsp to BE8_LINK_SPEC.
|
||||
* config/arm/arm.h (TARGET_HAVE_LDACQ): Exclude ARMv8-M.
|
||||
(enum base_architecture): Add BASE_ARCH_8M_BASE and BASE_ARCH_8M_MAIN.
|
||||
* config/arm/arm.c (arm_arch_name): Increase size to work with ARMv8-M
|
||||
Baseline and Mainline.
|
||||
(arm_option_override_internal): Also disable arm_restrict_it when
|
||||
!arm_arch_notm. Update comment for -munaligned-access to also cover
|
||||
ARMv8-M Baseline.
|
||||
(arm_file_start): Increase buffer size for printing architecture name.
|
||||
* doc/invoke.texi: Document architectures armv8-m.base, armv8-m.main
|
||||
and armv8-m.main+dsp.
|
||||
(mno-unaligned-access): Clarify that this is disabled by default for
|
||||
ARMv8-M Baseline architectures as well.
|
||||
|
||||
2016-07-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||
|
||||
* config/arm/elf.h: Use __ARM_ARCH_ISA_THUMB and __ARM_ARCH_ISA_ARM to
|
||||
|
|
|
@ -62,6 +62,12 @@ ARM_ARCH("armv8.1-a", cortexa53, 8A,
|
|||
ARM_ARCH("armv8.1-a+crc",cortexa53, 8A,
|
||||
ARM_FSET_MAKE (FL_CO_PROC | FL_CRC32 | FL_FOR_ARCH8A,
|
||||
FL2_FOR_ARCH8_1A))
|
||||
ARM_ARCH("armv8-m.base", cortexm0, 8M_BASE,
|
||||
ARM_FSET_MAKE_CPU1 ( FL_FOR_ARCH8M_BASE))
|
||||
ARM_ARCH("armv8-m.main", cortexm7, 8M_MAIN,
|
||||
ARM_FSET_MAKE_CPU1(FL_CO_PROC | FL_FOR_ARCH8M_MAIN))
|
||||
ARM_ARCH("armv8-m.main+dsp", cortexm7, 8M_MAIN,
|
||||
ARM_FSET_MAKE_CPU1(FL_CO_PROC | FL_ARCH7EM | FL_FOR_ARCH8M_MAIN))
|
||||
ARM_ARCH("iwmmxt", iwmmxt, 5TE, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT))
|
||||
ARM_ARCH("iwmmxt2", iwmmxt2, 5TE, ARM_FSET_MAKE_CPU1 (FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT | FL_IWMMXT2))
|
||||
|
||||
|
|
|
@ -421,6 +421,8 @@ extern bool arm_is_constant_pool_ref (rtx);
|
|||
#define FL_FOR_ARCH7EM (FL_FOR_ARCH7M | FL_ARCH7EM)
|
||||
#define FL_FOR_ARCH8A (FL_FOR_ARCH7VE | FL_ARCH8)
|
||||
#define FL2_FOR_ARCH8_1A FL2_ARCH8_1
|
||||
#define FL_FOR_ARCH8M_BASE (FL_FOR_ARCH6M | FL_ARCH8 | FL_THUMB_DIV)
|
||||
#define FL_FOR_ARCH8M_MAIN (FL_FOR_ARCH7M | FL_ARCH8)
|
||||
|
||||
/* There are too many feature bits to fit in a single word so the set of cpu and
|
||||
fpu capabilities is a structure. A feature set is created and manipulated
|
||||
|
|
|
@ -437,10 +437,19 @@ EnumValue
|
|||
Enum(arm_arch) String(armv8.1-a+crc) Value(28)
|
||||
|
||||
EnumValue
|
||||
Enum(arm_arch) String(iwmmxt) Value(29)
|
||||
Enum(arm_arch) String(armv8-m.base) Value(29)
|
||||
|
||||
EnumValue
|
||||
Enum(arm_arch) String(iwmmxt2) Value(30)
|
||||
Enum(arm_arch) String(armv8-m.main) Value(30)
|
||||
|
||||
EnumValue
|
||||
Enum(arm_arch) String(armv8-m.main+dsp) Value(31)
|
||||
|
||||
EnumValue
|
||||
Enum(arm_arch) String(iwmmxt) Value(32)
|
||||
|
||||
EnumValue
|
||||
Enum(arm_arch) String(iwmmxt2) Value(33)
|
||||
|
||||
Enum
|
||||
Name(arm_fpu) Type(int)
|
||||
|
|
|
@ -2307,9 +2307,11 @@ static const struct processors *arm_selected_arch;
|
|||
static const struct processors *arm_selected_cpu;
|
||||
static const struct processors *arm_selected_tune;
|
||||
|
||||
/* The name of the preprocessor macro to define for this architecture. */
|
||||
/* The name of the preprocessor macro to define for this architecture. PROFILE
|
||||
is replaced by the architecture name (eg. 8A) in arm_option_override () and
|
||||
is thus chosen to be big enough to hold the longest architecture name. */
|
||||
|
||||
char arm_arch_name[] = "__ARM_ARCH_0UNK__";
|
||||
char arm_arch_name[] = "__ARM_ARCH_PROFILE__";
|
||||
|
||||
/* Available values for -mfpu=. */
|
||||
|
||||
|
@ -2950,7 +2952,8 @@ arm_option_override_internal (struct gcc_options *opts,
|
|||
if (! opts_set->x_arm_restrict_it)
|
||||
opts->x_arm_restrict_it = arm_arch8;
|
||||
|
||||
if (!TARGET_THUMB2_P (opts->x_target_flags))
|
||||
/* ARM execution state and M profile don't have [restrict] IT. */
|
||||
if (!TARGET_THUMB2_P (opts->x_target_flags) || !arm_arch_notm)
|
||||
opts->x_arm_restrict_it = 0;
|
||||
|
||||
/* Enable -munaligned-access by default for
|
||||
|
@ -2961,7 +2964,8 @@ arm_option_override_internal (struct gcc_options *opts,
|
|||
|
||||
Disable -munaligned-access by default for
|
||||
- all pre-ARMv6 architecture-based processors
|
||||
- ARMv6-M architecture-based processors. */
|
||||
- ARMv6-M architecture-based processors
|
||||
- ARMv8-M Baseline processors. */
|
||||
|
||||
if (! opts_set->x_unaligned_access)
|
||||
{
|
||||
|
@ -26005,7 +26009,7 @@ arm_file_start (void)
|
|||
const char* pos = strchr (arm_selected_arch->name, '+');
|
||||
if (pos)
|
||||
{
|
||||
char buf[15];
|
||||
char buf[32];
|
||||
gcc_assert (strlen (arm_selected_arch->name)
|
||||
<= sizeof (buf) / sizeof (*pos));
|
||||
strncpy (buf, arm_selected_arch->name,
|
||||
|
|
|
@ -261,7 +261,7 @@ extern void (*arm_lang_output_object_attributes_hook)(void);
|
|||
|| arm_arch7) && arm_arch_notm)
|
||||
|
||||
/* Nonzero if this chip supports load-acquire and store-release. */
|
||||
#define TARGET_HAVE_LDACQ (TARGET_ARM_ARCH >= 8)
|
||||
#define TARGET_HAVE_LDACQ (TARGET_ARM_ARCH >= 8 && arm_arch_notm)
|
||||
|
||||
/* Nonzero if integer division instructions supported. */
|
||||
#define TARGET_IDIV ((TARGET_ARM && arm_arch_arm_hwdiv) \
|
||||
|
@ -398,7 +398,9 @@ enum base_architecture
|
|||
BASE_ARCH_7R = 7,
|
||||
BASE_ARCH_7M = 7,
|
||||
BASE_ARCH_7EM = 7,
|
||||
BASE_ARCH_8A = 8
|
||||
BASE_ARCH_8A = 8,
|
||||
BASE_ARCH_8M_BASE = 8,
|
||||
BASE_ARCH_8M_MAIN = 8
|
||||
};
|
||||
|
||||
/* The major revision number of the ARM Architecture implemented by the target. */
|
||||
|
|
|
@ -93,6 +93,9 @@
|
|||
|march=armv8-a+crc \
|
||||
|march=armv8.1-a \
|
||||
|march=armv8.1-a+crc \
|
||||
|march=armv8-m.base \
|
||||
|march=armv8-m.main \
|
||||
|march=armv8-m.main+dsp \
|
||||
:%{!r:--be8}}}"
|
||||
#else
|
||||
#define BE8_LINK_SPEC \
|
||||
|
@ -127,6 +130,9 @@
|
|||
|march=armv8-a+crc \
|
||||
|march=armv8.1-a \
|
||||
|march=armv8.1-a+crc \
|
||||
|march=armv8-m.base \
|
||||
|march=armv8-m.main \
|
||||
|march=armv8-m.main+dsp \
|
||||
:%{!r:--be8}}}"
|
||||
#endif
|
||||
|
||||
|
|
|
@ -14148,7 +14148,8 @@ of the @option{-mcpu=} option. Permissible names are: @samp{armv2},
|
|||
@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk},
|
||||
@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{iwmmxt}, @samp{iwmmxt2}.
|
||||
@samp{armv8.1-a+crc}, @samp{armv8-m.base}, @samp{armv8-m.main},
|
||||
@samp{armv8-m.main+dsp}, @samp{iwmmxt}, @samp{iwmmxt2}.
|
||||
|
||||
Architecture revisions older than @samp{armv4t} are deprecated.
|
||||
|
||||
|
@ -14460,10 +14461,10 @@ generating these instructions. This option is enabled by default when
|
|||
@opindex mno-unaligned-access
|
||||
Enables (or disables) reading and writing of 16- and 32- bit values
|
||||
from addresses that are not 16- or 32- bit aligned. By default
|
||||
unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
|
||||
architectures, and enabled for all other architectures. If unaligned
|
||||
access is not enabled then words in packed data structures are
|
||||
accessed a byte at a time.
|
||||
unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
|
||||
ARMv8-M Baseline architectures, and enabled for all other
|
||||
architectures. If unaligned access is not enabled then words in packed
|
||||
data structures are accessed a byte at a time.
|
||||
|
||||
The ARM attribute @code{Tag_CPU_unaligned_access} is set in the
|
||||
generated object file to either true or false, depending upon the
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2016-07-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||
|
||||
* lib/target-supports.exp: Generate add_options_for_arm_arch_FUNC and
|
||||
check_effective_target_arm_arch_FUNC_multilib for ARMv8-M Baseline and
|
||||
ARMv8-M Mainline architectures.
|
||||
|
||||
2016-07-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||
|
||||
* lib/target-supports.exp (check_effective_target_arm_cortex_m): Use
|
||||
|
|
|
@ -3348,7 +3348,9 @@ foreach { armfunc armflag armdef } { v4 "-march=armv4 -marm" __ARM_ARCH_4__
|
|||
v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
|
||||
v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
|
||||
v8a "-march=armv8-a" __ARM_ARCH_8A__
|
||||
v8_1a "-march=armv8.1a" __ARM_ARCH_8A__ } {
|
||||
v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
|
||||
v8m_base "-march=armv8-m.base -mthumb" __ARM_ARCH_8M_BASE__
|
||||
v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
|
||||
eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
|
||||
proc check_effective_target_arm_arch_FUNC_ok { } {
|
||||
if { [ string match "*-marm*" "FLAG" ] &&
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2016-07-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||
|
||||
* config/arm/lib1funcs.S (__ARM_ARCH__): Define to 8 for ARMv8-M.
|
||||
|
||||
2016-07-07 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||
|
||||
* config/arm/lib1funcs.S (HAVE_ARM_CLZ): Define for ARMv6* or later
|
||||
|
|
|
@ -108,7 +108,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|||
# define __ARM_ARCH__ 7
|
||||
#endif
|
||||
|
||||
#if defined(__ARM_ARCH_8A__)
|
||||
#if defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH_8M_BASE__) \
|
||||
|| defined(__ARM_ARCH_8M_MAIN__)
|
||||
# define __ARM_ARCH__ 8
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue