summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/s390
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/s390')
-rw-r--r--gcc/testsuite/gcc.target/s390/asm-machine-1.c9
-rw-r--r--gcc/testsuite/gcc.target/s390/asm-machine-2.c19
-rw-r--r--gcc/testsuite/gcc.target/s390/asm-machine-3.c19
-rw-r--r--gcc/testsuite/gcc.target/s390/asm-machine-4.c20
-rw-r--r--gcc/testsuite/gcc.target/s390/s390.exp18
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-1.c22
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-10.c20
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-11.c25
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c59
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-13.c18
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-14.c50
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c117
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-16.c97
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-17.c42
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-2.c51
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-3.c27
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-4.c38
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-5.c10
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-6.c36
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-7.c36
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-8.c22
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-9.c22
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-1.c160
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-2.c160
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c177
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c177
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-1.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-10.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-11.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-12.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-13.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-14.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-15.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-16.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-17.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-18.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-19.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-2.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-20.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-21.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-22.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-23.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-24.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-25.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-26.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-27.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-28.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-29.c177
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-3.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-30.c177
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-31.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-32.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-4.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-5.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-6.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-7.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-8.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-9.c353
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-1.c62
-rw-r--r--gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-2.c62
90 files changed, 23109 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/s390/asm-machine-1.c b/gcc/testsuite/gcc.target/s390/asm-machine-1.c
new file mode 100644
index 00000000000..a5326e19289
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/asm-machine-1.c
@@ -0,0 +1,9 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-march=z13 -mzarch" } */
+
+void foo(void) { }
+
+/* { dg-final { scan-assembler-not "\t\.machine " } } */
+/* { dg-final { scan-assembler-not "\t\.machinemode " } } */
diff --git a/gcc/testsuite/gcc.target/s390/asm-machine-2.c b/gcc/testsuite/gcc.target/s390/asm-machine-2.c
new file mode 100644
index 00000000000..910438eb73e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/asm-machine-2.c
@@ -0,0 +1,19 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-march=z13 -mzarch" } */
+
+void foo(void) { }
+
+__attribute__ ((target("arch=z10")))
+void bar(void) { }
+
+/* { dg-final { scan-assembler-times "\t\.machine push" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machine pop" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machine \"z10\"" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode push" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode zarch" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode pop" 1 } } */
+
+/* { dg-final { scan-assembler-times "\t\.machine " 3 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode " 3 } } */
diff --git a/gcc/testsuite/gcc.target/s390/asm-machine-3.c b/gcc/testsuite/gcc.target/s390/asm-machine-3.c
new file mode 100644
index 00000000000..b056b1933d1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/asm-machine-3.c
@@ -0,0 +1,19 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-march=z13 -mzarch" } */
+
+void foo(void) { }
+
+#pragma GCC target("arch=z10")
+void bar(void) { }
+
+/* { dg-final { scan-assembler-times "\t\.machine push" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machine pop" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machine \"z10\"" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode push" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode zarch" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode pop" 1 } } */
+
+/* { dg-final { scan-assembler-times "\t\.machine " 3 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode " 3 } } */
diff --git a/gcc/testsuite/gcc.target/s390/asm-machine-4.c b/gcc/testsuite/gcc.target/s390/asm-machine-4.c
new file mode 100644
index 00000000000..af9ab1ccd4f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/asm-machine-4.c
@@ -0,0 +1,20 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-march=z13 -mzarch" } */
+
+void foo(void) { }
+
+#pragma GCC target("arch=z196")
+__attribute__ ((target("arch=z10")))
+void bar(void) { }
+
+/* { dg-final { scan-assembler-times "\t\.machine push" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machine pop" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machine \"z10\"" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode push" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode zarch" 1 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode pop" 1 } } */
+
+/* { dg-final { scan-assembler-times "\t\.machine " 3 } } */
+/* { dg-final { scan-assembler-times "\t\.machinemode " 3 } } */
diff --git a/gcc/testsuite/gcc.target/s390/s390.exp b/gcc/testsuite/gcc.target/s390/s390.exp
index 0b8f80ed669..87433ddc6ef 100644
--- a/gcc/testsuite/gcc.target/s390/s390.exp
+++ b/gcc/testsuite/gcc.target/s390/s390.exp
@@ -24,6 +24,21 @@ if ![istarget s390*-*-*] then {
# Load support procs.
load_lib gcc-dg.exp
+# Return 1 if the the assembler understands .machine and .machinemode. The
+# target attribute needs that feature to work.
+proc check_effective_target_target_attribute { } {
+ if { ![check_runtime s390_check_machine_machinemode [subst {
+ int main (void)
+ {
+ asm (".machine push" : : );
+ asm (".machine pop" : : );
+ asm (".machinemode push" : : );
+ asm (".machinemode pop" : : );
+ return 0;
+ }
+ }] "" ] } { return 0 } else { return 1 }
+}
+
# Return 1 if htm (etnd - extract nesting depth) instructions are
# understood by the assembler and can be executed.
proc check_effective_target_htm { } {
@@ -70,6 +85,9 @@ dg-runtest [lsort [prune [glob -nocomplain $srcdir/$subdir/*.\[cS\]] \
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*vector*/*.\[cS\]]] \
"" $DEFAULT_CFLAGS
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/target-attribute/*.\[cS\]]] \
+ "" $DEFAULT_CFLAGS
+
# Additional hotpatch torture tests.
torture-init
set HOTPATCH_TEST_OPTS [list -Os -O0 -O1 -O2 -O3]
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-1.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-1.c
new file mode 100644
index 00000000000..31643490540
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-1.c
@@ -0,0 +1,22 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+
+__attribute__ ((target("arch=zEC12")))
+void htm1(void)
+{
+ __builtin_tend();
+}
+
+__attribute__ ((target("arch=z10")))
+void htm0(void)
+{
+ __builtin_tend(); /* { dg-error "is not supported without -mhtm" } */
+}
+
+void htmd(void)
+{
+ __builtin_tend();
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-10.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-10.c
new file mode 100644
index 00000000000..e48cea3e815
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-10.c
@@ -0,0 +1,20 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mno-mvcle -march=z13 -O3" } */
+
+#pragma GCC target("mvcle")
+void p1(char *b)
+{
+ __builtin_memset (b, 0, 400);
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("mvcle")))
+void a1(char *b)
+{
+ __builtin_memset (b, 0, 400);
+}
+
+/* { dg-final { scan-assembler-times "\tmvcle\t" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-11.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-11.c
new file mode 100644
index 00000000000..def418aca83
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-11.c
@@ -0,0 +1,25 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mno-mvcle -march=z13 -O3" } */
+
+#pragma GCC target("no-mvcle")
+void p0(char *b)
+{
+ __builtin_memset (b, 0, 400);
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("no-mvcle")))
+void a0(char *b)
+{
+ __builtin_memset (b, 0, 400);
+}
+
+void d(char *b)
+{
+ __builtin_memset (b, 0, 400);
+}
+
+/* { dg-final { scan-assembler-not "\tmvcle\t" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c
new file mode 100644
index 00000000000..a22a3e11018
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-12.c
@@ -0,0 +1,59 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-O3 -march=z13 -mstack-guard=0 -mstack-size=512" } */
+
+extern char *bar(int x);
+
+void da(int x)
+{
+ bar(x);
+ bar(x + 1);
+ /* { dg-final { scan-assembler-times "\ttmll\t%r15,256" 2 { target { lp64 } } } } */
+ /* { dg-final { scan-assembler-times "\ttml\t%r15,384" 2 { target { ! lp64 } } } } */
+}
+
+#pragma GCC target("stack-size=1024,stack-guard=0")
+void p1(int x)
+{
+ bar(x);
+ bar(x + 1);
+ /* { dg-final { scan-assembler-times "\ttmll\t%r15,768" 1 { target { lp64 } } } } */
+ /* { dg-final { scan-assembler-times "\ttml\t%r15,896" 1 { target { ! lp64 } } } } */
+}
+#pragma GCC reset_options
+
+#pragma GCC target("stack-size=2048,stack-guard=0")
+void p0(int x)
+{
+ bar(x);
+ bar(x + 1);
+ /* { dg-final { scan-assembler-times "\ttmll\t%r15,1792" 1 { target { lp64 } } } } */
+ /* { dg-final { scan-assembler-times "\ttml\t%r15,1920" 1 { target { ! lp64 } } } } */
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("stack-size=4096,stack-guard=0")))
+void a1(int x)
+{
+ bar(x);
+ bar(x + 1);
+ /* { dg-final { scan-assembler-times "\ttmll\t%r15,3840" 1 { target { lp64 } } } } */
+ /* { dg-final { scan-assembler-times "\ttml\t%r15,3968" 1 { target { ! lp64 } } } } */
+}
+
+__attribute__ ((target("stack-size=8192,stack-guard=0")))
+void a0(int x)
+{
+ bar(x);
+ bar(x + 1);
+ /* { dg-final { scan-assembler-times "\ttmll\t%r15,7936" 1 { target { lp64 } } } } */
+ /* { dg-final { scan-assembler-times "\ttml\t%r15,8064" 1 { target { ! lp64 } } } } */
+}
+
+void d(int x)
+{
+ bar(x);
+ bar(x + 1);
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-13.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-13.c
new file mode 100644
index 00000000000..07e0cc9ff5f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-13.c
@@ -0,0 +1,18 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-march=z13" } */
+
+#pragma GCC target ("zvector","zvector,arch=z13","arch=z13,zvector","zvector")
+__attribute__ ((target("arch=z13","arch=z13")))
+void a(void)
+{
+}
+
+#pragma GCC target ("arch=z13","arch=z13,arch=z13","arch=z13,arch=z13,arch=z13")
+__attribute__ ((target("zvector","arch=z13")))
+void
+b(void)
+{ /* { dg-error "Value .zvector. is not supported by attribute .target." } */
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-14.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-14.c
new file mode 100644
index 00000000000..bddc0a943a6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-14.c
@@ -0,0 +1,50 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mno-small-exec" } */
+
+extern void foo(void);
+
+#pragma GCC target("small-exec")
+int p1(void)
+{
+ foo();
+ return 1;
+}
+#pragma GCC reset_options
+
+#pragma GCC target("no-small-exec")
+int p0(void)
+{
+ foo();
+ foo();
+ return 2;
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("small-exec")))
+int a1(void)
+{
+ foo();
+ foo();
+ foo();
+ foo();
+ return 4;
+}
+
+__attribute__ ((target("no-small-exec")))
+int a0(void)
+{
+ foo();
+ foo();
+ foo();
+ foo();
+ foo();
+ foo();
+ foo();
+ foo();
+ return 8;
+}
+
+/* { dg-final { scan-assembler-times "\tbras\t" 5 } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c
new file mode 100644
index 00000000000..dd0c978936b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-15.c
@@ -0,0 +1,117 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mno-packed-stack" } */
+
+extern void foo(void);
+
+#pragma GCC target("packed-stack")
+int p1(void)
+{
+ foo();
+ return 1;
+}
+#pragma GCC reset_options
+
+#pragma GCC target("no-packed-stack")
+int p0(void)
+{
+ foo();
+ return 2;
+}
+int p0b(void)
+{
+ foo();
+ return 2;
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("packed-stack")))
+int a1(void)
+{
+ foo();
+ return 4;
+}
+
+__attribute__ ((target("packed-stack")))
+int a1b(void)
+{
+ foo();
+ return 4;
+}
+
+__attribute__ ((target("packed-stack")))
+int a1c(void)
+{
+ foo();
+ return 4;
+}
+
+__attribute__ ((target("packed-stack")))
+int a1d(void)
+{
+ foo();
+ return 4;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0(void)
+{
+ foo();
+ return 8;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0b(void)
+{
+ foo();
+ return 8;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0c(void)
+{
+ foo();
+ return 8;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0d(void)
+{
+ foo();
+ return 8;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0e(void)
+{
+ foo();
+ return 8;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0f(void)
+{
+ foo();
+ return 8;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0g(void)
+{
+ foo();
+ return 8;
+}
+
+__attribute__ ((target("no-packed-stack")))
+int a0h(void)
+{
+ foo();
+ return 8;
+}
+
+/* { dg-final { scan-assembler-times "\t.cfi_offset 15, -40" 10 { target { lp64 } } } } */
+/* { dg-final { scan-assembler-times "\t.cfi_offset 15, -8" 5 { target { lp64 } } } } */
+/* { dg-final { scan-assembler-times "\t.cfi_offset 15, -36" 10 { target { ! lp64 } } } } */
+/* { dg-final { scan-assembler-times "\t.cfi_offset 15, -4" 5 { target { ! lp64 } } } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-16.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-16.c
new file mode 100644
index 00000000000..42191b1360e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-16.c
@@ -0,0 +1,97 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-msoft-float" } */
+
+#pragma GCC target("hard-float")
+float p1(float f)
+{
+ return 2 * f;
+}
+#pragma GCC reset_options
+
+#pragma GCC target("soft-float")
+float p0(float f)
+{
+ return 2 * f;
+}
+float p0b(float f)
+{
+ return 2 * f;
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("hard-float")))
+float a1(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("hard-float")))
+float a1b(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("hard-float")))
+float a1c(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("hard-float")))
+float a1d(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0b(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0c(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0d(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0e(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0f(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0g(float f)
+{
+ return 2 * f;
+}
+
+__attribute__ ((target("soft-float")))
+float a0h(float f)
+{
+ return 2 * f;
+}
+
+/* { dg-final { scan-assembler-times "\tste\t%f" 5 } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-17.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-17.c
new file mode 100644
index 00000000000..2e0fcf77ffd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-17.c
@@ -0,0 +1,42 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile { target { lp64 } } } */
+/* { dg-require-effective-target dfp } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-march=z13 -std=gnu99 -mno-hard-dfp" } */
+
+#pragma GCC target("hard-dfp")
+_Decimal64 p1(_Decimal64 f, _Decimal64 g)
+{
+ return f * g;
+ /* { dg-final { scan-assembler-times "\tmdtr\t" 1 } } */
+}
+#pragma GCC reset_options
+
+#pragma GCC target("no-hard-dfp")
+ _Decimal64 p0(_Decimal64 f, _Decimal64 g)
+{
+ return f / 2;
+ /* { dg-final { scan-assembler-not "\tddtr\t" } } */
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("hard-dfp")))
+_Decimal64 a1(_Decimal64 f, _Decimal64 g)
+{
+ /* { dg-final { scan-assembler-times "\tadtr\t" 1 } } */
+ return f + g;
+}
+
+__attribute__ ((target("no-hard-dfp")))
+_Decimal64 a0(_Decimal64 f, _Decimal64 g)
+{
+ return f - g;
+ /* { dg-final { scan-assembler-not "\tsdtr\t" } } */
+}
+
+_Decimal64 d(_Decimal64 f, _Decimal64 g)
+{
+ return f - g;
+ /* { dg-final { scan-assembler-not "\tsdtr\t" } } */
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-2.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-2.c
new file mode 100644
index 00000000000..01ae08ee17f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-2.c
@@ -0,0 +1,51 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-O3 -march=zEC12 -mno-htm" } */
+
+#pragma GCC target("htm")
+void p1(void)
+{
+#ifndef __HTM__
+#error __HTM__ is not defined
+#endif
+ __builtin_tend ();
+}
+#pragma GCC reset_options
+
+#pragma GCC target("no-htm")
+void p0(void)
+{
+#ifdef __HTM__
+#error __HTM__ is defined
+#endif
+ __builtin_tend ();
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("htm")))
+void a1(void)
+{
+#ifdef __HTM__
+#error __HTM__ is defined
+#endif
+ __builtin_tend ();
+}
+
+__attribute__ ((target("no-htm")))
+void a0(void)
+{
+#ifdef __HTM__
+#error __HTM__ is defined
+#endif
+ __builtin_tend (); /* { dg-error "is not supported without -mhtm" } */
+}
+
+void htmd(void)
+{
+#ifdef __HTM__
+#error __HTM__ is defined
+#endif
+ __builtin_tend (); /* { dg-error "is not supported without -mhtm" } */
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-3.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-3.c
new file mode 100644
index 00000000000..95916288204
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-3.c
@@ -0,0 +1,27 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-O3 -march=z13 -mzarch -mzvector" } */
+
+#include <vecintrin.h>
+
+__attribute__ ((target("arch=z13")))
+void vx1(void)
+{
+ vec_load_bndry ((const signed char *)0, 64);
+ __builtin_s390_vll ((unsigned int)0, (const void *)8);
+}
+
+__attribute__ ((target("arch=z10")))
+void vx0(void)
+{
+ vec_load_bndry ((const signed char *)0, 64); /* { dg-error "is not supported without -mvx" } */
+ __builtin_s390_vll ((unsigned int)0, (const void *)8); /* { dg-error "is not supported without -mvx" } */
+}
+
+void vxd(void)
+{
+ vec_load_bndry ((const signed char *)0, 64);
+ __builtin_s390_vll ((unsigned int)0, (const void *)8);
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-4.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-4.c
new file mode 100644
index 00000000000..f0a4eff68eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-4.c
@@ -0,0 +1,38 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-O3 -march=z13 -mno-vx -mno-zvector" } */
+
+#include <vecintrin.h>
+
+#pragma GCC target("no-zvector")
+__attribute__ ((target("vx")))
+void a1(void)
+{
+#ifdef __VEC__
+#error __VEC__ is defined
+#endif
+ vec_load_bndry ((const signed char *)0, 64);
+ __builtin_s390_vll ((unsigned int)0, (const void *)8);
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("no-vx")))
+void a0(void)
+{
+#ifdef __VEC__
+#error __VEC__ is defined
+#endif
+ vec_load_bndry ((const signed char *)0, 64); /* { dg-error "is not supported without -mvx" } */
+ __builtin_s390_vll ((unsigned int)0, (const void *)8); /* { dg-error "is not supported without -mvx" } */
+}
+
+void d(void)
+{
+#ifdef __VEC__
+#error __VEC__ is defined
+#endif
+ vec_load_bndry ((const signed char *)0, 64); /* { dg-error "is not supported without -mvx" } */
+ __builtin_s390_vll ((unsigned int)0, (const void *)8); /* { dg-error "is not supported without -mvx" } */
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-5.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-5.c
new file mode 100644
index 00000000000..2a66a04114a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-5.c
@@ -0,0 +1,10 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-O3 -march=z13 -mno-zvector" } */
+
+__attribute__ ((target("zvector")))
+void a1(void)
+{ /* { dg-error "is not supported by attribute" } */
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-6.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-6.c
new file mode 100644
index 00000000000..531dec24edb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-6.c
@@ -0,0 +1,36 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mno-warn-dynamicstack" } */
+
+#pragma GCC target("warn-dynamicstack")
+void p1(int s)
+{
+ char b[s];
+} /* { dg-warning "uses dynamic stack allocation" } */
+#pragma GCC reset_options
+
+#pragma GCC target("no-warn-dynamicstack")
+void p0(int s)
+{
+ char b[s];
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("warn-dynamicstack")))
+void a1(int s)
+{
+ char b[s];
+} /* { dg-warning "uses dynamic stack allocation" } */
+
+__attribute__ ((target("no-warn-dynamicstack")))
+void a0(int s)
+{
+ char b[s];
+}
+
+void d(int s)
+{
+ char b[s];
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-7.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-7.c
new file mode 100644
index 00000000000..906979e9868
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-7.c
@@ -0,0 +1,36 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mwarn-framesize=0" } */
+
+#pragma GCC target("warn-framesize=1024")
+void p1(void)
+{
+ char b[1025];
+} /* { dg-warning "frame size" } */
+#pragma GCC reset_options
+
+#pragma GCC target("warn-framesize=0")
+void p0(void)
+{
+ char b[1025];
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("warn-framesize=1024")))
+void a1(void)
+{
+ char b[1025];
+} /* { dg-warning "frame size" } */
+
+__attribute__ ((target("warn-framesize=0")))
+void a0(void)
+{
+ char b[1025];
+}
+
+void d(void)
+{
+ char b[1025];
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-8.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-8.c
new file mode 100644
index 00000000000..512bafebc3f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-8.c
@@ -0,0 +1,22 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mno-backchain -march=z13 -mzarch -O0" } */
+
+#include <stdio.h>
+
+#pragma GCC target("backchain")
+void p1(void)
+{
+ printf ((void *)0);
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("backchain")))
+void a1(void)
+{
+ printf ((void *)0);
+}
+
+/* { dg-final { scan-assembler-times "\tlg?r\t%r14,%r15" 2 } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-9.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-9.c
new file mode 100644
index 00000000000..b92e6878f0e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-9.c
@@ -0,0 +1,22 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mbackchain -march=z13 -mzarch -O0" } */
+
+#include <stdio.h>
+
+#pragma GCC target("no-backchain")
+void p0(void)
+{
+ printf ((void *)0);
+}
+#pragma GCC reset_options
+
+__attribute__ ((target("no-backchain")))
+void a0(void)
+{
+ printf ((void *)0);
+}
+
+/* { dg-final { scan-assembler-not "\tlg?r\t%r14,%r15" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-1.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-1.c
new file mode 100644
index 00000000000..ded08854a98
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-1.c
@@ -0,0 +1,160 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mdebug -march=z13" } */
+
+/**
+ ** no pragma
+ **/
+
+void fn_p0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_1 tu9" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_p0_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_2 tu8" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_p0_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_3 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_p0_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_p0_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_5 tu7" } } */
+
+/**
+ ** arch pragma
+ **/
+
+#pragma GCC target ("arch=z9-ec")
+
+void fn_pa_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_1 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_1 tu5" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pa_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_2 tu8" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pa_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_3 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pa_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pa_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_5 tu7" } } */
+
+#pragma GCC reset_options
+
+/**
+ ** tune pragma
+ **/
+
+#pragma GCC target ("tune=z9-109")
+
+void fn_pt_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_1 tu4" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pt_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_2 tu4" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pt_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_3 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pt_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pt_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_5 tu7" } } */
+
+#pragma GCC reset_options
+
+/**
+ ** arch and tune pragmas
+ **/
+
+#pragma GCC target ("arch=z9-ec,tune=z9-109")
+
+void fn_pat_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_1 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_1 tu4" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pat_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_2 tu4" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pat_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_3 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pat_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pat_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_5 tu7" } } */
+
+#pragma GCC reset_options
+
+/**
+ ** tune and arch pragmas
+ **/
+
+#pragma GCC target ("tune=z9-109,arch=z9-ec")
+
+void fn_pta_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_1 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_1 tu4" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pta_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_2 tu4" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pta_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_3 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pta_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pta_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_5 tu7" } } */
+
+#pragma GCC reset_options
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-2.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-2.c
new file mode 100644
index 00000000000..d21a522eeb8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-arch-tune-2.c
@@ -0,0 +1,160 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-mdebug -march=z13 -mtune=z10" } */
+
+/**
+ ** no pragma
+ **/
+
+void fn_p0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_1 tu6" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_p0_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_2 tu6" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_p0_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_3 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_p0_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_p0_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_p0_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_p0_5 tu7" } } */
+
+/**
+ ** arch pragma
+ **/
+
+#pragma GCC target ("arch=z9-ec")
+
+void fn_pa_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_1 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_1 tu6" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pa_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_2 tu6" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pa_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_3 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pa_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pa_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pa_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pa_5 tu7" } } */
+
+#pragma GCC reset_options
+
+/**
+ ** tune pragma
+ **/
+
+#pragma GCC target ("tune=z9-109")
+
+void fn_pt_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_1 tu4" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pt_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_2 tu4" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pt_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_3 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pt_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pt_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pt_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pt_5 tu7" } } */
+
+#pragma GCC reset_options
+
+/**
+ ** arch and tune pragmas
+ **/
+
+#pragma GCC target ("arch=z9-ec,tune=z9-109")
+
+void fn_pat_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_1 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_1 tu4" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pat_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_2 tu4" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pat_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_3 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pat_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pat_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pat_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pat_5 tu7" } } */
+
+#pragma GCC reset_options
+
+/**
+ ** tune and arch pragmas
+ **/
+
+#pragma GCC target ("tune=z9-109,arch=z9-ec")
+
+void fn_pta_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_1 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_1 tu4" } } */
+
+__attribute__ ((target("arch=zEC12")))
+void fn_pta_2 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_2 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_2 tu4" } } */
+
+__attribute__ ((target("tune=z196")))
+void fn_pta_3 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_3 ar5" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_3 tu7" } } */
+
+__attribute__ ((target("arch=zEC12,tune=z196")))
+void fn_pta_4 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_4 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_4 tu7" } } */
+
+__attribute__ ((target("tune=z196,arch=zEC12")))
+void fn_pta_5 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pta_5 ar8" } } */
+/* { dg-final { scan-assembler "fn:fn_pta_5 tu7" } } */
+
+#pragma GCC reset_options
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c
new file mode 100644
index 00000000000..2dbb462ee08
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-1.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mno-vx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("arch=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("arch=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("arch=z10,arch=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("arch=z13,arch=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("arch=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("arch=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("arch=z10")
+#pragma GCC target ("arch=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+#pragma GCC target ("arch=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c
new file mode 100644
index 00000000000..edae1efe710
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-10.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("branch-cost=1")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("branch-cost=2")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("branch-cost=2,branch-cost=1")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("branch-cost=1,branch-cost=2")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("branch-cost=2")
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c
new file mode 100644
index 00000000000..4b66d736882
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-11.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("warn-framesize=512")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("warn-framesize=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("warn-framesize=0,warn-framesize=512")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("warn-framesize=512,warn-framesize=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("warn-framesize=0")
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c
new file mode 100644
index 00000000000..515f504399f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-12.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("warn-framesize=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("warn-framesize=512")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("warn-framesize=512,warn-framesize=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("warn-framesize=0,warn-framesize=512")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("warn-framesize=512")
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c
new file mode 100644
index 00000000000..ef0914eb3dd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-13.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mno-packed-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("backchain")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-backchain")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-backchain,backchain")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("backchain,no-backchain")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("backchain")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-backchain")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-backchain")
+#pragma GCC target ("backchain")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+#pragma GCC target ("no-backchain")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c
new file mode 100644
index 00000000000..7a7cb362706
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-14.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-backchain")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("backchain")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("backchain,no-backchain")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-backchain,backchain")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-backchain")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("backchain")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("backchain")
+#pragma GCC target ("no-backchain")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+#pragma GCC target ("backchain")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c
new file mode 100644
index 00000000000..e1987c0e313
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-15.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("hard-dfp")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-hard-dfp")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-hard-dfp,hard-dfp")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("hard-dfp,no-hard-dfp")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("hard-dfp")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-hard-dfp")
+#pragma GCC target ("hard-dfp")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c
new file mode 100644
index 00000000000..b99a5f3e9f3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-16.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -mhard-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-hard-dfp")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("hard-dfp")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("hard-dfp,no-hard-dfp")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-hard-dfp,hard-dfp")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("hard-dfp")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("hard-dfp")
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+#pragma GCC target ("hard-dfp")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c
new file mode 100644
index 00000000000..73e02286769
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-17.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mno-hard-dfp -mno-backchain -mhard-float -mno-vx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("hard-float")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("soft-float")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("soft-float,hard-float")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("hard-float,soft-float")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("hard-float")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("soft-float")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("soft-float")
+#pragma GCC target ("hard-float")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+#pragma GCC target ("soft-float")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c
new file mode 100644
index 00000000000..63407a088b7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-18.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("soft-float")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("hard-float")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("hard-float,soft-float")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("soft-float,hard-float")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("soft-float")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("hard-float")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("hard-float")
+#pragma GCC target ("soft-float")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+#pragma GCC target ("hard-float")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c
new file mode 100644
index 00000000000..b0ace81763b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-19.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("htm")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-htm")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-htm,htm")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("htm,no-htm")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("htm")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-htm")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-htm")
+#pragma GCC target ("htm")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+#pragma GCC target ("no-htm")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c
new file mode 100644
index 00000000000..1e6713f9934
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-2.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("arch=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("arch=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("arch=z13,arch=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("arch=z10,arch=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("arch=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("arch=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("arch=z13")
+#pragma GCC target ("arch=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+#pragma GCC target ("arch=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c
new file mode 100644
index 00000000000..48fa677439b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-20.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-htm")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("htm")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("htm,no-htm")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-htm,htm")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-htm")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("htm")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("htm")
+#pragma GCC target ("no-htm")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+#pragma GCC target ("htm")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c
new file mode 100644
index 00000000000..e8a2cbad2a9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-21.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("vx")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-vx")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-vx,vx")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("vx,no-vx")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("vx")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-vx")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-vx")
+#pragma GCC target ("vx")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+#pragma GCC target ("no-vx")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c
new file mode 100644
index 00000000000..53f7c11c6ca
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-22.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -mhard-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-vx")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("vx")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("vx,no-vx")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-vx,vx")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-vx")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("vx")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("vx")
+#pragma GCC target ("no-vx")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+#pragma GCC target ("vx")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c
new file mode 100644
index 00000000000..79b0ac3893f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-23.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("packed-stack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-packed-stack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-packed-stack,packed-stack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("packed-stack,no-packed-stack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("packed-stack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-packed-stack")
+#pragma GCC target ("packed-stack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c
new file mode 100644
index 00000000000..8a7c6dc0763
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-24.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mno-backchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-packed-stack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("packed-stack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("packed-stack,no-packed-stack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-packed-stack,packed-stack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("packed-stack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("packed-stack")
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+#pragma GCC target ("packed-stack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c
new file mode 100644
index 00000000000..926846b1ada
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-25.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("small-exec")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-small-exec")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-small-exec,small-exec")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("small-exec,no-small-exec")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("small-exec")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-small-exec")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-small-exec")
+#pragma GCC target ("small-exec")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+#pragma GCC target ("no-small-exec")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c
new file mode 100644
index 00000000000..1c11b6d59f5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-26.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-small-exec")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("small-exec")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("small-exec,no-small-exec")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-small-exec,small-exec")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-small-exec")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("small-exec")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("small-exec")
+#pragma GCC target ("no-small-exec")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+#pragma GCC target ("small-exec")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c
new file mode 100644
index 00000000000..d93c7d4e278
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-27.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("mvcle")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-mvcle")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-mvcle,mvcle")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("mvcle,no-mvcle")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("mvcle")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-mvcle")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-mvcle")
+#pragma GCC target ("mvcle")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+#pragma GCC target ("no-mvcle")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c
new file mode 100644
index 00000000000..7eb069adcb1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-28.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-mvcle")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("mvcle")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("mvcle,no-mvcle")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-mvcle,mvcle")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-mvcle")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("mvcle")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("mvcle")
+#pragma GCC target ("no-mvcle")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+#pragma GCC target ("mvcle")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c
new file mode 100644
index 00000000000..2e38c6eb57e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-29.c
@@ -0,0 +1,177 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("zvector")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-zvector")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-zvector")
+#pragma GCC target ("zvector")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("zvector")
+#pragma GCC target ("no-zvector")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c
new file mode 100644
index 00000000000..77739cc3054
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-3.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("tune=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("tune=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("tune=z10,tune=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("tune=z13,tune=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("tune=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("tune=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("tune=z10")
+#pragma GCC target ("tune=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+#pragma GCC target ("tune=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c
new file mode 100644
index 00000000000..cc882fedf90
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-30.c
@@ -0,0 +1,177 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-zvector")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("zvector")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("zvector")
+#pragma GCC target ("no-zvector")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-zvector")
+#pragma GCC target ("zvector")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c
new file mode 100644
index 00000000000..1b16c8e5fda
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-31.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-warn-dynamicstack,warn-dynamicstack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+
+__attribute__ ((target ("warn-dynamicstack,no-warn-dynamicstack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-warn-dynamicstack")
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c
new file mode 100644
index 00000000000..cd0ef40a54a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-32.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("warn-dynamicstack,no-warn-dynamicstack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+
+__attribute__ ((target ("no-warn-dynamicstack,warn-dynamicstack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("warn-dynamicstack")
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c
new file mode 100644
index 00000000000..163f7221971
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-4.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("tune=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("tune=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("tune=z13,tune=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("tune=z10,tune=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("tune=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("tune=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("tune=z13")
+#pragma GCC target ("tune=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+#pragma GCC target ("tune=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c
new file mode 100644
index 00000000000..4ad1d085302
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-5.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-size=4096")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-size=2048")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-size=2048,stack-size=4096")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("stack-size=4096,stack-size=2048")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("stack-size=2048")
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c
new file mode 100644
index 00000000000..58ca6021385
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-6.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-size=2048")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-size=4096")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-size=4096,stack-size=2048")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("stack-size=2048,stack-size=4096")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("stack-size=4096")
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c
new file mode 100644
index 00000000000..2fc4c4f10e6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-7.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-guard=16")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-guard=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-guard=0,stack-guard=16")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("stack-guard=16,stack-guard=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("stack-guard=0")
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c
new file mode 100644
index 00000000000..1a4dcb7084e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-8.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mesa -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-guard=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-guard=16")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-guard=16,stack-guard=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("stack-guard=0,stack-guard=16")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("stack-guard=16")
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c
new file mode 100644
index 00000000000..d4304f91d33
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m31-9.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { ! lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m31 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("branch-cost=2")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("branch-cost=1")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("branch-cost=1,branch-cost=2")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("branch-cost=2,branch-cost=1")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("branch-cost=1")
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-1.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-1.c
new file mode 100644
index 00000000000..73003f0e4c3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-1.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mno-vx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("arch=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("arch=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("arch=z10,arch=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("arch=z13,arch=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("arch=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("arch=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("arch=z10")
+#pragma GCC target ("arch=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+#pragma GCC target ("arch=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z13")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-10.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-10.c
new file mode 100644
index 00000000000..7d33c89c93f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-10.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("branch-cost=1")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("branch-cost=2")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("branch-cost=2,branch-cost=1")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("branch-cost=1,branch-cost=2")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("branch-cost=2")
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=1")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-11.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-11.c
new file mode 100644
index 00000000000..4737e9cbf3b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-11.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("warn-framesize=512")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("warn-framesize=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("warn-framesize=0,warn-framesize=512")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("warn-framesize=512,warn-framesize=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("warn-framesize=0")
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=512")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-12.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-12.c
new file mode 100644
index 00000000000..71addb85dee
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-12.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("warn-framesize=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("warn-framesize=512")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("warn-framesize=512,warn-framesize=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("warn-framesize=0,warn-framesize=512")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("warn-framesize=512")
+#pragma GCC target ("warn-framesize=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+#pragma GCC target ("warn-framesize=512")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-framesize=0")
+__attribute__ ((target ("warn-framesize=512")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-13.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-13.c
new file mode 100644
index 00000000000..27e3ec52736
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-13.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mno-packed-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("backchain")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-backchain")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-backchain,backchain")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("backchain,no-backchain")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("backchain")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-backchain")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-backchain")
+#pragma GCC target ("backchain")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+#pragma GCC target ("no-backchain")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-14.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-14.c
new file mode 100644
index 00000000000..9eb0cc58323
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-14.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-backchain")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("backchain")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("backchain,no-backchain")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-backchain,backchain")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-backchain")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("backchain")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("backchain")
+#pragma GCC target ("no-backchain")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+#pragma GCC target ("backchain")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("no-backchain")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-backchain")
+__attribute__ ((target ("backchain")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-15.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-15.c
new file mode 100644
index 00000000000..3818ccdc57c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-15.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("hard-dfp")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-hard-dfp")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-hard-dfp,hard-dfp")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("hard-dfp,no-hard-dfp")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("hard-dfp")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-hard-dfp")
+#pragma GCC target ("hard-dfp")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-16.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-16.c
new file mode 100644
index 00000000000..16600294c3e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-16.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -mhard-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-hard-dfp")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("hard-dfp")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("hard-dfp,no-hard-dfp")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-hard-dfp,hard-dfp")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("hard-dfp")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("hard-dfp")
+#pragma GCC target ("no-hard-dfp")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+#pragma GCC target ("hard-dfp")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("no-hard-dfp")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-hard-dfp")
+__attribute__ ((target ("hard-dfp")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-17.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-17.c
new file mode 100644
index 00000000000..39e588d0b17
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-17.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mno-hard-dfp -mno-backchain -mhard-float -mno-vx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("hard-float")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("soft-float")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("soft-float,hard-float")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("hard-float,soft-float")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("hard-float")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("soft-float")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("soft-float")
+#pragma GCC target ("hard-float")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+#pragma GCC target ("soft-float")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("hard-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-18.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-18.c
new file mode 100644
index 00000000000..0b682425c80
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-18.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("soft-float")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("hard-float")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("hard-float,soft-float")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("soft-float,hard-float")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("soft-float")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("hard-float")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("hard-float")
+#pragma GCC target ("soft-float")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+#pragma GCC target ("hard-float")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("soft-float")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("soft-float")
+__attribute__ ((target ("hard-float")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-19.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-19.c
new file mode 100644
index 00000000000..408800208ef
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-19.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("htm")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-htm")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-htm,htm")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("htm,no-htm")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("htm")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-htm")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-htm")
+#pragma GCC target ("htm")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+#pragma GCC target ("no-htm")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-2.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-2.c
new file mode 100644
index 00000000000..55a86bf0bc1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-2.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("arch=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("arch=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("arch=z13,arch=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("arch=z10,arch=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("arch=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("arch=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("arch=z13")
+#pragma GCC target ("arch=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+#pragma GCC target ("arch=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("arch=z10")
+__attribute__ ((target ("arch=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-20.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-20.c
new file mode 100644
index 00000000000..d2b6566f8a5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-20.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-htm")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("htm")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("htm,no-htm")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-htm,htm")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-htm")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("htm")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("htm")
+#pragma GCC target ("no-htm")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+#pragma GCC target ("htm")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("no-htm")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-htm")
+__attribute__ ((target ("htm")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-21.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-21.c
new file mode 100644
index 00000000000..441e6bcb6ca
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-21.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("vx")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-vx")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-vx,vx")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("vx,no-vx")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("vx")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-vx")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-vx")
+#pragma GCC target ("vx")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+#pragma GCC target ("no-vx")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-22.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-22.c
new file mode 100644
index 00000000000..e954106fd04
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-22.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -mhard-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-vx")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("vx")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("vx,no-vx")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-vx,vx")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-vx")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("vx")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("vx")
+#pragma GCC target ("no-vx")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+#pragma GCC target ("vx")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("no-vx")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-vx")
+__attribute__ ((target ("vx")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-23.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-23.c
new file mode 100644
index 00000000000..6e6b37ac4b3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-23.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("packed-stack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-packed-stack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-packed-stack,packed-stack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("packed-stack,no-packed-stack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("packed-stack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-packed-stack")
+#pragma GCC target ("packed-stack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-24.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-24.c
new file mode 100644
index 00000000000..b97454fbac3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-24.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mno-backchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-packed-stack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("packed-stack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("packed-stack,no-packed-stack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-packed-stack,packed-stack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("packed-stack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("packed-stack")
+#pragma GCC target ("no-packed-stack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+#pragma GCC target ("packed-stack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("no-packed-stack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-packed-stack")
+__attribute__ ((target ("packed-stack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-25.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-25.c
new file mode 100644
index 00000000000..46c41ccc02b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-25.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("small-exec")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-small-exec")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-small-exec,small-exec")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("small-exec,no-small-exec")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("small-exec")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-small-exec")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-small-exec")
+#pragma GCC target ("small-exec")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+#pragma GCC target ("no-small-exec")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-26.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-26.c
new file mode 100644
index 00000000000..957d65810bc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-26.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-small-exec")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("small-exec")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("small-exec,no-small-exec")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-small-exec,small-exec")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-small-exec")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("small-exec")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("small-exec")
+#pragma GCC target ("no-small-exec")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+#pragma GCC target ("small-exec")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("no-small-exec")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-small-exec")
+__attribute__ ((target ("small-exec")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-27.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-27.c
new file mode 100644
index 00000000000..59b58121a22
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-27.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("mvcle")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-mvcle")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-mvcle,mvcle")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("mvcle,no-mvcle")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("mvcle")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-mvcle")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-mvcle")
+#pragma GCC target ("mvcle")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+#pragma GCC target ("no-mvcle")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-28.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-28.c
new file mode 100644
index 00000000000..77201274c06
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-28.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-mvcle")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("mvcle")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("mvcle,no-mvcle")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("no-mvcle,mvcle")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-mvcle")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("mvcle")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("mvcle")
+#pragma GCC target ("no-mvcle")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+#pragma GCC target ("mvcle")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("no-mvcle")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-mvcle")
+__attribute__ ((target ("mvcle")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-29.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-29.c
new file mode 100644
index 00000000000..c5bbfaf1c43
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-29.c
@@ -0,0 +1,177 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("zvector")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-zvector")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-zvector")
+#pragma GCC target ("zvector")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("zvector")
+#pragma GCC target ("no-zvector")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-3.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-3.c
new file mode 100644
index 00000000000..948da10d29b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-3.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("tune=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("tune=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("tune=z10,tune=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("tune=z13,tune=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("tune=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("tune=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("tune=z10")
+#pragma GCC target ("tune=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+#pragma GCC target ("tune=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z13")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-30.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-30.c
new file mode 100644
index 00000000000..6aa813b7ff5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-30.c
@@ -0,0 +1,177 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-zvector")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("zvector")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("zvector")
+#pragma GCC target ("no-zvector")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-zvector")
+#pragma GCC target ("zvector")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-31.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-31.c
new file mode 100644
index 00000000000..5227e9acdd6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-31.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("no-warn-dynamicstack,warn-dynamicstack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+
+__attribute__ ((target ("warn-dynamicstack,no-warn-dynamicstack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("no-warn-dynamicstack")
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-32.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-32.c
new file mode 100644
index 00000000000..5d9eef7afda
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-32.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("warn-dynamicstack,no-warn-dynamicstack")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+
+__attribute__ ((target ("no-warn-dynamicstack,warn-dynamicstack")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("warn-dynamicstack")
+#pragma GCC target ("no-warn-dynamicstack")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+#pragma GCC target ("warn-dynamicstack")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("no-warn-dynamicstack")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("no-warn-dynamicstack")
+__attribute__ ((target ("warn-dynamicstack")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-4.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-4.c
new file mode 100644
index 00000000000..9b50913e3d9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-4.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("tune=z10")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("tune=z13")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("tune=z13,tune=z10")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("tune=z10,tune=z13")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("tune=z10")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("tune=z13")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("tune=z13")
+#pragma GCC target ("tune=z10")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+#pragma GCC target ("tune=z13")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z10")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("tune=z10")
+__attribute__ ((target ("tune=z13")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-5.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-5.c
new file mode 100644
index 00000000000..bfc8803390c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-5.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-size=4096")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-size=2048")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-size=2048,stack-size=4096")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("stack-size=4096,stack-size=2048")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("stack-size=2048")
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=4096")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-6.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-6.c
new file mode 100644
index 00000000000..b3bc0f6f8b5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-6.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-size=2048")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-size=4096")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-size=4096,stack-size=2048")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("stack-size=2048,stack-size=4096")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("stack-size=4096")
+#pragma GCC target ("stack-size=2048")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+#pragma GCC target ("stack-size=4096")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=2048")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-size=2048")
+__attribute__ ((target ("stack-size=4096")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-7.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-7.c
new file mode 100644
index 00000000000..ac0b08d1a63
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-7.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-guard=16")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-guard=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-guard=0,stack-guard=16")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("stack-guard=16,stack-guard=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("stack-guard=0")
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=16")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-8.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-8.c
new file mode 100644
index 00000000000..9ceca50395e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-8.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z10 -mtune=z13 -mstack-size=2048 -mstack-guard=16 -mbranch-cost=1 -mwarn-framesize=512 -mno-hard-dfp -mbackchain -msoft-float -mno-vx -mno-htm -mno-packed-stack -msmall-exec -mno-zvector -mmvcle -mzarch -mno-warn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd0" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("stack-guard=0")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd0" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("stack-guard=16")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd0" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("stack-guard=16,stack-guard=0")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd0" } } */
+
+__attribute__ ((target ("stack-guard=0,stack-guard=16")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd0" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd0" } } */
+
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd0" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd0" } } */
+
+#pragma GCC target ("stack-guard=16")
+#pragma GCC target ("stack-guard=0")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+#pragma GCC target ("stack-guard=16")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=0")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd0" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("stack-guard=0")
+__attribute__ ((target ("stack-guard=16")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd0" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss2048" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg16" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf512" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd0" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-9.c b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-9.c
new file mode 100644
index 00000000000..ac6355561e2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tattr-m64-9.c
@@ -0,0 +1,353 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do assemble { target { lp64 } } } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-options "-save-temps -mdebug -m64 -march=z13 -mtune=z10 -mstack-size=4096 -mstack-guard=0 -mbranch-cost=2 -mwarn-framesize=0 -mhard-dfp -mno-backchain -mhard-float -mvx -mhtm -mpacked-stack -mno-small-exec -mzvector -mno-mvcle -mzarch -mwarn-dynamicstack" } */
+
+/**
+ **
+ ** Start
+ **
+ **/
+
+void fn_default_start (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_start ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_start wd1" } } */
+
+/**
+ **
+ ** Attribute
+ **
+ **/
+
+__attribute__ ((target ("branch-cost=2")))
+void fn_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1 wd1" } } */
+
+void fn_att_1_default (void) { }
+
+__attribute__ ((target ("branch-cost=1")))
+void fn_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0 wd1" } } */
+
+void fn_att_0_default (void) { }
+
+__attribute__ ((target ("branch-cost=1,branch-cost=2")))
+void fn_att_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_0_1 wd1" } } */
+
+__attribute__ ((target ("branch-cost=2,branch-cost=1")))
+void fn_att_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_att_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_att_1_0 wd1" } } */
+
+/**
+ **
+ ** Pragma
+ **
+ **/
+
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_1_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_default wd1" } } */
+
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0 wd1" } } */
+#pragma GCC reset_options
+
+void fn_pragma_0_default (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_default wd1" } } */
+
+#pragma GCC target ("branch-cost=1")
+#pragma GCC target ("branch-cost=2")
+void fn_pragma_0_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+#pragma GCC target ("branch-cost=1")
+void fn_pragma_1_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** Pragma and attribute
+ **
+ **/
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_1_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=2")))
+void fn_pragma_0_att_1 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_1 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_1_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_1_att_0 wd1" } } */
+#pragma GCC reset_options
+
+#pragma GCC target ("branch-cost=2")
+__attribute__ ((target ("branch-cost=1")))
+void fn_pragma_0_att_0 (void) { }
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 bc1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 se0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_pragma_0_att_0 wd1" } } */
+#pragma GCC reset_options
+
+/**
+ **
+ ** End
+ **
+ **/
+
+void fn_default_end (void) { }
+/* { dg-final { scan-assembler "fn:fn_default_end ar9" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end tu6" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ss4096" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end sg0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end bc2" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wf0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hd1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ba0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end hf1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end vx1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ht1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end ps1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end se0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end zv1" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end mv0" } } */
+/* { dg-final { scan-assembler "fn:fn_default_end wd1" } } */
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-1.c b/gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-1.c
new file mode 100644
index 00000000000..d471033a584
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-1.c
@@ -0,0 +1,62 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-require-effective-target vector } */
+/* { dg-options "-march=z900 -mno-vx -mzarch" } */
+
+#define V16 __attribute__ ((vector_size(16)))
+#pragma GCC push_options
+#pragma GCC target ("arch=z13,vx")
+__attribute__ ((noinline))
+void foo (char *d, int *off)
+{
+ typedef struct
+ {
+ char c;
+ V16 char vc;
+ } s_t;
+ s_t s = { 1,{ 0,11,22,33,44,55,66,77,88,99,101,111,121,131,141,151 }};
+ *off = __builtin_offsetof(s_t, vc);
+ __builtin_memcpy(d, &s.vc, 16);
+}
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=z13,no-vx")
+__attribute__ ((noinline))
+void bar (char *d, int *off)
+{
+ typedef struct
+ {
+ char c;
+ V16 char vc;
+ } s_t;
+ s_t s = { 1,{ 0,11,22,33,44,55,66,77,88,99,101,111,121,131,141,151 }};
+ *off = __builtin_offsetof(s_t, vc);
+ __builtin_memcpy(d, &s.vc, 16);
+}
+#pragma GCC pop_options
+
+int main(int argc, char **argv)
+{
+ char buf[16] = { 0 };
+ char buf2[16] = { 0 };
+ int off = 0;
+ int off2 = 0;
+ int rc;
+
+ rc = 0;
+ foo(buf, &off);
+ if (off != 8)
+ rc += 1;
+ if (buf[7] != 77)
+ rc += 2;
+ bar (buf2, &off2);
+ if (off2 != 16)
+ rc += 4;
+ if (buf2[6] != 66)
+ rc += 8;
+
+ return rc;
+}
diff --git a/gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-2.c b/gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-2.c
new file mode 100644
index 00000000000..a238dce1c2f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/target-attribute/tpragma-struct-vx-2.c
@@ -0,0 +1,62 @@
+/* Functional tests for the "target" attribute and pragma. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target target_attribute } */
+/* { dg-require-effective-target vector } */
+/* { dg-options "-march=z13 -mvx -mzarch" } */
+
+#define V16 __attribute__ ((vector_size(16)))
+#pragma GCC push_options
+#pragma GCC target ("arch=z900,no-vx")
+__attribute__ ((noinline))
+void foo (char *d, int *off)
+{
+ typedef struct
+ {
+ char c;
+ V16 char vc;
+ } s_t;
+ s_t s = { 1,{ 0,11,22,33,44,55,66,77,88,99,101,111,121,131,141,151 }};
+ *off = __builtin_offsetof(s_t, vc);
+ __builtin_memcpy(d, &s.vc, 16);
+}
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("no-vx")
+__attribute__ ((noinline))
+void bar (char *d, int *off)
+{
+ typedef struct
+ {
+ char c;
+ V16 char vc;
+ } s_t;
+ s_t s = { 1,{ 0,11,22,33,44,55,66,77,88,99,101,111,121,131,141,151 }};
+ *off = __builtin_offsetof(s_t, vc);
+ __builtin_memcpy(d, &s.vc, 16);
+}
+#pragma GCC pop_options
+
+int main(int argc, char **argv)
+{
+ char buf[16] = { 0 };
+ char buf2[16] = { 0 };
+ int off = 0;
+ int off2 = 0;
+ int rc;
+
+ rc = 0;
+ foo(buf, &off);
+ if (off != 16)
+ rc += 1;
+ if (buf[7] != 77)
+ rc += 2;
+ bar (buf2, &off2);
+ if (off2 != 16)
+ rc += 4;
+ if (buf2[6] != 66)
+ rc += 8;
+
+ return rc;
+}