[ARM/FDPIC,v6,20/24,ARM,testsuite] FDPIC: Skip tests using architectures unsupported by FDPIC

Message ID 20190909154526.11630-21-christophe.lyon@st.com
State New
Headers show
Series
  • FDPIC ABI for ARM
Related show

Commit Message

Christophe Lyon Sept. 9, 2019, 3:45 p.m.
From: Christophe Lyon <christophe.lyon@linaro.org>


Since FDPIC currently supports arm and thumb-2 modes only, these tests
fail because they enforce an architecture version that doesn't match
these restrictions.

This patch introduces new values for the arm_arch effective-target
(v4t_thumb, v5t_thumb, v5te_thumb, v6_thumb, v6k_thumb, v6z_thumb) as
needed, and adds them to the relevant tests.  In addition, it adds
v4t_arm, v5t_arm, v5te_arm, v6_arm, v6k_arm and v6z_arm to avoid
skipping some tests when GCC is configured to generate Thumb code by
default.

It also adds the corresponding non-thumb effective-target to the tests
that were missing it.

The existing v4t, v5t, v5te, v6 v6k and v6z effective-targets now force
-mfloat-abi=softfp since these thumb-1 targets do not support
hard-float anyway.

Finally, the patch removes the special case to detect the presence of
-marm in the flags, since it makes atomic_loaddi tests unsupported:
since the flags in question also include -march, the combination is
supported, while -marm alone is not if GCC is configured to target an
M-profile CPU.

2019-XX-XX  Christophe Lyon  <christophe.lyon@st.com>

	gcc/testsuite/
	* lib/target-supports.exp
	(check_effective_target_arm_arch_FUNC_ok): Add v4t_arm, v4t_thumb,
	v5t_arm, v5t_thumb, v5te_arm, v5te_thumb, v6_arm, v6_thumb,
	v6k_arm, v6k_thumb, v6z_arm, v6z_thumb.
	Add -mfloat-abi=softfp to v4t, v5t, v5te, v6, v6k, v6z.
	Remove early exit for -marm.
	* gcc.target/arm/armv6-unaligned-load-ice.c: Add arm_arch
	effective-target.
	* gcc.target/arm/attr-unaligned-load-ice.c: Likewise.
	* gcc.target/arm/ftest-armv4-arm.c: Likewise.
	* gcc.target/arm/ftest-armv4t-arm.c: Likewise.
	* gcc.target/arm/ftest-armv4t-thumb.c: Likewise.
	* gcc.target/arm/ftest-armv5t-arm.c: Likewise.
	* gcc.target/arm/ftest-armv5t-thumb.c: Likewise.
	* gcc.target/arm/ftest-armv5te-arm.c: Likewise.
	* gcc.target/arm/ftest-armv5te-thumb.c: Likewise.
	* gcc.target/arm/ftest-armv6-arm.c: Likewise.
	* gcc.target/arm/ftest-armv6-thumb.c: Likewise.
	* gcc.target/arm/ftest-armv6k-arm.c: Likewise.
	* gcc.target/arm/ftest-armv6k-thumb.c: Likewise.
	* gcc.target/arm/ftest-armv6m-thumb.c: Likewise.
	* gcc.target/arm/ftest-armv6t2-arm.c: Likewise.
	* gcc.target/arm/ftest-armv6t2-thumb.c: Likewise.
	* gcc.target/arm/ftest-armv6z-arm.c: Likewise.
	* gcc.target/arm/ftest-armv6z-thumb.c: Likewise.
	* gcc.target/arm/g2.c: Likewise.
	* gcc.target/arm/macro_defs1.c: Likewise.
	* gcc.target/arm/pr59858.c: Likewise.
	* gcc.target/arm/pr65647-2.c: Likewise.
	* gcc.target/arm/pr79058.c: Likewise.
	* gcc.target/arm/pr83712.c: Likewise.
	* gcc.target/arm/pragma_arch_switch_2.c: Likewise.
	* gcc.target/arm/scd42-1.c: Likewise.
	* gcc.target/arm/scd42-2.c: Likewise.
	* gcc.target/arm/scd42-3.c: Likewise.
	* gcc.c-torture/compile/pr82096.c: Fix arm_arch effective-target.
	* gcc.target/arm/attr_arm-err.c: Likewise.
	* gcc.target/arm/di-longlong64-sync-withldrexd.c: Likewise.

Change-Id: I0845b262b241026561cc52a19ff8bb1659675e49

-- 
2.6.3

Comments

Christophe Lyon Sept. 16, 2019, 12:31 p.m. | #1
Hi Kyrill,

I didn't commit this patch yet: are you OK with it?

Thanks,

Christophe

On Mon, 9 Sep 2019 at 17:52, Christophe Lyon <christophe.lyon@st.com> wrote:

> From: Christophe Lyon <christophe.lyon@linaro.org>

>

> Since FDPIC currently supports arm and thumb-2 modes only, these tests

> fail because they enforce an architecture version that doesn't match

> these restrictions.

>

> This patch introduces new values for the arm_arch effective-target

> (v4t_thumb, v5t_thumb, v5te_thumb, v6_thumb, v6k_thumb, v6z_thumb) as

> needed, and adds them to the relevant tests.  In addition, it adds

> v4t_arm, v5t_arm, v5te_arm, v6_arm, v6k_arm and v6z_arm to avoid

> skipping some tests when GCC is configured to generate Thumb code by

> default.

>

> It also adds the corresponding non-thumb effective-target to the tests

> that were missing it.

>

> The existing v4t, v5t, v5te, v6 v6k and v6z effective-targets now force

> -mfloat-abi=softfp since these thumb-1 targets do not support

> hard-float anyway.

>

> Finally, the patch removes the special case to detect the presence of

> -marm in the flags, since it makes atomic_loaddi tests unsupported:

> since the flags in question also include -march, the combination is

> supported, while -marm alone is not if GCC is configured to target an

> M-profile CPU.

>

> 2019-XX-XX  Christophe Lyon  <christophe.lyon@st.com>

>

>         gcc/testsuite/

>         * lib/target-supports.exp

>         (check_effective_target_arm_arch_FUNC_ok): Add v4t_arm, v4t_thumb,

>         v5t_arm, v5t_thumb, v5te_arm, v5te_thumb, v6_arm, v6_thumb,

>         v6k_arm, v6k_thumb, v6z_arm, v6z_thumb.

>         Add -mfloat-abi=softfp to v4t, v5t, v5te, v6, v6k, v6z.

>         Remove early exit for -marm.

>         * gcc.target/arm/armv6-unaligned-load-ice.c: Add arm_arch

>         effective-target.

>         * gcc.target/arm/attr-unaligned-load-ice.c: Likewise.

>         * gcc.target/arm/ftest-armv4-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv4t-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv4t-thumb.c: Likewise.

>         * gcc.target/arm/ftest-armv5t-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv5t-thumb.c: Likewise.

>         * gcc.target/arm/ftest-armv5te-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv5te-thumb.c: Likewise.

>         * gcc.target/arm/ftest-armv6-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv6-thumb.c: Likewise.

>         * gcc.target/arm/ftest-armv6k-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv6k-thumb.c: Likewise.

>         * gcc.target/arm/ftest-armv6m-thumb.c: Likewise.

>         * gcc.target/arm/ftest-armv6t2-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv6t2-thumb.c: Likewise.

>         * gcc.target/arm/ftest-armv6z-arm.c: Likewise.

>         * gcc.target/arm/ftest-armv6z-thumb.c: Likewise.

