From a3927ffb90429d9ac6bd73190063f8b922cfec45 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Mon, 8 Oct 2018 16:12:53 +0200 Subject: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests. 2018-10-08 Martin Liska * gcc.target/i386/i386.exp: Move procedures to target-supports.exp. * g++.target/i386/i386.exp: New file. * gcc.target/i386/mv*.C: Move here tests and remove target filter in these tests. From-SVN: r264929 --- gcc/testsuite/ChangeLog | 8 + gcc/testsuite/g++.target/i386/i386.exp | 43 ++ .../{g++.dg/ext => g++.target/i386}/mv1.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv10.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv11.C | 2 +- .../ext => g++.target/i386}/mv12-aux.cc | 0 .../{g++.dg/ext => g++.target/i386}/mv12.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv12.h | 0 .../{g++.dg/ext => g++.target/i386}/mv13.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv14.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv15.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv16.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv17.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv18.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv19.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv2.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv20.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv21.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv22.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv23.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv24.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv25.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv26.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv27.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv3.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv4.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv5.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv6.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv7.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv8.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mv9.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mvc1.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mvc2.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mvc3.C | 2 +- .../{g++.dg/ext => g++.target/i386}/mvc4.C | 2 +- gcc/testsuite/gcc.target/i386/i386.exp | 471 ------------------ gcc/testsuite/lib/target-supports.exp | 470 +++++++++++++++++ 37 files changed, 552 insertions(+), 502 deletions(-) create mode 100644 gcc/testsuite/g++.target/i386/i386.exp rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv1.C (98%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv10.C (74%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv11.C (84%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12-aux.cc (100%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12.C (89%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12.h (100%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv13.C (86%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv14.C (93%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv15.C (93%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv16.C (97%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv17.C (97%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv18.C (78%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv19.C (79%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv2.C (97%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv20.C (79%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv21.C (78%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv22.C (79%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv23.C (79%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv24.C (91%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv25.C (91%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv26.C (82%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv27.C (82%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv3.C (93%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv4.C (89%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv5.C (88%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv6.C (89%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv7.C (80%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv8.C (57%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv9.C (80%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc1.C (88%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc2.C (88%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc3.C (88%) rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc4.C (88%) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9d495d48669..a4ee18f58d0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2018-10-08 Martin Liska + + * gcc.target/i386/i386.exp: Move procedures to + target-supports.exp. + * g++.target/i386/i386.exp: New file. + * gcc.target/i386/mv*.C: Move here tests and remove + target filter in these tests. + 2018-10-08 Cesar Philippidis * gfortran.dg/contiguous_4.f90: Adjust. diff --git a/gcc/testsuite/g++.target/i386/i386.exp b/gcc/testsuite/g++.target/i386/i386.exp new file mode 100644 index 00000000000..76a7e536f10 --- /dev/null +++ b/gcc/testsuite/g++.target/i386/i386.exp @@ -0,0 +1,43 @@ +# Copyright (C) 2018 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# GCC testsuite that uses the `g++.exp' driver. + +# Exit immediately if this isn't a x86 target. +if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then { + return +} + +# Load support procs. +load_lib g++-dg.exp +load_lib clearcap.exp + +global DEFAULT_CXXFLAGS +if ![info exists DEFAULT_CXXFLAGS] then { + set DEFAULT_CXXFLAGS " -pedantic-errors" +} + +# Initialize `dg'. +dg-init +clearcap-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \ + "" $DEFAULT_CXXFLAGS + +# All done. +clearcap-finish +dg-finish diff --git a/gcc/testsuite/g++.dg/ext/mv1.C b/gcc/testsuite/g++.target/i386/mv1.C similarity index 98% rename from gcc/testsuite/g++.dg/ext/mv1.C rename to gcc/testsuite/g++.target/i386/mv1.C index 4eedbff7b23..fc713477c1e 100644 --- a/gcc/testsuite/g++.dg/ext/mv1.C +++ b/gcc/testsuite/g++.target/i386/mv1.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O2 -fPIC" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv10.C b/gcc/testsuite/g++.target/i386/mv10.C similarity index 74% rename from gcc/testsuite/g++.dg/ext/mv10.C rename to gcc/testsuite/g++.target/i386/mv10.C index 5dfe36372cb..07fbd0e9fd9 100644 --- a/gcc/testsuite/g++.dg/ext/mv10.C +++ b/gcc/testsuite/g++.target/i386/mv10.C @@ -1,4 +1,4 @@ -// { dg-do assemble { target i?86-*-* x86_64-*-* } } +// { dg-do assemble } // { dg-options "" } __attribute__((target ("popcnt"), used)) diff --git a/gcc/testsuite/g++.dg/ext/mv11.C b/gcc/testsuite/g++.target/i386/mv11.C similarity index 84% rename from gcc/testsuite/g++.dg/ext/mv11.C rename to gcc/testsuite/g++.target/i386/mv11.C index 1f5c576f0a7..58aaf50eb36 100644 --- a/gcc/testsuite/g++.dg/ext/mv11.C +++ b/gcc/testsuite/g++.target/i386/mv11.C @@ -1,4 +1,4 @@ -// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-do compile } // { dg-options "-msse2" } int foo () __attribute__ ((target("default"))); diff --git a/gcc/testsuite/g++.dg/ext/mv12-aux.cc b/gcc/testsuite/g++.target/i386/mv12-aux.cc similarity index 100% rename from gcc/testsuite/g++.dg/ext/mv12-aux.cc rename to gcc/testsuite/g++.target/i386/mv12-aux.cc diff --git a/gcc/testsuite/g++.dg/ext/mv12.C b/gcc/testsuite/g++.target/i386/mv12.C similarity index 89% rename from gcc/testsuite/g++.dg/ext/mv12.C rename to gcc/testsuite/g++.target/i386/mv12.C index 8b2e423404d..21569627250 100644 --- a/gcc/testsuite/g++.dg/ext/mv12.C +++ b/gcc/testsuite/g++.target/i386/mv12.C @@ -1,7 +1,7 @@ // Test case to check if multiversioning works as expected when the versions // are defined in different files. -// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-do run } // { dg-require-ifunc "" } // { dg-options "-O2" } // { dg-additional-sources "mv12-aux.cc" } diff --git a/gcc/testsuite/g++.dg/ext/mv12.h b/gcc/testsuite/g++.target/i386/mv12.h similarity index 100% rename from gcc/testsuite/g++.dg/ext/mv12.h rename to gcc/testsuite/g++.target/i386/mv12.h diff --git a/gcc/testsuite/g++.dg/ext/mv13.C b/gcc/testsuite/g++.target/i386/mv13.C similarity index 86% rename from gcc/testsuite/g++.dg/ext/mv13.C rename to gcc/testsuite/g++.target/i386/mv13.C index 5674d19c974..39d05c71bda 100644 --- a/gcc/testsuite/g++.dg/ext/mv13.C +++ b/gcc/testsuite/g++.target/i386/mv13.C @@ -1,7 +1,7 @@ // Test case to check if multiversioning functions that are extern "C" // generates errors. -// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-do compile } extern "C" __attribute__ ((target ("default"))) diff --git a/gcc/testsuite/g++.dg/ext/mv14.C b/gcc/testsuite/g++.target/i386/mv14.C similarity index 93% rename from gcc/testsuite/g++.dg/ext/mv14.C rename to gcc/testsuite/g++.target/i386/mv14.C index 1e7a1619698..ccebb3371fe 100644 --- a/gcc/testsuite/g++.dg/ext/mv14.C +++ b/gcc/testsuite/g++.target/i386/mv14.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O2 -fPIC -march=x86-64" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv15.C b/gcc/testsuite/g++.target/i386/mv15.C similarity index 93% rename from gcc/testsuite/g++.dg/ext/mv15.C rename to gcc/testsuite/g++.target/i386/mv15.C index c0beadf16ea..4e867f28a5a 100644 --- a/gcc/testsuite/g++.dg/ext/mv15.C +++ b/gcc/testsuite/g++.target/i386/mv15.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O2 -fPIC -march=x86-64" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv16.C b/gcc/testsuite/g++.target/i386/mv16.C similarity index 97% rename from gcc/testsuite/g++.dg/ext/mv16.C rename to gcc/testsuite/g++.target/i386/mv16.C index 3e7c228a7f1..1091868a29c 100644 --- a/gcc/testsuite/g++.dg/ext/mv16.C +++ b/gcc/testsuite/g++.target/i386/mv16.C @@ -2,7 +2,7 @@ // for Intel CPUs with the same internal GCC processor id // but slighly different sets of x86 extensions. -// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-do run } // { dg-require-ifunc "" } // { dg-options "-O2" } diff --git a/gcc/testsuite/g++.dg/ext/mv17.C b/gcc/testsuite/g++.target/i386/mv17.C similarity index 97% rename from gcc/testsuite/g++.dg/ext/mv17.C rename to gcc/testsuite/g++.target/i386/mv17.C index 87c13246ed2..fefbfaac6ff 100644 --- a/gcc/testsuite/g++.dg/ext/mv17.C +++ b/gcc/testsuite/g++.target/i386/mv17.C @@ -1,6 +1,6 @@ // Test case to check if Multiversioning works for BMI and BMI2. -// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-do run } // { dg-require-ifunc "" } // { dg-options "-O2" } diff --git a/gcc/testsuite/g++.dg/ext/mv18.C b/gcc/testsuite/g++.target/i386/mv18.C similarity index 78% rename from gcc/testsuite/g++.dg/ext/mv18.C rename to gcc/testsuite/g++.target/i386/mv18.C index 1f024de9b95..b62bc363d98 100644 --- a/gcc/testsuite/g++.dg/ext/mv18.C +++ b/gcc/testsuite/g++.target/i386/mv18.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-require-effective-target pie } */ /* { dg-options "-O2 -fPIE -pie" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv19.C b/gcc/testsuite/g++.target/i386/mv19.C similarity index 79% rename from gcc/testsuite/g++.dg/ext/mv19.C rename to gcc/testsuite/g++.target/i386/mv19.C index d1ea788745f..b014c2e730d 100644 --- a/gcc/testsuite/g++.dg/ext/mv19.C +++ b/gcc/testsuite/g++.target/i386/mv19.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-require-effective-target pie } */ /* { dg-options "-O2 -fPIE -pie -march=x86-64" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv2.C b/gcc/testsuite/g++.target/i386/mv2.C similarity index 97% rename from gcc/testsuite/g++.dg/ext/mv2.C rename to gcc/testsuite/g++.target/i386/mv2.C index d4f1f92c611..3013a2f6374 100644 --- a/gcc/testsuite/g++.dg/ext/mv2.C +++ b/gcc/testsuite/g++.target/i386/mv2.C @@ -1,6 +1,6 @@ /* Test case to check if Multiversioning chooses the correct dispatching order when versions are for various ISAs. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O2" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv20.C b/gcc/testsuite/g++.target/i386/mv20.C similarity index 79% rename from gcc/testsuite/g++.dg/ext/mv20.C rename to gcc/testsuite/g++.target/i386/mv20.C index 98f7408e1fc..ed8607e1432 100644 --- a/gcc/testsuite/g++.dg/ext/mv20.C +++ b/gcc/testsuite/g++.target/i386/mv20.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-require-effective-target pie } */ /* { dg-options "-O2 -fPIE -pie -march=x86-64" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv21.C b/gcc/testsuite/g++.target/i386/mv21.C similarity index 78% rename from gcc/testsuite/g++.dg/ext/mv21.C rename to gcc/testsuite/g++.target/i386/mv21.C index 9708ad95019..a99805f2868 100644 --- a/gcc/testsuite/g++.dg/ext/mv21.C +++ b/gcc/testsuite/g++.target/i386/mv21.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-require-effective-target static } */ /* { dg-options "-O2 -static" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv22.C b/gcc/testsuite/g++.target/i386/mv22.C similarity index 79% rename from gcc/testsuite/g++.dg/ext/mv22.C rename to gcc/testsuite/g++.target/i386/mv22.C index 2550136fdac..5e43de712c9 100644 --- a/gcc/testsuite/g++.dg/ext/mv22.C +++ b/gcc/testsuite/g++.target/i386/mv22.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-require-effective-target static } */ /* { dg-options "-O2 -static -march=x86-64" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv23.C b/gcc/testsuite/g++.target/i386/mv23.C similarity index 79% rename from gcc/testsuite/g++.dg/ext/mv23.C rename to gcc/testsuite/g++.target/i386/mv23.C index f00afb01f15..674a0ff4a61 100644 --- a/gcc/testsuite/g++.dg/ext/mv23.C +++ b/gcc/testsuite/g++.target/i386/mv23.C @@ -1,5 +1,5 @@ /* Test case to check if Multiversioning works. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-require-effective-target static } */ /* { dg-options "-O2 -static -march=x86-64" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv24.C b/gcc/testsuite/g++.target/i386/mv24.C similarity index 91% rename from gcc/testsuite/g++.dg/ext/mv24.C rename to gcc/testsuite/g++.target/i386/mv24.C index 58292a83392..f8736ccc9ab 100644 --- a/gcc/testsuite/g++.dg/ext/mv24.C +++ b/gcc/testsuite/g++.target/i386/mv24.C @@ -1,6 +1,6 @@ // Test case to check if Multiversioning works for AES -// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-do run } // { dg-require-ifunc "" } // { dg-options "-O2" } diff --git a/gcc/testsuite/g++.dg/ext/mv25.C b/gcc/testsuite/g++.target/i386/mv25.C similarity index 91% rename from gcc/testsuite/g++.dg/ext/mv25.C rename to gcc/testsuite/g++.target/i386/mv25.C index fd40eca59a5..2e2fcc38e50 100644 --- a/gcc/testsuite/g++.dg/ext/mv25.C +++ b/gcc/testsuite/g++.target/i386/mv25.C @@ -1,6 +1,6 @@ // Test case to check if Multiversioning works for PCLMUL -// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-do run } // { dg-require-ifunc "" } // { dg-options "-O2" } diff --git a/gcc/testsuite/g++.dg/ext/mv26.C b/gcc/testsuite/g++.target/i386/mv26.C similarity index 82% rename from gcc/testsuite/g++.dg/ext/mv26.C rename to gcc/testsuite/g++.target/i386/mv26.C index 1b455130e46..6693ca1f81a 100644 --- a/gcc/testsuite/g++.dg/ext/mv26.C +++ b/gcc/testsuite/g++.target/i386/mv26.C @@ -1,5 +1,5 @@ // PR c++/84059 -// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-do compile } // { dg-require-ifunc "" } template struct a diff --git a/gcc/testsuite/g++.dg/ext/mv27.C b/gcc/testsuite/g++.target/i386/mv27.C similarity index 82% rename from gcc/testsuite/g++.dg/ext/mv27.C rename to gcc/testsuite/g++.target/i386/mv27.C index 443a54be765..60fa8ca7f8c 100644 --- a/gcc/testsuite/g++.dg/ext/mv27.C +++ b/gcc/testsuite/g++.target/i386/mv27.C @@ -1,5 +1,5 @@ // PR c++/83911 -// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-do compile } // { dg-require-ifunc "" } class SimdFloat diff --git a/gcc/testsuite/g++.dg/ext/mv3.C b/gcc/testsuite/g++.target/i386/mv3.C similarity index 93% rename from gcc/testsuite/g++.dg/ext/mv3.C rename to gcc/testsuite/g++.target/i386/mv3.C index ec2aa1ffec2..4a57a523015 100644 --- a/gcc/testsuite/g++.dg/ext/mv3.C +++ b/gcc/testsuite/g++.target/i386/mv3.C @@ -9,7 +9,7 @@ with a direct call to the popcnt version of foo. Hence, this test should pass. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-options "-O2" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv4.C b/gcc/testsuite/g++.target/i386/mv4.C similarity index 89% rename from gcc/testsuite/g++.dg/ext/mv4.C rename to gcc/testsuite/g++.target/i386/mv4.C index ff1cc2f63f4..c4c4d68c4e4 100644 --- a/gcc/testsuite/g++.dg/ext/mv4.C +++ b/gcc/testsuite/g++.target/i386/mv4.C @@ -2,7 +2,7 @@ when the default version of a multiversioned function is absent and its pointer is taken. */ -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O2" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv5.C b/gcc/testsuite/g++.target/i386/mv5.C similarity index 88% rename from gcc/testsuite/g++.dg/ext/mv5.C rename to gcc/testsuite/g++.target/i386/mv5.C index fd62eee0155..6690a02a47f 100644 --- a/gcc/testsuite/g++.dg/ext/mv5.C +++ b/gcc/testsuite/g++.target/i386/mv5.C @@ -1,7 +1,7 @@ /* Test case to check if multiversioned functions are still generated if they are marked comdat with inline keyword. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O2" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv6.C b/gcc/testsuite/g++.target/i386/mv6.C similarity index 89% rename from gcc/testsuite/g++.dg/ext/mv6.C rename to gcc/testsuite/g++.target/i386/mv6.C index 2273065996b..766b6de39f8 100644 --- a/gcc/testsuite/g++.dg/ext/mv6.C +++ b/gcc/testsuite/g++.target/i386/mv6.C @@ -1,6 +1,6 @@ /* Test to check if member version multiversioning works correctly. */ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-options "-march=x86-64" } */ diff --git a/gcc/testsuite/g++.dg/ext/mv7.C b/gcc/testsuite/g++.target/i386/mv7.C similarity index 80% rename from gcc/testsuite/g++.dg/ext/mv7.C rename to gcc/testsuite/g++.target/i386/mv7.C index 64c04fac60f..2a7ce659cdb 100644 --- a/gcc/testsuite/g++.dg/ext/mv7.C +++ b/gcc/testsuite/g++.target/i386/mv7.C @@ -1,4 +1,4 @@ -// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-do compile } // { dg-options "" } __attribute__((target ("default"))) diff --git a/gcc/testsuite/g++.dg/ext/mv8.C b/gcc/testsuite/g++.target/i386/mv8.C similarity index 57% rename from gcc/testsuite/g++.dg/ext/mv8.C rename to gcc/testsuite/g++.target/i386/mv8.C index b49ef84f392..f25399d8a5f 100644 --- a/gcc/testsuite/g++.dg/ext/mv8.C +++ b/gcc/testsuite/g++.target/i386/mv8.C @@ -1,4 +1,4 @@ -// { dg-do compile { target i?86-*-* x86_64-*-* powerpc*-*-* aarch64*-*-* } } +// { dg-do compile } // { dg-options "" } __attribute__((target (11,12))) diff --git a/gcc/testsuite/g++.dg/ext/mv9.C b/gcc/testsuite/g++.target/i386/mv9.C similarity index 80% rename from gcc/testsuite/g++.dg/ext/mv9.C rename to gcc/testsuite/g++.target/i386/mv9.C index c59651e102a..876a7362220 100644 --- a/gcc/testsuite/g++.dg/ext/mv9.C +++ b/gcc/testsuite/g++.target/i386/mv9.C @@ -1,4 +1,4 @@ -// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-do compile } // { dg-options "" } void foo (); diff --git a/gcc/testsuite/g++.dg/ext/mvc1.C b/gcc/testsuite/g++.target/i386/mvc1.C similarity index 88% rename from gcc/testsuite/g++.dg/ext/mvc1.C rename to gcc/testsuite/g++.target/i386/mvc1.C index ff37238a4e0..b307d01ace6 100644 --- a/gcc/testsuite/g++.dg/ext/mvc1.C +++ b/gcc/testsuite/g++.target/i386/mvc1.C @@ -1,4 +1,4 @@ -/* { dg-do run { target i?86-*-* x86_64-*-* } } */ +/* { dg-do run} */ /* { dg-require-ifunc "" } */ __attribute__((target_clones("avx","arch=slm","arch=core-avx2","default"))) diff --git a/gcc/testsuite/g++.dg/ext/mvc2.C b/gcc/testsuite/g++.target/i386/mvc2.C similarity index 88% rename from gcc/testsuite/g++.dg/ext/mvc2.C rename to gcc/testsuite/g++.target/i386/mvc2.C index 1b8c6f4d6e9..7c1fb6518d0 100644 --- a/gcc/testsuite/g++.dg/ext/mvc2.C +++ b/gcc/testsuite/g++.target/i386/mvc2.C @@ -1,4 +1,4 @@ -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-do compile } */ /* { dg-require-ifunc "" } */ __attribute__((target_clones("avx","arch=slm","default"))) diff --git a/gcc/testsuite/g++.dg/ext/mvc3.C b/gcc/testsuite/g++.target/i386/mvc3.C similarity index 88% rename from gcc/testsuite/g++.dg/ext/mvc3.C rename to gcc/testsuite/g++.target/i386/mvc3.C index d32b2c93aa0..5d634fd7ea6 100644 --- a/gcc/testsuite/g++.dg/ext/mvc3.C +++ b/gcc/testsuite/g++.target/i386/mvc3.C @@ -1,4 +1,4 @@ -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-do compile } */ /* { dg-require-ifunc "" } */ __attribute__((target("avx"))) diff --git a/gcc/testsuite/g++.dg/ext/mvc4.C b/gcc/testsuite/g++.target/i386/mvc4.C similarity index 88% rename from gcc/testsuite/g++.dg/ext/mvc4.C rename to gcc/testsuite/g++.target/i386/mvc4.C index 6e18e560476..68df5e3e4d0 100644 --- a/gcc/testsuite/g++.dg/ext/mvc4.C +++ b/gcc/testsuite/g++.target/i386/mvc4.C @@ -1,4 +1,4 @@ -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-mavx" } */ diff --git a/gcc/testsuite/gcc.target/i386/i386.exp b/gcc/testsuite/gcc.target/i386/i386.exp index 91fa2a61af2..42bb7e693c1 100644 --- a/gcc/testsuite/gcc.target/i386/i386.exp +++ b/gcc/testsuite/gcc.target/i386/i386.exp @@ -25,477 +25,6 @@ if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then { load_lib gcc-dg.exp load_lib clearcap.exp -# Return 1 if attribute ms_hook_prologue is supported. -proc check_effective_target_ms_hook_prologue { } { - if { [check_no_compiler_messages ms_hook_prologue object { - void __attribute__ ((__ms_hook_prologue__)) foo (); - } ""] } { - return 1 - } else { - return 0 - } -} - -# Return 1 if 3dnow instructions can be compiled. -proc check_effective_target_3dnow { } { - return [check_no_compiler_messages 3dnow object { - typedef int __m64 __attribute__ ((__vector_size__ (8))); - typedef float __v2sf __attribute__ ((__vector_size__ (8))); - - __m64 _m_pfadd (__m64 __A, __m64 __B) - { - return (__m64) __builtin_ia32_pfadd ((__v2sf)__A, (__v2sf)__B); - } - } "-O2 -m3dnow" ] -} - -# Return 1 if sse3 instructions can be compiled. -proc check_effective_target_sse3 { } { - return [check_no_compiler_messages sse3 object { - typedef double __m128d __attribute__ ((__vector_size__ (16))); - typedef double __v2df __attribute__ ((__vector_size__ (16))); - - __m128d _mm_addsub_pd (__m128d __X, __m128d __Y) - { - return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y); - } - } "-O2 -msse3" ] -} - -# Return 1 if ssse3 instructions can be compiled. -proc check_effective_target_ssse3 { } { - return [check_no_compiler_messages ssse3 object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef int __v4si __attribute__ ((__vector_size__ (16))); - - __m128i _mm_abs_epi32 (__m128i __X) - { - return (__m128i) __builtin_ia32_pabsd128 ((__v4si)__X); - } - } "-O2 -mssse3" ] -} - -# Return 1 if aes instructions can be compiled. -proc check_effective_target_aes { } { - return [check_no_compiler_messages aes object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef long long __v2di __attribute__ ((__vector_size__ (16))); - - __m128i _mm_aesimc_si128 (__m128i __X) - { - return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X); - } - } "-O2 -maes" ] -} - -# Return 1 if vaes instructions can be compiled. -proc check_effective_target_vaes { } { - return [check_no_compiler_messages vaes object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef long long __v2di __attribute__ ((__vector_size__ (16))); - - __m128i _mm_aesimc_si128 (__m128i __X) - { - return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X); - } - } "-O2 -maes -mavx" ] -} - -# Return 1 if pclmul instructions can be compiled. -proc check_effective_target_pclmul { } { - return [check_no_compiler_messages pclmul object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef long long __v2di __attribute__ ((__vector_size__ (16))); - - __m128i pclmulqdq_test (__m128i __X, __m128i __Y) - { - return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X, - (__v2di)__Y, - 1); - } - } "-O2 -mpclmul" ] -} - -# Return 1 if vpclmul instructions can be compiled. -proc check_effective_target_vpclmul { } { - return [check_no_compiler_messages vpclmul object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef long long __v2di __attribute__ ((__vector_size__ (16))); - - __m128i pclmulqdq_test (__m128i __X, __m128i __Y) - { - return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X, - (__v2di)__Y, - 1); - } - } "-O2 -mpclmul -mavx" ] -} - -# Return 1 if sse4a instructions can be compiled. -proc check_effective_target_sse4a { } { - return [check_no_compiler_messages sse4a object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef long long __v2di __attribute__ ((__vector_size__ (16))); - - __m128i _mm_insert_si64 (__m128i __X,__m128i __Y) - { - return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y); - } - } "-O2 -msse4a" ] -} - -# Return 1 if fma4 instructions can be compiled. -proc check_effective_target_fma4 { } { - return [check_no_compiler_messages fma4 object { - typedef float __m128 __attribute__ ((__vector_size__ (16))); - typedef float __v4sf __attribute__ ((__vector_size__ (16))); - __m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) - { - return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A, - (__v4sf)__B, - (__v4sf)__C); - } - } "-O2 -mfma4" ] -} - -# Return 1 if fma instructions can be compiled. -proc check_effective_target_fma { } { - return [check_no_compiler_messages fma object { - typedef float __m128 __attribute__ ((__vector_size__ (16))); - typedef float __v4sf __attribute__ ((__vector_size__ (16))); - __m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) - { - return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A, - (__v4sf)__B, - (__v4sf)__C); - } - } "-O2 -mfma" ] -} - -# Return 1 if xop instructions can be compiled. -proc check_effective_target_xop { } { - return [check_no_compiler_messages xop object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef short __v8hi __attribute__ ((__vector_size__ (16))); - __m128i _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) - { - return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A, - (__v8hi)__B, - (__v8hi)__C); - } - } "-O2 -mxop" ] -} - -# Return 1 if lzcnt instruction can be compiled. -proc check_effective_target_lzcnt { } { - return [check_no_compiler_messages lzcnt object { - unsigned short _lzcnt (unsigned short __X) - { - return __builtin_clzs (__X); - } - } "-mlzcnt" ] -} - -# Return 1 if bmi instructions can be compiled. -proc check_effective_target_bmi { } { - return [check_no_compiler_messages bmi object { - unsigned int __bextr_u32 (unsigned int __X, unsigned int __Y) - { - return __builtin_ia32_bextr_u32 (__X, __Y); - } - } "-mbmi" ] -} - -# Return 1 if ADX instructions can be compiled. -proc check_effective_target_adx { } { - return [check_no_compiler_messages adx object { - unsigned char - _adxcarry_u32 (unsigned char __CF, unsigned int __X, - unsigned int __Y, unsigned int *__P) - { - return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P); - } - } "-madx" ] -} - -# Return 1 if rtm instructions can be compiled. -proc check_effective_target_rtm { } { - return [check_no_compiler_messages rtm object { - void - _rtm_xend (void) - { - return __builtin_ia32_xend (); - } - } "-mrtm" ] -} - -# Return 1 if avx512vl instructions can be compiled. -proc check_effective_target_avx512vl { } { - return [check_no_compiler_messages avx512vl object { - typedef long long __v4di __attribute__ ((__vector_size__ (32))); - __v4di - mm256_and_epi64 (__v4di __X, __v4di __Y) - { - __v4di __W; - return __builtin_ia32_pandq256_mask (__X, __Y, __W, -1); - } - } "-mavx512vl" ] -} - -# Return 1 if avx512cd instructions can be compiled. -proc check_effective_target_avx512cd { } { - return [check_no_compiler_messages avx512cd_trans object { - typedef long long __v8di __attribute__ ((__vector_size__ (64))); - __v8di - _mm512_conflict_epi64 (__v8di __W, __v8di __A) - { - return (__v8di) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, - (__v8di) __W, - -1); - } - } "-Wno-psabi -mavx512cd" ] -} - -# Return 1 if avx512er instructions can be compiled. -proc check_effective_target_avx512er { } { - return [check_no_compiler_messages avx512er_trans object { - typedef float __v16sf __attribute__ ((__vector_size__ (64))); - __v16sf - mm512_exp2a23_ps (__v16sf __X) - { - return __builtin_ia32_exp2ps_mask (__X, __X, -1, 4); - } - } "-Wno-psabi -mavx512er" ] -} - -# Return 1 if sha instructions can be compiled. -proc check_effective_target_sha { } { - return [check_no_compiler_messages sha object { - typedef long long __m128i __attribute__ ((__vector_size__ (16))); - typedef int __v4si __attribute__ ((__vector_size__ (16))); - - __m128i _mm_sha1msg1_epu32 (__m128i __X, __m128i __Y) - { - return (__m128i) __builtin_ia32_sha1msg1 ((__v4si)__X, - (__v4si)__Y); - } - } "-O2 -msha" ] -} - -# Return 1 if avx512dq instructions can be compiled. -proc check_effective_target_avx512dq { } { - return [check_no_compiler_messages avx512dq object { - typedef long long __v8di __attribute__ ((__vector_size__ (64))); - __v8di - _mm512_mask_mullo_epi64 (__v8di __W, __v8di __A, __v8di __B) - { - return (__v8di) __builtin_ia32_pmullq512_mask ((__v8di) __A, - (__v8di) __B, - (__v8di) __W, - -1); - } - } "-mavx512dq" ] -} - -# Return 1 if avx512bw instructions can be compiled. -proc check_effective_target_avx512bw { } { - return [check_no_compiler_messages avx512bw object { - typedef short __v32hi __attribute__ ((__vector_size__ (64))); - __v32hi - _mm512_mask_mulhrs_epi16 (__v32hi __W, __v32hi __A, __v32hi __B) - { - return (__v32hi) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, - (__v32hi) __B, - (__v32hi) __W, - -1); - } - } "-mavx512bw" ] -} - -# Return 1 if avx512ifma instructions can be compiled. -proc check_effective_target_avx512ifma { } { - return [check_no_compiler_messages avx512ifma object { - typedef long long __v8di __attribute__ ((__vector_size__ (64))); - __v8di - _mm512_madd52lo_epu64 (__v8di __X, __v8di __Y, __v8di __Z) - { - return (__v8di) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X, - (__v8di) __Y, - (__v8di) __Z, - -1); - } - } "-mavx512ifma" ] -} - -# Return 1 if avx512vbmi instructions can be compiled. -proc check_effective_target_avx512vbmi { } { - return [check_no_compiler_messages avx512vbmi object { - typedef char __v64qi __attribute__ ((__vector_size__ (64))); - __v64qi - _mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y) - { - return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X, - (__v64qi) __Y, - (__v64qi) __Y, - -1); - } - } "-mavx512vbmi" ] -} - -# Return 1 if avx512_4fmaps instructions can be compiled. -proc check_effective_target_avx5124fmaps { } { - return [check_no_compiler_messages avx5124fmaps object { - typedef float __v16sf __attribute__ ((__vector_size__ (64))); - typedef float __v4sf __attribute__ ((__vector_size__ (16))); - - __v16sf - _mm512_mask_4fmadd_ps (__v16sf __DEST, __v16sf __A, __v16sf __B, __v16sf __C, - __v16sf __D, __v16sf __E, __v4sf *__F) - { - return (__v16sf) __builtin_ia32_4fmaddps_mask ((__v16sf) __A, - (__v16sf) __B, - (__v16sf) __C, - (__v16sf) __D, - (__v16sf) __E, - (const __v4sf *) __F, - (__v16sf) __DEST, - 0xffff); - } - } "-mavx5124fmaps" ] -} - -# Return 1 if avx512_4vnniw instructions can be compiled. -proc check_effective_target_avx5124vnniw { } { - return [check_no_compiler_messages avx5124vnniw object { - typedef int __v16si __attribute__ ((__vector_size__ (64))); - typedef int __v4si __attribute__ ((__vector_size__ (16))); - - __v16si - _mm512_4dpwssd_epi32 (__v16si __A, __v16si __B, __v16si __C, - __v16si __D, __v16si __E, __v4si *__F) - { - return (__v16si) __builtin_ia32_vp4dpwssd ((__v16si) __B, - (__v16si) __C, - (__v16si) __D, - (__v16si) __E, - (__v16si) __A, - (const __v4si *) __F); - } - } "-mavx5124vnniw" ] -} - -# Return 1 if avx512_vpopcntdq instructions can be compiled. -proc check_effective_target_avx512vpopcntdq { } { - return [check_no_compiler_messages avx512vpopcntdq object { - typedef int __v16si __attribute__ ((__vector_size__ (64))); - - __v16si - _mm512_popcnt_epi32 (__v16si __A) - { - return (__v16si) __builtin_ia32_vpopcountd_v16si ((__v16si) __A); - } - } "-mavx512vpopcntdq" ] -} - -# Return 1 if 128 or 256-bit avx512_vpopcntdq instructions can be compiled. -proc check_effective_target_avx512vpopcntdqvl { } { - return [check_no_compiler_messages avx512vpopcntdqvl object { - typedef int __v8si __attribute__ ((__vector_size__ (32))); - - __v8si - _mm256_popcnt_epi32 (__v8si __A) - { - return (__v8si) __builtin_ia32_vpopcountd_v8si ((__v8si) __A); - } - } "-mavx512vpopcntdq -mavx512vl" ] -} - -# Return 1 if gfni instructions can be compiled. -proc check_effective_target_gfni { } { - return [check_no_compiler_messages gfni object { - typedef char __v16qi __attribute__ ((__vector_size__ (16))); - - __v16qi - _mm_gf2p8affineinv_epi64_epi8 (__v16qi __A, __v16qi __B, const int __C) - { - return (__v16qi) __builtin_ia32_vgf2p8affineinvqb_v16qi ((__v16qi) __A, - (__v16qi) __B, - 0); - } - } "-mgfni" ] -} - -# Return 1 if avx512vbmi2 instructions can be compiled. -proc check_effective_target_avx512vbmi2 { } { - return [check_no_compiler_messages avx512vbmi2 object { - typedef char __v16qi __attribute__ ((__vector_size__ (16))); - typedef unsigned long long __mmask16; - - __v16qi - _mm_mask_compress_epi8 (__v16qi __A, __mmask16 __B, __v16qi __C) - { - return (__v16qi) __builtin_ia32_compressqi128_mask((__v16qi)__C, - (__v16qi)__A, - (__mmask16)__B); - } - } "-mavx512vbmi2 -mavx512vl" ] -} - -# Return 1 if avx512vbmi2 instructions can be compiled. -proc check_effective_target_avx512vnni { } { - return [check_no_compiler_messages avx512vnni object { - typedef int __v16si __attribute__ ((__vector_size__ (64))); - - __v16si - _mm_mask_compress_epi8 (__v16si __A, __v16si __B, __v16si __C) - { - return (__v16si) __builtin_ia32_vpdpbusd_v16si ((__v16si)__A, - (__v16si)__B, - (__v16si)__C); - } - } "-mavx512vnni -mavx512f" ] -} - -# Return 1 if vaes instructions can be compiled. -proc check_effective_target_avx512vaes { } { - return [check_no_compiler_messages avx512vaes object { - - typedef int __v16si __attribute__ ((__vector_size__ (64))); - - __v32qi - _mm256_aesdec_epi128 (__v32qi __A, __v32qi __B) - { - return (__v32qi)__builtin_ia32_vaesdec_v32qi ((__v32qi) __A, (__v32qi) __B); - } - } "-mvaes" ] -} - -# Return 1 if vpclmulqdq instructions can be compiled. -proc check_effective_target_vpclmulqdq { } { - return [check_no_compiler_messages vpclmulqdq object { - typedef long long __v4di __attribute__ ((__vector_size__ (32))); - - __v4di - _mm256_clmulepi64_epi128 (__v4di __A, __v4di __B) - { - return (__v4di) __builtin_ia32_vpclmulqdq_v4di (__A, __B, 0); - } - } "-mvpclmulqdq -mavx512vl" ] -} - -# Return 1 if avx512_bitalg instructions can be compiled. -proc check_effective_target_avx512bitalg { } { - return [check_no_compiler_messages avx512bitalg object { - typedef short int __v32hi __attribute__ ((__vector_size__ (64))); - - __v32hi - _mm512_popcnt_epi16 (__v32hi __A) - { - return (__v32hi) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A); - } - } "-mavx512bitalg" ] -} - # If a testcase doesn't have special options, use these. global DEFAULT_CFLAGS if ![info exists DEFAULT_CFLAGS] then { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index b82c332ca8b..fd74c04d092 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -7296,6 +7296,476 @@ proc check_effective_target_f16c { } { } "-O2 -mf16c" ] } +proc check_effective_target_ms_hook_prologue { } { + if { [check_no_compiler_messages ms_hook_prologue object { + void __attribute__ ((__ms_hook_prologue__)) foo (); + } ""] } { + return 1 + } else { + return 0 + } +} + +# Return 1 if 3dnow instructions can be compiled. +proc check_effective_target_3dnow { } { + return [check_no_compiler_messages 3dnow object { + typedef int __m64 __attribute__ ((__vector_size__ (8))); + typedef float __v2sf __attribute__ ((__vector_size__ (8))); + + __m64 _m_pfadd (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pfadd ((__v2sf)__A, (__v2sf)__B); + } + } "-O2 -m3dnow" ] +} + +# Return 1 if sse3 instructions can be compiled. +proc check_effective_target_sse3 { } { + return [check_no_compiler_messages sse3 object { + typedef double __m128d __attribute__ ((__vector_size__ (16))); + typedef double __v2df __attribute__ ((__vector_size__ (16))); + + __m128d _mm_addsub_pd (__m128d __X, __m128d __Y) + { + return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y); + } + } "-O2 -msse3" ] +} + +# Return 1 if ssse3 instructions can be compiled. +proc check_effective_target_ssse3 { } { + return [check_no_compiler_messages ssse3 object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef int __v4si __attribute__ ((__vector_size__ (16))); + + __m128i _mm_abs_epi32 (__m128i __X) + { + return (__m128i) __builtin_ia32_pabsd128 ((__v4si)__X); + } + } "-O2 -mssse3" ] +} + +# Return 1 if aes instructions can be compiled. +proc check_effective_target_aes { } { + return [check_no_compiler_messages aes object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef long long __v2di __attribute__ ((__vector_size__ (16))); + + __m128i _mm_aesimc_si128 (__m128i __X) + { + return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X); + } + } "-O2 -maes" ] +} + +# Return 1 if vaes instructions can be compiled. +proc check_effective_target_vaes { } { + return [check_no_compiler_messages vaes object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef long long __v2di __attribute__ ((__vector_size__ (16))); + + __m128i _mm_aesimc_si128 (__m128i __X) + { + return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X); + } + } "-O2 -maes -mavx" ] +} + +# Return 1 if pclmul instructions can be compiled. +proc check_effective_target_pclmul { } { + return [check_no_compiler_messages pclmul object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef long long __v2di __attribute__ ((__vector_size__ (16))); + + __m128i pclmulqdq_test (__m128i __X, __m128i __Y) + { + return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X, + (__v2di)__Y, + 1); + } + } "-O2 -mpclmul" ] +} + +# Return 1 if vpclmul instructions can be compiled. +proc check_effective_target_vpclmul { } { + return [check_no_compiler_messages vpclmul object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef long long __v2di __attribute__ ((__vector_size__ (16))); + + __m128i pclmulqdq_test (__m128i __X, __m128i __Y) + { + return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X, + (__v2di)__Y, + 1); + } + } "-O2 -mpclmul -mavx" ] +} + +# Return 1 if sse4a instructions can be compiled. +proc check_effective_target_sse4a { } { + return [check_no_compiler_messages sse4a object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef long long __v2di __attribute__ ((__vector_size__ (16))); + + __m128i _mm_insert_si64 (__m128i __X,__m128i __Y) + { + return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y); + } + } "-O2 -msse4a" ] +} + +# Return 1 if fma4 instructions can be compiled. +proc check_effective_target_fma4 { } { + return [check_no_compiler_messages fma4 object { + typedef float __m128 __attribute__ ((__vector_size__ (16))); + typedef float __v4sf __attribute__ ((__vector_size__ (16))); + __m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) + { + return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A, + (__v4sf)__B, + (__v4sf)__C); + } + } "-O2 -mfma4" ] +} + +# Return 1 if fma instructions can be compiled. +proc check_effective_target_fma { } { + return [check_no_compiler_messages fma object { + typedef float __m128 __attribute__ ((__vector_size__ (16))); + typedef float __v4sf __attribute__ ((__vector_size__ (16))); + __m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) + { + return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A, + (__v4sf)__B, + (__v4sf)__C); + } + } "-O2 -mfma" ] +} + +# Return 1 if xop instructions can be compiled. +proc check_effective_target_xop { } { + return [check_no_compiler_messages xop object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef short __v8hi __attribute__ ((__vector_size__ (16))); + __m128i _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) + { + return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A, + (__v8hi)__B, + (__v8hi)__C); + } + } "-O2 -mxop" ] +} + +# Return 1 if lzcnt instruction can be compiled. +proc check_effective_target_lzcnt { } { + return [check_no_compiler_messages lzcnt object { + unsigned short _lzcnt (unsigned short __X) + { + return __builtin_clzs (__X); + } + } "-mlzcnt" ] +} + +# Return 1 if bmi instructions can be compiled. +proc check_effective_target_bmi { } { + return [check_no_compiler_messages bmi object { + unsigned int __bextr_u32 (unsigned int __X, unsigned int __Y) + { + return __builtin_ia32_bextr_u32 (__X, __Y); + } + } "-mbmi" ] +} + +# Return 1 if ADX instructions can be compiled. +proc check_effective_target_adx { } { + return [check_no_compiler_messages adx object { + unsigned char + _adxcarry_u32 (unsigned char __CF, unsigned int __X, + unsigned int __Y, unsigned int *__P) + { + return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P); + } + } "-madx" ] +} + +# Return 1 if rtm instructions can be compiled. +proc check_effective_target_rtm { } { + return [check_no_compiler_messages rtm object { + void + _rtm_xend (void) + { + return __builtin_ia32_xend (); + } + } "-mrtm" ] +} + +# Return 1 if avx512vl instructions can be compiled. +proc check_effective_target_avx512vl { } { + return [check_no_compiler_messages avx512vl object { + typedef long long __v4di __attribute__ ((__vector_size__ (32))); + __v4di + mm256_and_epi64 (__v4di __X, __v4di __Y) + { + __v4di __W; + return __builtin_ia32_pandq256_mask (__X, __Y, __W, -1); + } + } "-mavx512vl" ] +} + +# Return 1 if avx512cd instructions can be compiled. +proc check_effective_target_avx512cd { } { + return [check_no_compiler_messages avx512cd_trans object { + typedef long long __v8di __attribute__ ((__vector_size__ (64))); + __v8di + _mm512_conflict_epi64 (__v8di __W, __v8di __A) + { + return (__v8di) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A, + (__v8di) __W, + -1); + } + } "-Wno-psabi -mavx512cd" ] +} + +# Return 1 if avx512er instructions can be compiled. +proc check_effective_target_avx512er { } { + return [check_no_compiler_messages avx512er_trans object { + typedef float __v16sf __attribute__ ((__vector_size__ (64))); + __v16sf + mm512_exp2a23_ps (__v16sf __X) + { + return __builtin_ia32_exp2ps_mask (__X, __X, -1, 4); + } + } "-Wno-psabi -mavx512er" ] +} + +# Return 1 if sha instructions can be compiled. +proc check_effective_target_sha { } { + return [check_no_compiler_messages sha object { + typedef long long __m128i __attribute__ ((__vector_size__ (16))); + typedef int __v4si __attribute__ ((__vector_size__ (16))); + + __m128i _mm_sha1msg1_epu32 (__m128i __X, __m128i __Y) + { + return (__m128i) __builtin_ia32_sha1msg1 ((__v4si)__X, + (__v4si)__Y); + } + } "-O2 -msha" ] +} + +# Return 1 if avx512dq instructions can be compiled. +proc check_effective_target_avx512dq { } { + return [check_no_compiler_messages avx512dq object { + typedef long long __v8di __attribute__ ((__vector_size__ (64))); + __v8di + _mm512_mask_mullo_epi64 (__v8di __W, __v8di __A, __v8di __B) + { + return (__v8di) __builtin_ia32_pmullq512_mask ((__v8di) __A, + (__v8di) __B, + (__v8di) __W, + -1); + } + } "-mavx512dq" ] +} + +# Return 1 if avx512bw instructions can be compiled. +proc check_effective_target_avx512bw { } { + return [check_no_compiler_messages avx512bw object { + typedef short __v32hi __attribute__ ((__vector_size__ (64))); + __v32hi + _mm512_mask_mulhrs_epi16 (__v32hi __W, __v32hi __A, __v32hi __B) + { + return (__v32hi) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A, + (__v32hi) __B, + (__v32hi) __W, + -1); + } + } "-mavx512bw" ] +} + +# Return 1 if avx512ifma instructions can be compiled. +proc check_effective_target_avx512ifma { } { + return [check_no_compiler_messages avx512ifma object { + typedef long long __v8di __attribute__ ((__vector_size__ (64))); + __v8di + _mm512_madd52lo_epu64 (__v8di __X, __v8di __Y, __v8di __Z) + { + return (__v8di) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X, + (__v8di) __Y, + (__v8di) __Z, + -1); + } + } "-mavx512ifma" ] +} + +# Return 1 if avx512vbmi instructions can be compiled. +proc check_effective_target_avx512vbmi { } { + return [check_no_compiler_messages avx512vbmi object { + typedef char __v64qi __attribute__ ((__vector_size__ (64))); + __v64qi + _mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y) + { + return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X, + (__v64qi) __Y, + (__v64qi) __Y, + -1); + } + } "-mavx512vbmi" ] +} + +# Return 1 if avx512_4fmaps instructions can be compiled. +proc check_effective_target_avx5124fmaps { } { + return [check_no_compiler_messages avx5124fmaps object { + typedef float __v16sf __attribute__ ((__vector_size__ (64))); + typedef float __v4sf __attribute__ ((__vector_size__ (16))); + + __v16sf + _mm512_mask_4fmadd_ps (__v16sf __DEST, __v16sf __A, __v16sf __B, __v16sf __C, + __v16sf __D, __v16sf __E, __v4sf *__F) + { + return (__v16sf) __builtin_ia32_4fmaddps_mask ((__v16sf) __A, + (__v16sf) __B, + (__v16sf) __C, + (__v16sf) __D, + (__v16sf) __E, + (const __v4sf *) __F, + (__v16sf) __DEST, + 0xffff); + } + } "-mavx5124fmaps" ] +} + +# Return 1 if avx512_4vnniw instructions can be compiled. +proc check_effective_target_avx5124vnniw { } { + return [check_no_compiler_messages avx5124vnniw object { + typedef int __v16si __attribute__ ((__vector_size__ (64))); + typedef int __v4si __attribute__ ((__vector_size__ (16))); + + __v16si + _mm512_4dpwssd_epi32 (__v16si __A, __v16si __B, __v16si __C, + __v16si __D, __v16si __E, __v4si *__F) + { + return (__v16si) __builtin_ia32_vp4dpwssd ((__v16si) __B, + (__v16si) __C, + (__v16si) __D, + (__v16si) __E, + (__v16si) __A, + (const __v4si *) __F); + } + } "-mavx5124vnniw" ] +} + +# Return 1 if avx512_vpopcntdq instructions can be compiled. +proc check_effective_target_avx512vpopcntdq { } { + return [check_no_compiler_messages avx512vpopcntdq object { + typedef int __v16si __attribute__ ((__vector_size__ (64))); + + __v16si + _mm512_popcnt_epi32 (__v16si __A) + { + return (__v16si) __builtin_ia32_vpopcountd_v16si ((__v16si) __A); + } + } "-mavx512vpopcntdq" ] +} + +# Return 1 if 128 or 256-bit avx512_vpopcntdq instructions can be compiled. +proc check_effective_target_avx512vpopcntdqvl { } { + return [check_no_compiler_messages avx512vpopcntdqvl object { + typedef int __v8si __attribute__ ((__vector_size__ (32))); + + __v8si + _mm256_popcnt_epi32 (__v8si __A) + { + return (__v8si) __builtin_ia32_vpopcountd_v8si ((__v8si) __A); + } + } "-mavx512vpopcntdq -mavx512vl" ] +} + +# Return 1 if gfni instructions can be compiled. +proc check_effective_target_gfni { } { + return [check_no_compiler_messages gfni object { + typedef char __v16qi __attribute__ ((__vector_size__ (16))); + + __v16qi + _mm_gf2p8affineinv_epi64_epi8 (__v16qi __A, __v16qi __B, const int __C) + { + return (__v16qi) __builtin_ia32_vgf2p8affineinvqb_v16qi ((__v16qi) __A, + (__v16qi) __B, + 0); + } + } "-mgfni" ] +} + +# Return 1 if avx512vbmi2 instructions can be compiled. +proc check_effective_target_avx512vbmi2 { } { + return [check_no_compiler_messages avx512vbmi2 object { + typedef char __v16qi __attribute__ ((__vector_size__ (16))); + typedef unsigned long long __mmask16; + + __v16qi + _mm_mask_compress_epi8 (__v16qi __A, __mmask16 __B, __v16qi __C) + { + return (__v16qi) __builtin_ia32_compressqi128_mask((__v16qi)__C, + (__v16qi)__A, + (__mmask16)__B); + } + } "-mavx512vbmi2 -mavx512vl" ] +} + +# Return 1 if avx512vbmi2 instructions can be compiled. +proc check_effective_target_avx512vnni { } { + return [check_no_compiler_messages avx512vnni object { + typedef int __v16si __attribute__ ((__vector_size__ (64))); + + __v16si + _mm_mask_compress_epi8 (__v16si __A, __v16si __B, __v16si __C) + { + return (__v16si) __builtin_ia32_vpdpbusd_v16si ((__v16si)__A, + (__v16si)__B, + (__v16si)__C); + } + } "-mavx512vnni -mavx512f" ] +} + +# Return 1 if vaes instructions can be compiled. +proc check_effective_target_avx512vaes { } { + return [check_no_compiler_messages avx512vaes object { + + typedef int __v16si __attribute__ ((__vector_size__ (64))); + + __v32qi + _mm256_aesdec_epi128 (__v32qi __A, __v32qi __B) + { + return (__v32qi)__builtin_ia32_vaesdec_v32qi ((__v32qi) __A, (__v32qi) __B); + } + } "-mvaes" ] +} + +# Return 1 if vpclmulqdq instructions can be compiled. +proc check_effective_target_vpclmulqdq { } { + return [check_no_compiler_messages vpclmulqdq object { + typedef long long __v4di __attribute__ ((__vector_size__ (32))); + + __v4di + _mm256_clmulepi64_epi128 (__v4di __A, __v4di __B) + { + return (__v4di) __builtin_ia32_vpclmulqdq_v4di (__A, __B, 0); + } + } "-mvpclmulqdq -mavx512vl" ] +} + +# Return 1 if avx512_bitalg instructions can be compiled. +proc check_effective_target_avx512bitalg { } { + return [check_no_compiler_messages avx512bitalg object { + typedef short int __v32hi __attribute__ ((__vector_size__ (64))); + + __v32hi + _mm512_popcnt_epi16 (__v32hi __A) + { + return (__v32hi) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A); + } + } "-mavx512bitalg" ] +} + # Return 1 if C wchar_t type is compatible with char16_t. proc check_effective_target_wchar_t_char16_t_compatible { } { -- 2.30.2