aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target
diff options
context:
space:
mode:
authorMatthew Gretton-Dann <matthew.gretton-dann@arm.com>2012-06-25 16:30:53 +0000
committerMatthew Gretton-Dann <mgretton@gcc.gnu.org>2012-06-25 16:30:53 +0000
commit9e94a7fc5ab770928b9e6a2b74e292d35b4c94da (patch)
tree0026d4a6c28abfd39e7c570714efb1913bb50200 /gcc/testsuite/gcc.target
parent25bab91e017eb1d6d93117f3da96fa9b43703190 (diff)
downloadgcc-9e94a7fc5ab770928b9e6a2b74e292d35b4c94da.zip
gcc-9e94a7fc5ab770928b9e6a2b74e292d35b4c94da.tar.gz
gcc-9e94a7fc5ab770928b9e6a2b74e292d35b4c94da.tar.bz2
arm.h (TARGET_CPU_CPP_BUILTINS): Add new built-ins.
2012-05-25 Matthew Gretton-Dann <matthew.gretton-dann@arm.com> James Greenhalgh <james.greenhalgh@arm.com> * gcc/config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Add new built-ins. (TARGET_FMA): New macro. (TARGET_ARM_QBIT, TARGET_ARM_SAT): Likewise. (TARGET_ARM_ARCH): Likewise. (TARGET_ARM_ARCH_ISA_THUMB): Likewise. (TARGET_V6M, TARGET_V7M): Likewise. (TARGET_ARM_ARCH_PROFILE): Likewise. (TARGET_ARM_FEATURE_LDREX): Likewise. (TARGET_ARM_FP, TARGET_NEON_FP): Likewise. (ARM_MIN_ENUM_SIZE): Likewise. * gcc/config/arm/arm.c (arm_file_start): Refactor appropriately. (base_architecture): New enumeration. (arm_base_arch): New global variable. (processors): Add field base_arch. (ARM_ARCH, ARM_CORE): Adjust accordingly. (arm_option_override): Add initialization of arm_base_arch. * gcc/doc/cpp.texi (system-specific predefined macros.): Change. * gcc/testsuite/gcc.target/arm/ftest-support-arm.h New testcase. * gcc/testsuite/gcc.target/arm/ftest-support-thumb.h Likewise. * gcc/testsuite/gcc.target/arm/ftest-support.h Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv7a-arm.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv7a-thumb.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv7m-thumb.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv7em-thumb.c: Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv7r-arm.c Likewise. * gcc/testsuite/gcc.target/arm/ftest-armv7r-thumb.c Likewise. * gcc/testsuite/lib/target-supports.exp (check_effective_target_arm_arch_FUNC): Add support for more architectures. (add_options_for_arm_arch_FUNC): Likewise. (check_effective_target_arm_arch_FUNC_multilib): New functions. Co-Authored-By: James Greenhalgh <james.greenhalgh@arm.com> From-SVN: r188946
Diffstat (limited to 'gcc/testsuite/gcc.target')
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv7a-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv7a-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv7em-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv7m-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv7r-arm.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-armv7r-thumb.c14
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-support-arm.h29
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-support-thumb.h29
-rw-r--r--gcc/testsuite/gcc.target/arm/ftest-support.h83
25 files changed, 449 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c
new file mode 100644
index 0000000..acaf72e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v4_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v4 } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V4);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c
new file mode 100644
index 0000000..7af6167
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v4t_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v4t } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V4T);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c
new file mode 100644
index 0000000..1e6a2da
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v4t_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v4t } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V4T);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c
new file mode 100644
index 0000000..cc7fc71
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v5t_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v5t } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V5T);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c
new file mode 100644
index 0000000..b2b4727
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v5t_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v5t } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V5T);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c
new file mode 100644
index 0000000..7595e19
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v5te_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v5te } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V5TE);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c
new file mode 100644
index 0000000..a18ea52
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v5te_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v5te } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V5TE);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c
new file mode 100644
index 0000000..465d187
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v6_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v6 } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c
new file mode 100644
index 0000000..0445587
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v6_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v6 } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c
new file mode 100644
index 0000000..c059b77
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v6k_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v6k } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6K);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c
new file mode 100644
index 0000000..8f19587
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v6k_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v6k } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6K);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c
new file mode 100644
index 0000000..1042761
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v6m_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v6m } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6M);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c
new file mode 100644
index 0000000..5f7f874
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v6t2_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v6t2 } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6T2);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c
new file mode 100644
index 0000000..e3695c4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v6t2_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v6t2 } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6T2);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c
new file mode 100644
index 0000000..0797890
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v6z_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v6z } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6Z);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c
new file mode 100644
index 0000000..c5a2e49
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v6z_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v6z } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V6Z);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv7a-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv7a-arm.c
new file mode 100644
index 0000000..e84559a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv7a-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v7a_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v7a } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V7A);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv7a-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv7a-thumb.c
new file mode 100644
index 0000000..ad9b4e3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv7a-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v7a_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v7a } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V7A);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv7em-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv7em-thumb.c
new file mode 100644
index 0000000..7ef9210
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv7em-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v7em_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v7em } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V7EM);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv7m-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv7m-thumb.c
new file mode 100644
index 0000000..8bf875e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv7m-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v7m_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v7m } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V7M);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv7r-arm.c b/gcc/testsuite/gcc.target/arm/ftest-armv7r-arm.c
new file mode 100644
index 0000000..4422564
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv7r-arm.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_nothumb } */
+/* { dg-require-effective-target arm_arch_v7r_multilib } */
+/* { dg-options "-marm" } */
+/* { dg-add-options arm_arch_v7r } */
+
+#include "ftest-support-arm.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V7R);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-armv7r-thumb.c b/gcc/testsuite/gcc.target/arm/ftest-armv7r-thumb.c
new file mode 100644
index 0000000..da866e4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-armv7r-thumb.c
@@ -0,0 +1,14 @@
+/* { dg-do run } */
+/* { dg-require-effective-target arm_eabi } */
+/* { dg-require-effective-target arm_arch_v7r_multilib } */
+/* { dg-options "-mthumb" } */
+/* { dg-add-options arm_arch_v7r } */
+
+#include "ftest-support-thumb.h"
+
+int
+main (void)
+{
+ return ftest (ARCH_V7R);
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/ftest-support-arm.h b/gcc/testsuite/gcc.target/arm/ftest-support-arm.h
new file mode 100644
index 0000000..512d50e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-support-arm.h
@@ -0,0 +1,29 @@
+#include "ftest-support.h"
+
+ /*Feature matrix layout:
+ __ARM_ARCH
+ __ARM_ARCH_ISA_ARM
+ __ARM_ARCH_ISA_THUMB
+ __ARM_ARCH_PROFILE
+ __ARM_FEATURE_UNALIGNED
+ __ARM_FEATURE_LDREX
+ __ARM_FEATURE_CLZ
+ __ARM_FEATURE_DSP
+ __ARM_FEATURE_SIMD32
+ __ARM_FEATURE_QBIT
+ __ARM_FEATURE_SAT
+ */
+int feature_matrix[ARCH_COUNT][NUM_FEATURES] =
+ {{4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* ARCH_V4. */
+ {4, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, /* ARCH_V4T. */
+ {5, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0}, /* ARCH_V5T. */
+ {5, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0}, /* ARCH_V5TE. */
+ {6, 1, 1, 0, 1, 4, 1, 1, 1, 1, 1}, /* ARCH_V6. */
+ {6, 1, 1, 0, 1, 15, 1, 1, 1, 1, 1}, /* ARCH_V6K. */
+ {6, 1, 2, 0, 1, 4, 1, 1, 1, 1, 1}, /* ARCH_V6T2. */
+ {6, 1, 1, 0, 1, 4, 1, 1, 1, 1, 1}, /* ARCH_V6Z. */
+ {6, 0, 1, 'M', 0, 0, 1, 0, 0, 0, 0}, /* ARCH_V6M. */
+ {7, 1, 2, 'A', 1, 15, 1, 1, 1, 1, 1}, /* ARCH_V7A. */
+ {7, 1, 2, 'R', 1, 15, 1, 1, 1, 1, 1}, /* ARCH_V7R. */
+ {7, 0, 2, 'M', 1, 7, 1, 0, 0, 1, 1}, /* ARCH_V7M. */
+ {7, 0, 2, 'M', 1, 7, 1, 1, 0, 1, 1}}; /* ARCH_V7EM. */
diff --git a/gcc/testsuite/gcc.target/arm/ftest-support-thumb.h b/gcc/testsuite/gcc.target/arm/ftest-support-thumb.h
new file mode 100644
index 0000000..9991831
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-support-thumb.h
@@ -0,0 +1,29 @@
+#include "ftest-support.h"
+
+ /*Feature matrix layout:
+ __ARM_ARCH
+ __ARM_ARCH_ISA_ARM
+ __ARM_ARCH_ISA_THUMB
+ __ARM_ARCH_PROFILE
+ __ARM_FEATURE_UNALIGNED
+ __ARM_FEATURE_LDREX
+ __ARM_FEATURE_CLZ
+ __ARM_FEATURE_DSP
+ __ARM_FEATURE_SIMD32
+ __ARM_FEATURE_QBIT
+ __ARM_FEATURE_SAT
+ */
+int feature_matrix[ARCH_COUNT][NUM_FEATURES] =
+ {{4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* ARCH_V4. */
+ {4, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, /* ARCH_V4T. */
+ {5, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, /* ARCH_V5T. */
+ {5, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, /* ARCH_V5TE. */
+ {6, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0}, /* ARCH_V6. */
+ {6, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0}, /* ARCH_V6K. */
+ {6, 1, 2, 0, 1, 0, 1, 1, 1, 1, 1}, /* ARCH_V6T2. */
+ {6, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0}, /* ARCH_V6Z. */
+ {6, 0, 1, 'M', 0, 0, 0, 0, 0, 0, 0}, /* ARCH_V6M. */
+ {7, 1, 2, 'A', 1, 15, 1, 1, 1, 1, 1}, /* ARCH_V7A. */
+ {7, 1, 2, 'R', 1, 15, 1, 1, 1, 1, 1}, /* ARCH_V7R. */
+ {7, 0, 2, 'M', 1, 7, 1, 0, 0, 1, 1}, /* ARCH_V7M. */
+ {7, 0, 2, 'M', 1, 7, 1, 1, 1, 1, 1}}; /* ARCH_V7EM. */
diff --git a/gcc/testsuite/gcc.target/arm/ftest-support.h b/gcc/testsuite/gcc.target/arm/ftest-support.h
new file mode 100644
index 0000000..c5f9810
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ftest-support.h
@@ -0,0 +1,83 @@
+#if 0
+#define INTERNAL_DEBUG 1
+#endif
+
+#ifdef INTERNAL_DEBUG
+#include <stdio.h>
+#endif
+
+extern void abort (void);
+
+enum architecture {
+ ARCH_V4 = 0,
+ ARCH_V4T,
+ ARCH_V5T,
+ ARCH_V5TE,
+ ARCH_V6,
+ ARCH_V6K,
+ ARCH_V6T2,
+ ARCH_V6Z,
+ ARCH_V6M,
+ ARCH_V7A,
+ ARCH_V7R,
+ ARCH_V7M,
+ ARCH_V7EM,
+ ARCH_COUNT
+};
+
+#define NUM_FEATURES 11
+int feature_matrix[ARCH_COUNT][NUM_FEATURES];
+
+int
+ftest (int arch)
+{
+ int features[NUM_FEATURES] = {0};
+ int y;
+
+ for (y = 0; y < NUM_FEATURES; ++y)
+ features[y] = 0;
+
+#ifdef __ARM_ARCH
+ features[0] = __ARM_ARCH;
+#endif
+#ifdef __ARM_ARCH_ISA_ARM
+ features[1] = __ARM_ARCH_ISA_ARM;
+#endif
+#ifdef __ARM_ARCH_ISA_THUMB
+ features[2] = __ARM_ARCH_ISA_THUMB;
+#endif
+#ifdef __ARM_ARCH_PROFILE
+ features[3] = __ARM_ARCH_PROFILE;
+#endif
+#ifdef __ARM_FEATURE_UNALIGNED
+ features[4] = __ARM_FEATURE_UNALIGNED;
+#endif
+#ifdef __ARM_FEATURE_LDREX
+ features[5] = __ARM_FEATURE_LDREX;
+#endif
+#ifdef __ARM_FEATURE_CLZ
+ features[6] = __ARM_FEATURE_CLZ;
+#endif
+#ifdef __ARM_FEATURE_DSP
+ features[7] = __ARM_FEATURE_DSP;
+#endif
+#ifdef __ARM_FEATURE_SIMD32
+ features[8] = __ARM_FEATURE_SIMD32;
+#endif
+#ifdef __ARM_FEATURE_QBIT
+ features[9] = __ARM_FEATURE_QBIT;
+#endif
+#ifdef __ARM_FEATURE_SAT
+ features[10] = __ARM_FEATURE_SAT;
+#endif
+ for (y = 0; y < NUM_FEATURES; ++y)
+ if (feature_matrix[arch][y] != features[y])
+ {
+#ifdef INTERNAL_DEBUG
+ printf ("%d, %d, %d, %d\n", arch, y, feature_matrix[arch][y], features[y]);
+#endif
+ abort ();
+ }
+ return 0;
+}
+