>         * gcc.target/arm/g2.c: Likewise.

>         * gcc.target/arm/macro_defs1.c: Likewise.

>         * gcc.target/arm/pr59858.c: Likewise.

>         * gcc.target/arm/pr65647-2.c: Likewise.

>         * gcc.target/arm/pr79058.c: Likewise.

>         * gcc.target/arm/pr83712.c: Likewise.

>         * gcc.target/arm/pragma_arch_switch_2.c: Likewise.

>         * gcc.target/arm/scd42-1.c: Likewise.

>         * gcc.target/arm/scd42-2.c: Likewise.

>         * gcc.target/arm/scd42-3.c: Likewise.

>         * gcc.c-torture/compile/pr82096.c: Fix arm_arch effective-target.

>         * gcc.target/arm/attr_arm-err.c: Likewise.

>         * gcc.target/arm/di-longlong64-sync-withldrexd.c: Likewise.

>

> Change-Id: I0845b262b241026561cc52a19ff8bb1659675e49

>

> diff --git a/gcc/testsuite/gcc.c-torture/compile/pr82096.c

> b/gcc/testsuite/gcc.c-torture/compile/pr82096.c

> index d144b70..4e695cd 100644

> --- a/gcc/testsuite/gcc.c-torture/compile/pr82096.c

> +++ b/gcc/testsuite/gcc.c-torture/compile/pr82096.c

> @@ -1,4 +1,4 @@

> -/* { dg-require-effective-target arm_arch_v5t_ok { target arm*-*-* } } */

> +/* { dg-require-effective-target arm_arch_v5t_thumb_ok { target arm*-*-*

> } } */

>  /* { dg-skip-if "Do not combine float-abi values" { arm*-*-* } {

> "-mfloat-abi=*" } { "-mfloat-abi=soft" } } */

>  /* { dg-additional-options "-march=armv5t -mthumb -mfloat-abi=soft" {

> target arm*-*-* } } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

> b/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

> index 88528f1..886a012 100644

> --- a/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

> +++ b/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6k" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6k_thumb_ok } */

>  /* { dg-options "-mthumb -Os -mfloat-abi=softfp" } */

>  /* { dg-add-options arm_arch_v6k } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

> b/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

> index e1ed1c1..2eeb522 100644

> --- a/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

> +++ b/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

> @@ -2,6 +2,7 @@

>     Verify that unaligned_access is correctly with attribute target.  */

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6" } } */

> +/* { dg-require-effective-target arm_arch_v6_ok } */

>  /* { dg-options "-Os -mfloat-abi=softfp -mtp=soft" } */

>  /* { dg-add-options arm_arch_v6 } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/attr_arm-err.c

> b/gcc/testsuite/gcc.target/arm/attr_arm-err.c

> index 630c06a..67d572a 100644

> --- a/gcc/testsuite/gcc.target/arm/attr_arm-err.c

> +++ b/gcc/testsuite/gcc.target/arm/attr_arm-err.c

> @@ -1,7 +1,7 @@

>  /* Check that attribute target arm is rejected for M profile.  */

>  /* { dg-do compile } */

> -/* { dg-require-effective-target arm_arm_ok } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6-m" } } */

> +/* { dg-require-effective-target arm_arch_v6m_ok } */

>  /* { dg-add-options arm_arch_v6m } */

>

>  int __attribute__((target("arm")))

> diff --git a/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

> b/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

> index 517c4a8..befb7ec 100644

> --- a/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

> +++ b/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

> @@ -1,7 +1,6 @@

>  /* { dg-do compile } */

> -/* { dg-require-effective-target arm_arm_ok } */

>  /* { dg-options "-marm -std=gnu99" } */

> -/* { dg-require-effective-target arm_arch_v6k_ok } */

> +/* { dg-require-effective-target arm_arch_v6k_arm_ok } */

>  /* { dg-add-options arm_arch_v6k } */

>  /* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC

> 4.4" "fetch_and_nand" { target *-*-* } 0 } */

>  /* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC

> 4.4" "nand_and_fetch" { target *-*-* } 0 } */

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

> index 4b48ef8..447a8ec 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv4" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v4_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v4 } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

> index 016506f..28fd2f7 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv4t" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v4t_arm_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v4t } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

> index 9ef944e..78878f7 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv4t" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v4t_thumb_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v4t } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

> index a9403e9..8191299 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv5t" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v5t_arm_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v5t } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

> index f3ad07e..b25d17d 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv5t" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v5t_thumb_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v5t } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

> index f98c01a..e0c0d5c 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv5te" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v5te } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

> index 5d71787..27a64a2 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv5te" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v5te_thumb_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v5te } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

> index 88a5089..5d447c3 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6_arm_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v6 } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

> index 90ef9d2..15a6d75 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6_thumb_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v6 } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

> index 8de021a..0656e8f 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6k" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6k_arm_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v6k } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

> index c2fc270..b3b6ecf 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6k" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6k_thumb_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v6k } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

> index ee075e2..27f71be 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6-m" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6m_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v6m } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

> index 83b4bc4..259d2b5 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6t2" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6t2_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v6t2 } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

> index 1a1cbc5..e624ec5 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6t2" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6t2_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v6t2 } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

> index e2df0d4..6e3a966 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6z" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-mthumb" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6z_arm_ok } */

>  /* { dg-options "-marm" } */

>  /* { dg-add-options arm_arch_v6z } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

> b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

> index e4b94ef..23a4fcd 100644

> --- a/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

> +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6z" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6z_thumb_ok } */

>  /* { dg-options "-mthumb" } */

>  /* { dg-add-options arm_arch_v6z } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/g2.c

> b/gcc/testsuite/gcc.target/arm/g2.c

> index e368017..ca5e3cc 100644

> --- a/gcc/testsuite/gcc.target/arm/g2.c

> +++ b/gcc/testsuite/gcc.target/arm/g2.c

> @@ -4,6 +4,7 @@

>  /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } {

> "-march=*" } { "-march=xscale" } } */

>  /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } { "-mcpu=*"

> } { "-mcpu=xscale" } } */

>  /* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" }

> { "" } } */

> +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>  /* { dg-require-effective-target arm32 } */

>

>  /* Brett Gaines' test case. */

> diff --git a/gcc/testsuite/gcc.target/arm/macro_defs1.c

> b/gcc/testsuite/gcc.target/arm/macro_defs1.c

> index 4cc9ae6..655ba93 100644

> --- a/gcc/testsuite/gcc.target/arm/macro_defs1.c

> +++ b/gcc/testsuite/gcc.target/arm/macro_defs1.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

> "-march=*" } { "-march=armv6-m" } } */

>  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm"

> } { "" } } */

> +/* { dg-require-effective-target arm_arch_v6m_ok } */

>  /* { dg-options "-march=armv6-m -mthumb" } */

>

>  #ifdef __ARM_NEON_FP

> diff --git a/gcc/testsuite/gcc.target/arm/pr59858.c

> b/gcc/testsuite/gcc.target/arm/pr59858.c

> index a944b9a..bcfd5d5 100644

> --- a/gcc/testsuite/gcc.target/arm/pr59858.c

> +++ b/gcc/testsuite/gcc.target/arm/pr59858.c

> @@ -1,6 +1,7 @@

>  /* { dg-do compile } */

>  /* { dg-options "-march=armv5te -fno-builtin -mfloat-abi=soft -mthumb

> -fno-stack-protector -Os -fno-tree-loop-optimize -fno-tree-dominator-opts

> -fPIC -w" } */

