gcc/testsuite/ChangeLog: * gcc.target/i386/avx10_1-kaddb-1.c: New test. * gcc.target/i386/avx10_1-kaddw-1.c: Ditto. * gcc.target/i386/avx10_1-kandb-1.c: Ditto. * gcc.target/i386/avx10_1-kandnb-1.c: Ditto. * gcc.target/i386/avx10_1-kmovb-1.c: Ditto. * gcc.target/i386/avx10_1-kmovb-2.c: Ditto. * gcc.target/i386/avx10_1-kmovb-3.c: Ditto. * gcc.target/i386/avx10_1-kmovb-4.c: Ditto. * gcc.target/i386/avx10_1-knotb-1.c: Ditto. * gcc.target/i386/avx10_1-korb-1.c: Ditto. * gcc.target/i386/avx10_1-kortestb-1.c: Ditto. * gcc.target/i386/avx10_1-kshiftlb-1.c: Ditto. * gcc.target/i386/avx10_1-kshiftrb-1.c: Ditto. * gcc.target/i386/avx10_1-ktestb-1.c: Ditto. * gcc.target/i386/avx10_1-ktestw-1.c: Ditto. * gcc.target/i386/avx10_1-kxnorb-1.c: Ditto. * gcc.target/i386/avx10_1-kxorb-1.c: Ditto. * gcc.target/i386/avx10_1-vfpclasssd-1.c: New test. * gcc.target/i386/avx10_1-vfpclassss-1.c: Ditto. * gcc.target/i386/avx10_1-vpextr-1.c: Ditto. * gcc.target/i386/avx10_1-vpinsr-1.c: Ditto. * gcc.target/i386/avx10_1-vrangesd-1.c: Ditto. * gcc.target/i386/avx10_1-vrangess-1.c: Ditto. * gcc.target/i386/avx10_1-vreducesd-1.c: Ditto. * gcc.target/i386/avx10_1-vreducess-1.c: Ditto. --- .../gcc.target/i386/avx10_1-kaddb-1.c | 12 +++++ .../gcc.target/i386/avx10_1-kaddw-1.c | 12 +++++ .../gcc.target/i386/avx10_1-kandb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-kandnb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-kmovb-1.c | 15 ++++++ .../gcc.target/i386/avx10_1-kmovb-2.c | 16 ++++++ .../gcc.target/i386/avx10_1-kmovb-3.c | 17 ++++++ .../gcc.target/i386/avx10_1-kmovb-4.c | 15 ++++++ .../gcc.target/i386/avx10_1-knotb-1.c | 15 ++++++ .../gcc.target/i386/avx10_1-korb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-kortestb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-kshiftlb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-kshiftrb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-ktestb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-ktestw-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-kxnorb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-kxorb-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-vfpclasssd-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-vfpclassss-1.c | 16 ++++++ .../gcc.target/i386/avx10_1-vpextr-1.c | 53 +++++++++++++++++++ .../gcc.target/i386/avx10_1-vpinsr-1.c | 33 ++++++++++++ .../gcc.target/i386/avx10_1-vrangesd-1.c | 26 +++++++++ .../gcc.target/i386/avx10_1-vrangess-1.c | 25 +++++++++ .../gcc.target/i386/avx10_1-vreducesd-1.c | 31 +++++++++++ .../gcc.target/i386/avx10_1-vreducess-1.c | 30 +++++++++++ 25 files changed, 492 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kaddb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kaddw-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kandb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kandnb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kmovb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kmovb-2.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kmovb-3.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kmovb-4.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-knotb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-korb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kortestb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kshiftlb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kshiftrb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-ktestb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-ktestw-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kxnorb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-kxorb-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vfpclasssd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vfpclassss-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vpextr-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vpinsr-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vrangesd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vrangess-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vreducesd-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx10_1-vreducess-1.c
diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kaddb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kaddb-1.c new file mode 100644 index 00000000000..6da7b497722 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kaddb-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kaddb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + __mmask8 k = _kadd_mask8 (11, 12); + asm volatile ("" : "+k" (k)); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kaddw-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kaddw-1.c new file mode 100644 index 00000000000..033b7005d71 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kaddw-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kaddw\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + __mmask16 k = _kadd_mask16 (11, 12); + asm volatile ("" : "+k" (k)); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kandb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kandb-1.c new file mode 100644 index 00000000000..5510a982c97 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kandb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kandb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2, k3; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (1) ); + __asm__( "kmovb %1, %0" : "=k" (k2) : "r" (2) ); + + k3 = _kand_mask8 (k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kandnb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kandnb-1.c new file mode 100644 index 00000000000..e57078074e0 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kandnb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kandnb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2, k3; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (1) ); + __asm__( "kmovb %1, %0" : "=k" (k2) : "r" (2) ); + + k3 = _kandn_mask8 (k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-1.c new file mode 100644 index 00000000000..15b9d9a5daa --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kmovb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> +volatile __mmask8 k1; + +void +avx10_1_test () +{ + __mmask8 k = _cvtu32_mask8 (11); + + asm volatile ("" : "+k" (k)); + k1 = k; +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-2.c b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-2.c new file mode 100644 index 00000000000..e4f73f0870e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-2.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kmovb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> +volatile __mmask8 k1; + +void +avx10_1_test () +{ + __mmask8 k0 = 11; + __mmask8 k = _load_mask8 (&k0); + + asm volatile ("" : "+k" (k)); + k1 = k; +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-3.c b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-3.c new file mode 100644 index 00000000000..47d4d1aafe2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-3.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kmovb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> +volatile __mmask8 k1 = 11; + +void +avx10_1_test () +{ + __mmask8 k0, k; + + _store_mask8 (&k, k1); + + asm volatile ("" : "+k" (k)); + k0 = k; +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-4.c b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-4.c new file mode 100644 index 00000000000..79effebdfc7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kmovb-4.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kmovb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> +volatile unsigned int i; + +void +avx10_1_test () +{ + __mmask8 k = 11; + + asm volatile ("" : "+k" (k)); + i = _cvtmask8_u32 (k); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-knotb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-knotb-1.c new file mode 100644 index 00000000000..4a353bcd921 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-knotb-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "knotb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (45) ); + + k2 = _knot_mask8 (k1); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-korb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-korb-1.c new file mode 100644 index 00000000000..c912bec1482 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-korb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "korb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2, k3; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (1) ); + __asm__( "kmovb %1, %0" : "=k" (k2) : "r" (2) ); + + k3 = _kor_mask8 (k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kortestb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kortestb-1.c new file mode 100644 index 00000000000..9c8783f0bc5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kortestb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -mavx10.1" } */ +/* { dg-final { scan-assembler-times "kortestb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 2 } } */ + +#include <immintrin.h> + +void +avx10_1_test () { + volatile __mmask8 k1; + __mmask8 k2; + + volatile unsigned char r __attribute__((unused)); + + r = _kortestc_mask8_u8(k1, k2); + r = _kortestz_mask8_u8(k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kshiftlb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kshiftlb-1.c new file mode 100644 index 00000000000..54e8cfd98a9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kshiftlb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kshiftlb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2; + unsigned int i = 5; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (1) ); + + k2 = _kshiftli_mask8 (k1, i); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kshiftrb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kshiftrb-1.c new file mode 100644 index 00000000000..625007fded0 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kshiftrb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kshiftrb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2; + unsigned int i = 5; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (1) ); + + k2 = _kshiftri_mask8 (k1, i); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-ktestb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-ktestb-1.c new file mode 100644 index 00000000000..5f4fe298bd6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-ktestb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -mavx10.1" } */ +/* { dg-final { scan-assembler-times "ktestb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 2 } } */ + +#include <immintrin.h> + +void +avx10_1_test () { + volatile __mmask8 k1; + __mmask8 k2; + + volatile unsigned char r __attribute__((unused)); + + r = _ktestc_mask8_u8(k1, k2); + r = _ktestz_mask8_u8(k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-ktestw-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-ktestw-1.c new file mode 100644 index 00000000000..c606abfb12b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-ktestw-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -mavx10.1" } */ +/* { dg-final { scan-assembler-times "ktestw\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 2 } } */ + +#include <immintrin.h> + +void +avx10_1_test () { + volatile __mmask16 k1; + __mmask16 k2; + + volatile unsigned char r __attribute__((unused)); + + r = _ktestc_mask16_u8(k1, k2); + r = _ktestz_mask16_u8(k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kxnorb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kxnorb-1.c new file mode 100644 index 00000000000..3abe56974bf --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kxnorb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kxnorb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2, k3; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (1) ); + __asm__( "kmovb %1, %0" : "=k" (k2) : "r" (2) ); + + k3 = _kxnor_mask8 (k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-kxorb-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-kxorb-1.c new file mode 100644 index 00000000000..a39604f038b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-kxorb-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "kxorb\[ \\t\]+\[^\{\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +void +avx10_1_test () +{ + volatile __mmask8 k1, k2, k3; + + __asm__( "kmovb %1, %0" : "=k" (k1) : "r" (1) ); + __asm__( "kmovb %1, %0" : "=k" (k2) : "r" (2) ); + + k3 = _kxor_mask8 (k1, k2); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vfpclasssd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vfpclasssd-1.c new file mode 100644 index 00000000000..dbfbe421889 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vfpclasssd-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vfpclasssd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vfpclasssd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\]\{%k\[0-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +volatile __m128d x128; +volatile __mmask8 m8; + +void extern +avx10_1_test (void) +{ + m8 = _mm_fpclass_sd_mask (x128, 13); + m8 = _mm_mask_fpclass_sd_mask (m8, x128, 13); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vfpclassss-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vfpclassss-1.c new file mode 100644 index 00000000000..20fd6d3c87b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vfpclassss-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vfpclassss\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vfpclassss\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\]\{%k\[0-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +volatile __m128 x128; +volatile __mmask8 m8; + +void extern +avx10_1_test (void) +{ + m8 = _mm_fpclass_ss_mask (x128, 13); + m8 = _mm_mask_fpclass_ss_mask (m8, x128, 13); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vpextr-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vpextr-1.c new file mode 100644 index 00000000000..32fa2efa696 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vpextr-1.c @@ -0,0 +1,53 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -mavx10.1" } */ + +typedef int v4si __attribute__((vector_size (16))); +typedef long long v2di __attribute__((vector_size (16))); + +unsigned int +f1 (v4si a) +{ + register v4si c __asm ("xmm16") = a; + asm volatile ("" : "+v" (c)); + v4si d = c; + return ((unsigned int *) &d)[3]; +} + +unsigned long long +f2 (v2di a) +{ + register v2di c __asm ("xmm16") = a; + asm volatile ("" : "+v" (c)); + v2di d = c; + return ((unsigned long long *) &d)[1]; +} + +unsigned long long +f3 (v4si a) +{ + register v4si c __asm ("xmm16") = a; + asm volatile ("" : "+v" (c)); + v4si d = c; + return ((unsigned int *) &d)[3]; +} + +void +f4 (v4si a, unsigned int *p) +{ + register v4si c __asm ("xmm16") = a; + asm volatile ("" : "+v" (c)); + v4si d = c; + *p = ((unsigned int *) &d)[3]; +} + +void +f5 (v2di a, unsigned long long *p) +{ + register v2di c __asm ("xmm16") = a; + asm volatile ("" : "+v" (c)); + v2di d = c; + *p = ((unsigned long long *) &d)[1]; +} + +/* { dg-final { scan-assembler-times "vpextrd\[^\n\r]*xmm16" 3 } } */ +/* { dg-final { scan-assembler-times "vpextrq\[^\n\r]*xmm16" 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vpinsr-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vpinsr-1.c new file mode 100644 index 00000000000..e473ddb64fc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vpinsr-1.c @@ -0,0 +1,33 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -mavx10.1" } */ + +typedef int v4si __attribute__((vector_size (16))); +typedef long long v2di __attribute__((vector_size (16))); + +v4si +f1 (v4si a, int b) +{ + register v4si c __asm ("xmm16") = a; + asm volatile ("" : "+v" (c)); + v4si d = c; + ((int *) &d)[3] = b; + c = d; + asm volatile ("" : "+v" (c)); + return c; +} + +/* { dg-final { scan-assembler "vpinsrd\[^\n\r]*xmm16" } } */ + +v2di +f2 (v2di a, long long b) +{ + register v2di c __asm ("xmm16") = a; + asm volatile ("" : "+v" (c)); + v2di d = c; + ((long long *) &d)[1] = b; + c = d; + asm volatile ("" : "+v" (c)); + return c; +} + +/* { dg-final { scan-assembler "vpinsrq\[^\n\r]*xmm16" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vrangesd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vrangesd-1.c new file mode 100644 index 00000000000..4a388643a52 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vrangesd-1.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vrangesd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangesd\[ \\t\]+\[^\$\n\]*\\$\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangesd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangesd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangesd\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangesd\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + + +#include <immintrin.h> + +volatile __m128d x1, x2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + x1 = _mm_range_sd (x1, x2, 3); + x1 = _mm_mask_range_sd (x1, m, x1, x2, 3); + x1 = _mm_maskz_range_sd (m, x1, x2, 3); + + x1 = _mm_range_round_sd (x1, x2, 3, _MM_FROUND_NO_EXC); + x1 = _mm_mask_range_round_sd (x1, m, x1, x2, 3, _MM_FROUND_NO_EXC); + x1 = _mm_maskz_range_round_sd (m, x1, x2, 3, _MM_FROUND_NO_EXC); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vrangess-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vrangess-1.c new file mode 100644 index 00000000000..f704ab95056 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vrangess-1.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vrangess\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangess\[ \\t\]+\[^\$\n\]*\\$\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangess\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangess\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangess\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vrangess\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +volatile __m128 x1, x2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + x1 = _mm_range_ss (x1, x2, 1); + x1 = _mm_mask_range_ss (x1, m, x1, x2, 1); + x1 = _mm_maskz_range_ss (m, x1, x2, 1); + + x1 = _mm_range_round_ss (x1, x2, 1, _MM_FROUND_NO_EXC); + x1 = _mm_mask_range_round_ss (x1, m, x1, x2, 1, _MM_FROUND_NO_EXC); + x1 = _mm_maskz_range_round_ss (m, x1, x2, 1, _MM_FROUND_NO_EXC); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vreducesd-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vreducesd-1.c new file mode 100644 index 00000000000..5953466c372 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vreducesd-1.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ + +/* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + + +#include <immintrin.h> + +#define IMM 123 + +volatile __m128d x1, x2, xx1, xx2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + xx1 = _mm_reduce_round_sd (xx1, xx2, IMM, _MM_FROUND_NO_EXC); + x1 = _mm_reduce_sd (x1, x2, IMM); + + xx1 = _mm_mask_reduce_round_sd(xx1, m, xx1, xx2, IMM, _MM_FROUND_NO_EXC); + x1 = _mm_mask_reduce_sd(x1, m, x1, x2, IMM); + + xx1 = _mm_maskz_reduce_round_sd(m, xx1, xx2, IMM, _MM_FROUND_NO_EXC); + x1 = _mm_maskz_reduce_sd(m, x1, x2, IMM); +} diff --git a/gcc/testsuite/gcc.target/i386/avx10_1-vreducess-1.c b/gcc/testsuite/gcc.target/i386/avx10_1-vreducess-1.c new file mode 100644 index 00000000000..edd7ec07923 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx10_1-vreducess-1.c @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx10.1 -O2" } */ +/* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ + +/* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ + +#include <immintrin.h> + +#define IMM 123 + +volatile __m128 x1, x2, xx1, xx2; +volatile __mmask8 m; + +void extern +avx10_1_test (void) +{ + xx1 = _mm_reduce_round_ss (xx1, xx2, IMM, _MM_FROUND_NO_EXC); + x1 = _mm_reduce_ss (x1, x2, IMM); + + xx1 = _mm_mask_reduce_round_ss (xx1, m, xx1, xx2, IMM, _MM_FROUND_NO_EXC); + x1 = _mm_mask_reduce_ss (x1, m, x1, x2, IMM); + + xx1 = _mm_maskz_reduce_round_ss (m, xx1, xx2, IMM, _MM_FROUND_NO_EXC); + x1 = _mm_maskz_reduce_ss (m, x1, x2, IMM); +} -- 2.31.1