>  /* { dg-skip-if "Incompatible command line options: -mfloat-abi=soft

> -mfloat-abi=hard" { *-*-* } { "-mfloat-abi=hard" } { "" } } */

> +/* { dg-require-effective-target arm_arch_v5te_thumb_ok } */

>

>  typedef enum {

>   REG_ENOSYS = -1,

> diff --git a/gcc/testsuite/gcc.target/arm/pr65647-2.c

> b/gcc/testsuite/gcc.target/arm/pr65647-2.c

> index f2985f8..e3978e5 100644

> --- a/gcc/testsuite/gcc.target/arm/pr65647-2.c

> +++ b/gcc/testsuite/gcc.target/arm/pr65647-2.c

> @@ -1,4 +1,5 @@

>  /* { dg-do compile } */

> +/* { dg-require-effective-target arm_arch_v6_arm_ok } */

>  /* { dg-options "-O3 -marm -march=armv6 -std=c99" } */

>

>  typedef struct {

> diff --git a/gcc/testsuite/gcc.target/arm/pr79058.c

> b/gcc/testsuite/gcc.target/arm/pr79058.c

> index 54a1d8a..7d078ac 100644

> --- a/gcc/testsuite/gcc.target/arm/pr79058.c

> +++ b/gcc/testsuite/gcc.target/arm/pr79058.c

> @@ -1,5 +1,6 @@

>  /* { dg-do compile } */

>  /* { dg-require-effective-target arm_arm_ok } */

> +/* { dg-require-effective-target arm_arch_v4_ok } */

>  /* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } {

> "-mcpu=arm7tdmi" } } */

>  /* { dg-options "-Os -mbig-endian -marm -mcpu=arm7tdmi" } */

>

> diff --git a/gcc/testsuite/gcc.target/arm/pr83712.c

> b/gcc/testsuite/gcc.target/arm/pr83712.c

> index 8ed8cdf..4902ec9 100644

> --- a/gcc/testsuite/gcc.target/arm/pr83712.c

> +++ b/gcc/testsuite/gcc.target/arm/pr83712.c

> @@ -1,4 +1,5 @@

>  /* { dg-do compile } */

> +/* { dg-require-effective-target arm_arch_v5t_thumb_ok } */

>  /* { dg-options "-mfloat-abi=softfp -mthumb -march=armv5t -O2" }  */

>  #pragma GCC optimize ("-O2")

>

> diff --git a/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

> b/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

> index b6211f9..5080d2c 100644

> --- a/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

> +++ b/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

> @@ -2,6 +2,7 @@

>  /* { dg-skip-if "instruction not valid on thumb" { *-*-* } { "-mthumb" }

> { "" } } */

>  /* { dg-do assemble } */

>  /* { dg-require-effective-target arm_arm_ok } */

> +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>  /* { dg-additional-options "-Wall -O2 -march=armv5te -std=gnu99 -marm" }

> */

>

>  #pragma GCC target ("arch=armv6")

> diff --git a/gcc/testsuite/gcc.target/arm/scd42-1.c

> b/gcc/testsuite/gcc.target/arm/scd42-1.c

> index be60e64..2b8fc0b 100644

> --- a/gcc/testsuite/gcc.target/arm/scd42-1.c

> +++ b/gcc/testsuite/gcc.target/arm/scd42-1.c

> @@ -3,6 +3,7 @@

>  /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-march=*" }

> { "-march=xscale" } } */

>  /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-mcpu=*" } {

> "-mcpu=xscale" } } */

>  /* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*"

> } { "-mfloat-abi=softfp" } } */

> +/* { dg-require-effective-target arm_arch_v5te_ok } */

>  /* { dg-options "-mcpu=xscale -O -mfloat-abi=softfp" } */

>

>  unsigned load1(void) __attribute__ ((naked));

> diff --git a/gcc/testsuite/gcc.target/arm/scd42-2.c

> b/gcc/testsuite/gcc.target/arm/scd42-2.c

> index 6d9e5e1..3c9768d 100644

> --- a/gcc/testsuite/gcc.target/arm/scd42-2.c

> +++ b/gcc/testsuite/gcc.target/arm/scd42-2.c

> @@ -4,6 +4,7 @@

>  /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } { "-mcpu=*"

> } { "-mcpu=xscale" } } */

>  /* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" }

> { "" } } */

>  /* { dg-require-effective-target arm32 } */

> +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>  /* { dg-options "-mcpu=xscale -O -marm" } */

>

>  unsigned load2(void) __attribute__ ((naked));

> diff --git a/gcc/testsuite/gcc.target/arm/scd42-3.c

> b/gcc/testsuite/gcc.target/arm/scd42-3.c

> index e566cb2..0afd121 100644

> --- a/gcc/testsuite/gcc.target/arm/scd42-3.c

> +++ b/gcc/testsuite/gcc.target/arm/scd42-3.c

> @@ -3,6 +3,7 @@

>  /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-march=*" }

> { "-march=xscale" } } */

>  /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-mcpu=*" } {

> "-mcpu=xscale" } } */

>  /* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*"

> } { "-mfloat-abi=softfp" } } */

> +/* { dg-require-effective-target arm_arch_v5te_ok } */

>  /* { dg-options "-mcpu=xscale -O -mfloat-abi=softfp" } */

>

>  unsigned load4(void) __attribute__ ((naked));

> diff --git a/gcc/testsuite/lib/target-supports.exp

> b/gcc/testsuite/lib/target-supports.exp

> index 0b67e10..1a1eed8 100644

> --- a/gcc/testsuite/lib/target-supports.exp

> +++ b/gcc/testsuite/lib/target-supports.exp

> @@ -4181,13 +4181,25 @@ proc check_effective_target_arm_fp16_hw { } {

>  #       /* { dg-require-effective-target arm_arch_v5t_multilib } */

>  foreach { armfunc armflag armdefs } {

>         v4 "-march=armv4 -marm" __ARM_ARCH_4__

> -       v4t "-march=armv4t" __ARM_ARCH_4T__

> -       v5t "-march=armv5t" __ARM_ARCH_5T__

> -       v5te "-march=armv5te" __ARM_ARCH_5TE__

> -       v6 "-march=armv6" __ARM_ARCH_6__

> -       v6k "-march=armv6k" __ARM_ARCH_6K__

> +       v4t "-march=armv4t -mfloat-abi=softfp" __ARM_ARCH_4T__

> +       v4t_arm "-march=armv4t -marm" __ARM_ARCH_4T__

> +       v4t_thumb "-march=armv4t -mthumb -mfloat-abi=softfp"

> __ARM_ARCH_4T__

> +       v5t "-march=armv5t -mfloat-abi=softfp" __ARM_ARCH_5T__

> +       v5t_arm "-march=armv5t -marm" __ARM_ARCH_5T__

> +       v5t_thumb "-march=armv5t -mthumb -mfloat-abi=softfp"

> __ARM_ARCH_5T__

> +       v5te "-march=armv5te -mfloat-abi=softfp" __ARM_ARCH_5TE__

> +       v5te_arm "-march=armv5te -marm" __ARM_ARCH_5TE__

> +       v5te_thumb "-march=armv5te -mthumb -mfloat-abi=softfp"

> __ARM_ARCH_5TE__

> +       v6 "-march=armv6 -mfloat-abi=softfp" __ARM_ARCH_6__

> +       v6_arm "-march=armv6 -marm" __ARM_ARCH_6__

> +       v6_thumb "-march=armv6 -mthumb -mfloat-abi=softfp" __ARM_ARCH_6__

> +       v6k "-march=armv6k -mfloat-abi=softfp" __ARM_ARCH_6K__

> +       v6k_arm "-march=armv6k -marm" __ARM_ARCH_6K__

> +       v6k_thumb "-march=armv6k -mthumb -mfloat-abi=softfp"

> __ARM_ARCH_6K__

>         v6t2 "-march=armv6t2" __ARM_ARCH_6T2__

> -       v6z "-march=armv6z" __ARM_ARCH_6Z__

> +       v6z "-march=armv6z -mfloat-abi=softfp" __ARM_ARCH_6Z__

> +       v6z_arm "-march=armv6z -marm" __ARM_ARCH_6Z__

> +       v6z_thumb "-march=armv6z -mthumb -mfloat-abi=softfp"

> __ARM_ARCH_6Z__

>         v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__

>         v7a "-march=armv7-a" __ARM_ARCH_7A__

>         v7r "-march=armv7-r" __ARM_ARCH_7R__

> @@ -4204,10 +4216,6 @@ foreach { armfunc armflag armdefs } {

>         v8r "-march=armv8-r" __ARM_ARCH_8R__ } {

>      eval [string map [list FUNC $armfunc FLAG $armflag DEFS $armdefs ] {

>         proc check_effective_target_arm_arch_FUNC_ok { } {

> -           if { [ string match "*-marm*" "FLAG" ] &&

> -               ![check_effective_target_arm_arm_ok] } {

> -               return 0

> -           }

>             return [check_no_compiler_messages arm_arch_FUNC_ok assembly {

>                 #if !(DEFS)

>                 #error !(DEFS)

> --

> 2.6.3

>

>
Kyrill Tkachov Sept. 17, 2019, 10:17 a.m. | #2
Hi Christophe,

On 9/16/19 1:31 PM, Christophe Lyon wrote:
> Hi Kyrill,

>

> I didn't commit this patch yet: are you OK with it?

>

> Thanks,

>

> Christophe

>

> On Mon, 9 Sep 2019 at 17:52, Christophe Lyon <christophe.lyon@st.com 

> <mailto:christophe.lyon@st.com>> wrote:

>

>     From: Christophe Lyon <christophe.lyon@linaro.org

>     <mailto:christophe.lyon@linaro.org>>

>

>     Since FDPIC currently supports arm and thumb-2 modes only, these tests

>     fail because they enforce an architecture version that doesn't match

>     these restrictions.

>

>     This patch introduces new values for the arm_arch effective-target

>     (v4t_thumb, v5t_thumb, v5te_thumb, v6_thumb, v6k_thumb, v6z_thumb) as

>     needed, and adds them to the relevant tests.  In addition, it adds

>     v4t_arm, v5t_arm, v5te_arm, v6_arm, v6k_arm and v6z_arm to avoid

>     skipping some tests when GCC is configured to generate Thumb code by

>     default.

>

>     It also adds the corresponding non-thumb effective-target to the tests

>     that were missing it.

>

>     The existing v4t, v5t, v5te, v6 v6k and v6z effective-targets now

>     force

>     -mfloat-abi=softfp since these thumb-1 targets do not support

>     hard-float anyway.

>

>     Finally, the patch removes the special case to detect the presence of

>     -marm in the flags, since it makes atomic_loaddi tests unsupported:

>     since the flags in question also include -march, the combination is

>     supported, while -marm alone is not if GCC is configured to target an

>     M-profile CPU.

>

>     2019-XX-XX  Christophe Lyon  <christophe.lyon@st.com

>     <mailto:christophe.lyon@st.com>>

>

>             gcc/testsuite/

>             * lib/target-supports.exp

>             (check_effective_target_arm_arch_FUNC_ok): Add v4t_arm,

>     v4t_thumb,

>             v5t_arm, v5t_thumb, v5te_arm, v5te_thumb, v6_arm, v6_thumb,

>             v6k_arm, v6k_thumb, v6z_arm, v6z_thumb.

>             Add -mfloat-abi=softfp to v4t, v5t, v5te, v6, v6k, v6z.

>             Remove early exit for -marm.

>             * gcc.target/arm/armv6-unaligned-load-ice.c: Add arm_arch

>             effective-target.

>             * gcc.target/arm/attr-unaligned-load-ice.c: Likewise.

>             * gcc.target/arm/ftest-armv4-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv4t-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv4t-thumb.c: Likewise.

>             * gcc.target/arm/ftest-armv5t-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv5t-thumb.c: Likewise.

>             * gcc.target/arm/ftest-armv5te-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv5te-thumb.c: Likewise.

>             * gcc.target/arm/ftest-armv6-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv6-thumb.c: Likewise.

>             * gcc.target/arm/ftest-armv6k-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv6k-thumb.c: Likewise.

>             * gcc.target/arm/ftest-armv6m-thumb.c: Likewise.

>             * gcc.target/arm/ftest-armv6t2-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv6t2-thumb.c: Likewise.

>             * gcc.target/arm/ftest-armv6z-arm.c: Likewise.

>             * gcc.target/arm/ftest-armv6z-thumb.c: Likewise.

>             * gcc.target/arm/g2.c: Likewise.

>             * gcc.target/arm/macro_defs1.c: Likewise.

>             * gcc.target/arm/pr59858.c: Likewise.

>             * gcc.target/arm/pr65647-2.c: Likewise.

>             * gcc.target/arm/pr79058.c: Likewise.

>             * gcc.target/arm/pr83712.c: Likewise.

>             * gcc.target/arm/pragma_arch_switch_2.c: Likewise.

>             * gcc.target/arm/scd42-1.c: Likewise.

>             * gcc.target/arm/scd42-2.c: Likewise.

>             * gcc.target/arm/scd42-3.c: Likewise.

>             * gcc.c-torture/compile/pr82096.c: Fix arm_arch

>     effective-target.

>             * gcc.target/arm/attr_arm-err.c: Likewise.

>             * gcc.target/arm/di-longlong64-sync-withldrexd.c: Likewise.

>


Thanks. This is ok for trunk.

Sorry for the delay, I was away for Cauldron all of last week.

Thank you for your patience with the whole patch series!

Glad to have it in.

Can you please prepare an entry for the GCC 10 changes.html page when 
you get a chance?

I think the web pages will be moving to git soon...

Kyrill


>     Change-Id: I0845b262b241026561cc52a19ff8bb1659675e49

>

>     diff --git a/gcc/testsuite/gcc.c-torture/compile/pr82096.c

>     b/gcc/testsuite/gcc.c-torture/compile/pr82096.c

>     index d144b70..4e695cd 100644

>     --- a/gcc/testsuite/gcc.c-torture/compile/pr82096.c

>     +++ b/gcc/testsuite/gcc.c-torture/compile/pr82096.c

>     @@ -1,4 +1,4 @@

>     -/* { dg-require-effective-target arm_arch_v5t_ok { target

>     arm*-*-* } } */

>     +/* { dg-require-effective-target arm_arch_v5t_thumb_ok { target

>     arm*-*-* } } */

>      /* { dg-skip-if "Do not combine float-abi values" { arm*-*-* } {

>     "-mfloat-abi=*" } { "-mfloat-abi=soft" } } */

>      /* { dg-additional-options "-march=armv5t -mthumb

>     -mfloat-abi=soft" { target arm*-*-* } } */

>

>     diff --git

>     a/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

>     b/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

>     index 88528f1..886a012 100644

>     --- a/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

>     +++ b/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6k" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6k_thumb_ok } */

>      /* { dg-options "-mthumb -Os -mfloat-abi=softfp" } */

>      /* { dg-add-options arm_arch_v6k } */

>

>     diff --git

>     a/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

>     b/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

>     index e1ed1c1..2eeb522 100644

>     --- a/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

>     +++ b/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c

>     @@ -2,6 +2,7 @@

>         Verify that unaligned_access is correctly with attribute

>     target.  */

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6" } } */

>     +/* { dg-require-effective-target arm_arch_v6_ok } */

>      /* { dg-options "-Os -mfloat-abi=softfp -mtp=soft" } */

>      /* { dg-add-options arm_arch_v6 } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/attr_arm-err.c

>     b/gcc/testsuite/gcc.target/arm/attr_arm-err.c

>     index 630c06a..67d572a 100644

>     --- a/gcc/testsuite/gcc.target/arm/attr_arm-err.c

>     +++ b/gcc/testsuite/gcc.target/arm/attr_arm-err.c

>     @@ -1,7 +1,7 @@

>      /* Check that attribute target arm is rejected for M profile.  */

>      /* { dg-do compile } */

>     -/* { dg-require-effective-target arm_arm_ok } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6-m" } } */

>     +/* { dg-require-effective-target arm_arch_v6m_ok } */

>      /* { dg-add-options arm_arch_v6m } */

>

>      int __attribute__((target("arm")))

>     diff --git

>     a/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

>     b/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

>     index 517c4a8..befb7ec 100644

>     --- a/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

>     +++ b/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c

>     @@ -1,7 +1,6 @@

>      /* { dg-do compile } */

>     -/* { dg-require-effective-target arm_arm_ok } */

>      /* { dg-options "-marm -std=gnu99" } */

>     -/* { dg-require-effective-target arm_arch_v6k_ok } */

>     +/* { dg-require-effective-target arm_arch_v6k_arm_ok } */

>      /* { dg-add-options arm_arch_v6k } */

>      /* { dg-message "note: '__sync_fetch_and_nand' changed semantics

>     in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */

>      /* { dg-message "note: '__sync_nand_and_fetch' changed semantics

>     in GCC 4.4" "nand_and_fetch" { target *-*-* } 0 } */

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

>     index 4b48ef8..447a8ec 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv4" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v4_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v4 } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

>     index 016506f..28fd2f7 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv4t" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v4t_arm_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v4t } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

>     index 9ef944e..78878f7 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv4t" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v4t_thumb_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v4t } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

>     index a9403e9..8191299 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv5t" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v5t_arm_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v5t } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

>     index f3ad07e..b25d17d 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv5t" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v5t_thumb_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v5t } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

>     index f98c01a..e0c0d5c 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv5te" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v5te } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

>     index 5d71787..27a64a2 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv5te" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v5te_thumb_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v5te } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

>     index 88a5089..5d447c3 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6_arm_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v6 } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

>     index 90ef9d2..15a6d75 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6_thumb_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v6 } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

>     index 8de021a..0656e8f 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6k" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6k_arm_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v6k } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

>     index c2fc270..b3b6ecf 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6k" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6k_thumb_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v6k } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

>     index ee075e2..27f71be 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6-m" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6m_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v6m } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

>     index 83b4bc4..259d2b5 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6t2" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6t2_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v6t2 } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

>     index 1a1cbc5..e624ec5 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6t2" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6t2_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v6t2 } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

>     index e2df0d4..6e3a966 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6z" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6z_arm_ok } */

>      /* { dg-options "-marm" } */

>      /* { dg-add-options arm_arch_v6z } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

>     b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

>     index e4b94ef..23a4fcd 100644

>     --- a/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

>     +++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6z" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6z_thumb_ok } */

>      /* { dg-options "-mthumb" } */

>      /* { dg-add-options arm_arch_v6z } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/g2.c

>     b/gcc/testsuite/gcc.target/arm/g2.c

>     index e368017..ca5e3cc 100644

>     --- a/gcc/testsuite/gcc.target/arm/g2.c

>     +++ b/gcc/testsuite/gcc.target/arm/g2.c

>     @@ -4,6 +4,7 @@

>      /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } {

>     "-march=*" } { "-march=xscale" } } */

>      /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } {

>     "-mcpu=*" } { "-mcpu=xscale" } } */

>      /* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } {

>     "-mthumb" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>      /* { dg-require-effective-target arm32 } */

>

>      /* Brett Gaines' test case. */

>     diff --git a/gcc/testsuite/gcc.target/arm/macro_defs1.c

>     b/gcc/testsuite/gcc.target/arm/macro_defs1.c

>     index 4cc9ae6..655ba93 100644

>     --- a/gcc/testsuite/gcc.target/arm/macro_defs1.c

>     +++ b/gcc/testsuite/gcc.target/arm/macro_defs1.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-march=*" } { "-march=armv6-m" } } */

>      /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } {

>     "-marm" } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v6m_ok } */

>      /* { dg-options "-march=armv6-m -mthumb" } */

>

>      #ifdef __ARM_NEON_FP

>     diff --git a/gcc/testsuite/gcc.target/arm/pr59858.c

>     b/gcc/testsuite/gcc.target/arm/pr59858.c

>     index a944b9a..bcfd5d5 100644

>     --- a/gcc/testsuite/gcc.target/arm/pr59858.c

>     +++ b/gcc/testsuite/gcc.target/arm/pr59858.c

>     @@ -1,6 +1,7 @@

>      /* { dg-do compile } */

>      /* { dg-options "-march=armv5te -fno-builtin -mfloat-abi=soft

>     -mthumb -fno-stack-protector -Os -fno-tree-loop-optimize

>     -fno-tree-dominator-opts -fPIC -w" } */

>      /* { dg-skip-if "Incompatible command line options:

>     -mfloat-abi=soft -mfloat-abi=hard" { *-*-* } { "-mfloat-abi=hard"

>     } { "" } } */

>     +/* { dg-require-effective-target arm_arch_v5te_thumb_ok } */

>

>      typedef enum {

>       REG_ENOSYS = -1,

>     diff --git a/gcc/testsuite/gcc.target/arm/pr65647-2.c

>     b/gcc/testsuite/gcc.target/arm/pr65647-2.c

>     index f2985f8..e3978e5 100644

>     --- a/gcc/testsuite/gcc.target/arm/pr65647-2.c

>     +++ b/gcc/testsuite/gcc.target/arm/pr65647-2.c

>     @@ -1,4 +1,5 @@

>      /* { dg-do compile } */

>     +/* { dg-require-effective-target arm_arch_v6_arm_ok } */

>      /* { dg-options "-O3 -marm -march=armv6 -std=c99" } */

>

>      typedef struct {

>     diff --git a/gcc/testsuite/gcc.target/arm/pr79058.c

>     b/gcc/testsuite/gcc.target/arm/pr79058.c

>     index 54a1d8a..7d078ac 100644

>     --- a/gcc/testsuite/gcc.target/arm/pr79058.c

>     +++ b/gcc/testsuite/gcc.target/arm/pr79058.c

>     @@ -1,5 +1,6 @@

>      /* { dg-do compile } */

>      /* { dg-require-effective-target arm_arm_ok } */

>     +/* { dg-require-effective-target arm_arch_v4_ok } */

>      /* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } {

>     "-mcpu=arm7tdmi" } } */

>      /* { dg-options "-Os -mbig-endian -marm -mcpu=arm7tdmi" } */

>

>     diff --git a/gcc/testsuite/gcc.target/arm/pr83712.c

>     b/gcc/testsuite/gcc.target/arm/pr83712.c

>     index 8ed8cdf..4902ec9 100644

>     --- a/gcc/testsuite/gcc.target/arm/pr83712.c

>     +++ b/gcc/testsuite/gcc.target/arm/pr83712.c

>     @@ -1,4 +1,5 @@

>      /* { dg-do compile } */

>     +/* { dg-require-effective-target arm_arch_v5t_thumb_ok } */

>      /* { dg-options "-mfloat-abi=softfp -mthumb -march=armv5t -O2" }  */

>      #pragma GCC optimize ("-O2")

>

>     diff --git a/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

>     b/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

>     index b6211f9..5080d2c 100644

>     --- a/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

>     +++ b/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c

>     @@ -2,6 +2,7 @@

>      /* { dg-skip-if "instruction not valid on thumb" { *-*-* } {

>     "-mthumb" } { "" } } */

>      /* { dg-do assemble } */

>      /* { dg-require-effective-target arm_arm_ok } */

>     +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>      /* { dg-additional-options "-Wall -O2 -march=armv5te -std=gnu99

>     -marm" } */

>

>      #pragma GCC target ("arch=armv6")

>     diff --git a/gcc/testsuite/gcc.target/arm/scd42-1.c

>     b/gcc/testsuite/gcc.target/arm/scd42-1.c

>     index be60e64..2b8fc0b 100644

>     --- a/gcc/testsuite/gcc.target/arm/scd42-1.c

>     +++ b/gcc/testsuite/gcc.target/arm/scd42-1.c

>     @@ -3,6 +3,7 @@

>      /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } {

>     "-march=*" } { "-march=xscale" } } */

>      /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } {

>     "-mcpu=*" } { "-mcpu=xscale" } } */

>      /* { dg-skip-if "do not override -mfloat-abi" { *-*-* } {

>     "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */

>     +/* { dg-require-effective-target arm_arch_v5te_ok } */

>      /* { dg-options "-mcpu=xscale -O -mfloat-abi=softfp" } */

>

>      unsigned load1(void) __attribute__ ((naked));

>     diff --git a/gcc/testsuite/gcc.target/arm/scd42-2.c

>     b/gcc/testsuite/gcc.target/arm/scd42-2.c

>     index 6d9e5e1..3c9768d 100644

>     --- a/gcc/testsuite/gcc.target/arm/scd42-2.c

>     +++ b/gcc/testsuite/gcc.target/arm/scd42-2.c

>     @@ -4,6 +4,7 @@

>      /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } {

>     "-mcpu=*" } { "-mcpu=xscale" } } */

>      /* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } {

>     "-mthumb" } { "" } } */

>      /* { dg-require-effective-target arm32 } */

>     +/* { dg-require-effective-target arm_arch_v5te_arm_ok } */

>      /* { dg-options "-mcpu=xscale -O -marm" } */

>

>      unsigned load2(void) __attribute__ ((naked));

>     diff --git a/gcc/testsuite/gcc.target/arm/scd42-3.c

>     b/gcc/testsuite/gcc.target/arm/scd42-3.c

>     index e566cb2..0afd121 100644

>     --- a/gcc/testsuite/gcc.target/arm/scd42-3.c

>     +++ b/gcc/testsuite/gcc.target/arm/scd42-3.c

>     @@ -3,6 +3,7 @@

>      /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } {

>     "-march=*" } { "-march=xscale" } } */

>      /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } {

>     "-mcpu=*" } { "-mcpu=xscale" } } */

>      /* { dg-skip-if "do not override -mfloat-abi" { *-*-* } {

>     "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */

>     +/* { dg-require-effective-target arm_arch_v5te_ok } */

>      /* { dg-options "-mcpu=xscale -O -mfloat-abi=softfp" } */

>

>      unsigned load4(void) __attribute__ ((naked));

>     diff --git a/gcc/testsuite/lib/target-supports.exp

>     b/gcc/testsuite/lib/target-supports.exp

>     index 0b67e10..1a1eed8 100644

>     --- a/gcc/testsuite/lib/target-supports.exp

>     +++ b/gcc/testsuite/lib/target-supports.exp

>     @@ -4181,13 +4181,25 @@ proc check_effective_target_arm_fp16_hw { } {

>      #       /* { dg-require-effective-target arm_arch_v5t_multilib } */

>      foreach { armfunc armflag armdefs } {

>             v4 "-march=armv4 -marm" __ARM_ARCH_4__

>     -       v4t "-march=armv4t" __ARM_ARCH_4T__

>     -       v5t "-march=armv5t" __ARM_ARCH_5T__

>     -       v5te "-march=armv5te" __ARM_ARCH_5TE__

>     -       v6 "-march=armv6" __ARM_ARCH_6__

>     -       v6k "-march=armv6k" __ARM_ARCH_6K__

>     +       v4t "-march=armv4t -mfloat-abi=softfp" __ARM_ARCH_4T__

>     +       v4t_arm "-march=armv4t -marm" __ARM_ARCH_4T__

>     +       v4t_thumb "-march=armv4t -mthumb -mfloat-abi=softfp"

>     __ARM_ARCH_4T__

>     +       v5t "-march=armv5t -mfloat-abi=softfp" __ARM_ARCH_5T__

>     +       v5t_arm "-march=armv5t -marm" __ARM_ARCH_5T__

>     +       v5t_thumb "-march=armv5t -mthumb -mfloat-abi=softfp"

>     __ARM_ARCH_5T__

>     +       v5te "-march=armv5te -mfloat-abi=softfp" __ARM_ARCH_5TE__

>     +       v5te_arm "-march=armv5te -marm" __ARM_ARCH_5TE__

>     +       v5te_thumb "-march=armv5te -mthumb -mfloat-abi=softfp"

>     __ARM_ARCH_5TE__

>     +       v6 "-march=armv6 -mfloat-abi=softfp" __ARM_ARCH_6__

>     +       v6_arm "-march=armv6 -marm" __ARM_ARCH_6__

>     +       v6_thumb "-march=armv6 -mthumb -mfloat-abi=softfp"

>     __ARM_ARCH_6__

>     +       v6k "-march=armv6k -mfloat-abi=softfp" __ARM_ARCH_6K__

>     +       v6k_arm "-march=armv6k -marm" __ARM_ARCH_6K__

>     +       v6k_thumb "-march=armv6k -mthumb -mfloat-abi=softfp"

>     __ARM_ARCH_6K__

>             v6t2 "-march=armv6t2" __ARM_ARCH_6T2__

>     -       v6z "-march=armv6z" __ARM_ARCH_6Z__

>     +       v6z "-march=armv6z -mfloat-abi=softfp" __ARM_ARCH_6Z__

>     +       v6z_arm "-march=armv6z -marm" __ARM_ARCH_6Z__

>     +       v6z_thumb "-march=armv6z -mthumb -mfloat-abi=softfp"

>     __ARM_ARCH_6Z__

>             v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__

>             v7a "-march=armv7-a" __ARM_ARCH_7A__

>             v7r "-march=armv7-r" __ARM_ARCH_7R__

>     @@ -4204,10 +4216,6 @@ foreach { armfunc armflag armdefs } {

>             v8r "-march=armv8-r" __ARM_ARCH_8R__ } {

>          eval [string map [list FUNC $armfunc FLAG $armflag DEFS

>     $armdefs ] {

>             proc check_effective_target_arm_arch_FUNC_ok { } {

>     -           if { [ string match "*-marm*" "FLAG" ] &&

>     -               ![check_effective_target_arm_arm_ok] } {

>     -               return 0

>     -           }

>                 return [check_no_compiler_messages arm_arch_FUNC_ok

>     assembly {

>                     #if !(DEFS)

>                     #error !(DEFS)

>     -- 

>     2.6.3

>

Patch

diff --git a/gcc/testsuite/gcc.c-torture/compile/pr82096.c b/gcc/testsuite/gcc.c-torture/compile/pr82096.c
index d144b70..4e695cd 100644
--- a/gcc/testsuite/gcc.c-torture/compile/pr82096.c
+++ b/gcc/testsuite/gcc.c-torture/compile/pr82096.c
@@ -1,4 +1,4 @@ 
-/* { dg-require-effective-target arm_arch_v5t_ok { target arm*-*-* } } */
+/* { dg-require-effective-target arm_arch_v5t_thumb_ok { target arm*-*-* } } */
 /* { dg-skip-if "Do not combine float-abi values" { arm*-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=soft" } } */
 /* { dg-additional-options "-march=armv5t -mthumb -mfloat-abi=soft" { target arm*-*-* } } */
 
diff --git a/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c b/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c
index 88528f1..886a012 100644
--- a/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c
+++ b/gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6k" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6k_thumb_ok } */
 /* { dg-options "-mthumb -Os -mfloat-abi=softfp" } */
 /* { dg-add-options arm_arch_v6k } */
 
diff --git a/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c b/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c
index e1ed1c1..2eeb522 100644
--- a/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c
+++ b/gcc/testsuite/gcc.target/arm/attr-unaligned-load-ice.c
@@ -2,6 +2,7 @@ 
    Verify that unaligned_access is correctly with attribute target.  */
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6" } } */
+/* { dg-require-effective-target arm_arch_v6_ok } */
 /* { dg-options "-Os -mfloat-abi=softfp -mtp=soft" } */
 /* { dg-add-options arm_arch_v6 } */
 
diff --git a/gcc/testsuite/gcc.target/arm/attr_arm-err.c b/gcc/testsuite/gcc.target/arm/attr_arm-err.c
index 630c06a..67d572a 100644
--- a/gcc/testsuite/gcc.target/arm/attr_arm-err.c
+++ b/gcc/testsuite/gcc.target/arm/attr_arm-err.c
@@ -1,7 +1,7 @@ 
 /* Check that attribute target arm is rejected for M profile.  */
 /* { dg-do compile } */
-/* { dg-require-effective-target arm_arm_ok } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6-m" } } */
+/* { dg-require-effective-target arm_arch_v6m_ok } */
 /* { dg-add-options arm_arch_v6m } */
 
 int __attribute__((target("arm")))
diff --git a/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c b/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c
index 517c4a8..befb7ec 100644
--- a/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c
+++ b/gcc/testsuite/gcc.target/arm/di-longlong64-sync-withldrexd.c
@@ -1,7 +1,6 @@ 
 /* { dg-do compile } */
-/* { dg-require-effective-target arm_arm_ok } */
 /* { dg-options "-marm -std=gnu99" } */
-/* { dg-require-effective-target arm_arch_v6k_ok } */
+/* { dg-require-effective-target arm_arch_v6k_arm_ok } */
 /* { dg-add-options arm_arch_v6k } */
 /* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */
 /* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "nand_and_fetch" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c
index 4b48ef8..447a8ec 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv4" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v4_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v4 } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c
index 016506f..28fd2f7 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv4t" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v4t_arm_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v4t } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c
index 9ef944e..78878f7 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv4t" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v4t_thumb_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v4t } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c
index a9403e9..8191299 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv5t" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v5t_arm_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v5t } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c
index f3ad07e..b25d17d 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv5t" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v5t_thumb_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v5t } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c
index f98c01a..e0c0d5c 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv5te" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v5te_arm_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v5te } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c
index 5d71787..27a64a2 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv5te" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v5te_thumb_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v5te } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c
index 88a5089..5d447c3 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6_arm_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v6 } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c
index 90ef9d2..15a6d75 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6_thumb_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v6 } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c
index 8de021a..0656e8f 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6k" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6k_arm_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v6k } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c
index c2fc270..b3b6ecf 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6k" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6k_thumb_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v6k } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c
index ee075e2..27f71be 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6-m" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6m_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v6m } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c
index 83b4bc4..259d2b5 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6t2" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6t2_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v6t2 } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c
index 1a1cbc5..e624ec5 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6t2" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6t2_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v6t2 } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c
index e2df0d4..6e3a966 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6z" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6z_arm_ok } */
 /* { dg-options "-marm" } */
 /* { dg-add-options arm_arch_v6z } */
 
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c
index e4b94ef..23a4fcd 100644
--- a/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6z" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6z_thumb_ok } */
 /* { dg-options "-mthumb" } */
 /* { dg-add-options arm_arch_v6z } */
 
diff --git a/gcc/testsuite/gcc.target/arm/g2.c b/gcc/testsuite/gcc.target/arm/g2.c
index e368017..ca5e3cc 100644
--- a/gcc/testsuite/gcc.target/arm/g2.c
+++ b/gcc/testsuite/gcc.target/arm/g2.c
@@ -4,6 +4,7 @@ 
 /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } { "-march=*" } { "-march=xscale" } } */
 /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } { "-mcpu=*" } { "-mcpu=xscale" } } */
 /* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm_arch_v5te_arm_ok } */
 /* { dg-require-effective-target arm32 } */
 
 /* Brett Gaines' test case. */
diff --git a/gcc/testsuite/gcc.target/arm/macro_defs1.c b/gcc/testsuite/gcc.target/arm/macro_defs1.c
index 4cc9ae6..655ba93 100644
--- a/gcc/testsuite/gcc.target/arm/macro_defs1.c
+++ b/gcc/testsuite/gcc.target/arm/macro_defs1.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6-m" } } */
 /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-require-effective-target arm_arch_v6m_ok } */
 /* { dg-options "-march=armv6-m -mthumb" } */
 
 #ifdef __ARM_NEON_FP
diff --git a/gcc/testsuite/gcc.target/arm/pr59858.c b/gcc/testsuite/gcc.target/arm/pr59858.c
index a944b9a..bcfd5d5 100644
--- a/gcc/testsuite/gcc.target/arm/pr59858.c
+++ b/gcc/testsuite/gcc.target/arm/pr59858.c
@@ -1,6 +1,7 @@ 
 /* { dg-do compile } */
 /* { dg-options "-march=armv5te -fno-builtin -mfloat-abi=soft -mthumb -fno-stack-protector -Os -fno-tree-loop-optimize -fno-tree-dominator-opts -fPIC -w" } */
 /* { dg-skip-if "Incompatible command line options: -mfloat-abi=soft -mfloat-abi=hard" { *-*-* } { "-mfloat-abi=hard" } { "" } } */
+/* { dg-require-effective-target arm_arch_v5te_thumb_ok } */
 
 typedef enum {
  REG_ENOSYS = -1,
diff --git a/gcc/testsuite/gcc.target/arm/pr65647-2.c b/gcc/testsuite/gcc.target/arm/pr65647-2.c
index f2985f8..e3978e5 100644
--- a/gcc/testsuite/gcc.target/arm/pr65647-2.c
+++ b/gcc/testsuite/gcc.target/arm/pr65647-2.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-require-effective-target arm_arch_v6_arm_ok } */
 /* { dg-options "-O3 -marm -march=armv6 -std=c99" } */
 
 typedef struct {
diff --git a/gcc/testsuite/gcc.target/arm/pr79058.c b/gcc/testsuite/gcc.target/arm/pr79058.c
index 54a1d8a..7d078ac 100644
--- a/gcc/testsuite/gcc.target/arm/pr79058.c
+++ b/gcc/testsuite/gcc.target/arm/pr79058.c
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target arm_arm_ok } */
+/* { dg-require-effective-target arm_arch_v4_ok } */
 /* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } { "-mcpu=arm7tdmi" } } */
 /* { dg-options "-Os -mbig-endian -marm -mcpu=arm7tdmi" } */
 
diff --git a/gcc/testsuite/gcc.target/arm/pr83712.c b/gcc/testsuite/gcc.target/arm/pr83712.c
index 8ed8cdf..4902ec9 100644
--- a/gcc/testsuite/gcc.target/arm/pr83712.c
+++ b/gcc/testsuite/gcc.target/arm/pr83712.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-require-effective-target arm_arch_v5t_thumb_ok } */
 /* { dg-options "-mfloat-abi=softfp -mthumb -march=armv5t -O2" }  */
 #pragma GCC optimize ("-O2")
 
diff --git a/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c b/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c
index b6211f9..5080d2c 100644
--- a/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c
+++ b/gcc/testsuite/gcc.target/arm/pragma_arch_switch_2.c
@@ -2,6 +2,7 @@ 
 /* { dg-skip-if "instruction not valid on thumb" { *-*-* } { "-mthumb" } { "" } } */
 /* { dg-do assemble } */
 /* { dg-require-effective-target arm_arm_ok } */
+/* { dg-require-effective-target arm_arch_v5te_arm_ok } */
 /* { dg-additional-options "-Wall -O2 -march=armv5te -std=gnu99 -marm" } */
 
 #pragma GCC target ("arch=armv6")
diff --git a/gcc/testsuite/gcc.target/arm/scd42-1.c b/gcc/testsuite/gcc.target/arm/scd42-1.c
index be60e64..2b8fc0b 100644
--- a/gcc/testsuite/gcc.target/arm/scd42-1.c
+++ b/gcc/testsuite/gcc.target/arm/scd42-1.c
@@ -3,6 +3,7 @@ 
 /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-march=*" } { "-march=xscale" } } */
 /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-mcpu=*" } { "-mcpu=xscale" } } */
 /* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */
+/* { dg-require-effective-target arm_arch_v5te_ok } */
 /* { dg-options "-mcpu=xscale -O -mfloat-abi=softfp" } */
 
 unsigned load1(void) __attribute__ ((naked));
diff --git a/gcc/testsuite/gcc.target/arm/scd42-2.c b/gcc/testsuite/gcc.target/arm/scd42-2.c
index 6d9e5e1..3c9768d 100644
--- a/gcc/testsuite/gcc.target/arm/scd42-2.c
+++ b/gcc/testsuite/gcc.target/arm/scd42-2.c
@@ -4,6 +4,7 @@ 
 /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } { "-mcpu=*" } { "-mcpu=xscale" } } */
 /* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
 /* { dg-require-effective-target arm32 } */
+/* { dg-require-effective-target arm_arch_v5te_arm_ok } */
 /* { dg-options "-mcpu=xscale -O -marm" } */
 
 unsigned load2(void) __attribute__ ((naked));
diff --git a/gcc/testsuite/gcc.target/arm/scd42-3.c b/gcc/testsuite/gcc.target/arm/scd42-3.c
index e566cb2..0afd121 100644
--- a/gcc/testsuite/gcc.target/arm/scd42-3.c
+++ b/gcc/testsuite/gcc.target/arm/scd42-3.c
@@ -3,6 +3,7 @@ 
 /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-march=*" } { "-march=xscale" } } */
 /* { dg-skip-if "Test is specific to Xscale" { arm*-*-* } { "-mcpu=*" } { "-mcpu=xscale" } } */
 /* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=softfp" } } */
+/* { dg-require-effective-target arm_arch_v5te_ok } */
 /* { dg-options "-mcpu=xscale -O -mfloat-abi=softfp" } */
 
 unsigned load4(void) __attribute__ ((naked));
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 0b67e10..1a1eed8 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -4181,13 +4181,25 @@  proc check_effective_target_arm_fp16_hw { } {
 #	 /* { dg-require-effective-target arm_arch_v5t_multilib } */
 foreach { armfunc armflag armdefs } {
 	v4 "-march=armv4 -marm" __ARM_ARCH_4__
-	v4t "-march=armv4t" __ARM_ARCH_4T__
-	v5t "-march=armv5t" __ARM_ARCH_5T__
-	v5te "-march=armv5te" __ARM_ARCH_5TE__
-	v6 "-march=armv6" __ARM_ARCH_6__
-	v6k "-march=armv6k" __ARM_ARCH_6K__
+	v4t "-march=armv4t -mfloat-abi=softfp" __ARM_ARCH_4T__
+	v4t_arm "-march=armv4t -marm" __ARM_ARCH_4T__
+	v4t_thumb "-march=armv4t -mthumb -mfloat-abi=softfp" __ARM_ARCH_4T__
+	v5t "-march=armv5t -mfloat-abi=softfp" __ARM_ARCH_5T__
+	v5t_arm "-march=armv5t -marm" __ARM_ARCH_5T__
+	v5t_thumb "-march=armv5t -mthumb -mfloat-abi=softfp" __ARM_ARCH_5T__
+	v5te "-march=armv5te -mfloat-abi=softfp" __ARM_ARCH_5TE__
+	v5te_arm "-march=armv5te -marm" __ARM_ARCH_5TE__
+	v5te_thumb "-march=armv5te -mthumb -mfloat-abi=softfp" __ARM_ARCH_5TE__
+	v6 "-march=armv6 -mfloat-abi=softfp" __ARM_ARCH_6__
+	v6_arm "-march=armv6 -marm" __ARM_ARCH_6__
+	v6_thumb "-march=armv6 -mthumb -mfloat-abi=softfp" __ARM_ARCH_6__
+	v6k "-march=armv6k -mfloat-abi=softfp" __ARM_ARCH_6K__
+	v6k_arm "-march=armv6k -marm" __ARM_ARCH_6K__
+	v6k_thumb "-march=armv6k -mthumb -mfloat-abi=softfp" __ARM_ARCH_6K__
 	v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
-	v6z "-march=armv6z" __ARM_ARCH_6Z__
+	v6z "-march=armv6z -mfloat-abi=softfp" __ARM_ARCH_6Z__
+	v6z_arm "-march=armv6z -marm" __ARM_ARCH_6Z__
+	v6z_thumb "-march=armv6z -mthumb -mfloat-abi=softfp" __ARM_ARCH_6Z__
 	v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__
 	v7a "-march=armv7-a" __ARM_ARCH_7A__
 	v7r "-march=armv7-r" __ARM_ARCH_7R__
@@ -4204,10 +4216,6 @@  foreach { armfunc armflag armdefs } {
 	v8r "-march=armv8-r" __ARM_ARCH_8R__ } {
     eval [string map [list FUNC $armfunc FLAG $armflag DEFS $armdefs ] {
 	proc check_effective_target_arm_arch_FUNC_ok { } {
-	    if { [ string match "*-marm*" "FLAG" ] &&
-		![check_effective_target_arm_arm_ok] } {
-		return 0
-	    }
 	    return [check_no_compiler_messages arm_arch_FUNC_ok assembly {
 		#if !(DEFS)
 		#error !(DEFS)