diff options
author | Quentin Neill <quentin.neill.gnu@gmail.com> | 2010-11-10 22:02:34 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2010-11-10 22:02:34 +0000 |
commit | 94d13ad18df325e53e10c4ed44dde8b60c4f6708 (patch) | |
tree | 6b83a10f049fee21796c956345f2d360f24917f9 /gcc/testsuite | |
parent | 91afcfa30c1a15d759f8f59c9d1df403f196a5b6 (diff) | |
download | gcc-94d13ad18df325e53e10c4ed44dde8b60c4f6708.zip gcc-94d13ad18df325e53e10c4ed44dde8b60c4f6708.tar.gz gcc-94d13ad18df325e53e10c4ed44dde8b60c4f6708.tar.bz2 |
Add support for TBM.
2010-11-10 Quentin Neill <quentin.neill.gnu@gmail.com>
gcc/
* config.gcc (i[34567]86-*-*): Include tbmintrin.h.
(x86_64-*-*): Likewise.
* config/i386/cpuid.h: Define TBM bit.
* config/i386/driver-i386.c (host_detect_local_cpu): Define
and set has_tbm.
* config/i386/i386-c.c (ix86_target_macros_internal): Check
isa_flag for TBM.
* config/i386/i386.c (OPTION_MASK_ISA_TBM_SET): New.
(OPTION_MASK_ISA_TBM_UNSET): New.
(ix86_handle_option): Handle -mtbm.
(isa_opts): Add -mtbm.
(enum pta_flags): Add PTA_TBM.
(ix86_option_override_internal): Add TBM support.
(ix86_valid_target_attribute_inner_p): Handle -mtbm.
(IX86_BUILTIN_BEXTRI32): New for TBM intrinsic.
(IX86_BUILTIN_BEXTRI64): Likewise.
(bdesc_args): Add TBM intrinsics.
(ix86_expand_builtin): Add TBM specific case.
* config/i386/i386.h (TARGET_TBM): New for TBM.
* config/i386/i386.md (UNSPEC_BEXTRI): New for TBM.
(tbm_bextri_<mode>): Likewise.
(*tbm_blcfill_<mode>): Likewise.
(*tbm_blci_<mode>): Likewise.
(*tbm_blcic_<mode>): Likewise.
(*tbm_blcmsk_<mode>): Likewise.
(*tbm_blcs_<mode>): Likewise.
(*tbm_blsfill_<mode>): Likewise.
(*tbm_blsic_<mode>): Likewise.
(*tbm_t1mskc_<mode>): Likewise.
(*tbm_tzmsk_<mode>): Likewise.
* config/i386/i386.opt: Add -mtbm.
* config/i386/tbmintrin.h (__bextri_u32): New.
(__blcfill_u32): Likewise.
(__blci_u32): Likewise.
(__blcic_u32): Likewise.
(__blcmsk_u32): Likewise.
(__blcs_u32): Likewise.
(__blsfill_u32): Likewise.
(__blsic_u32): Likewise.
(__t1mskc_u32): Likewise.
(__tzmsk_u32): Likewise.
(__bextri_u64): Likewise.
(__blcfill_u64): Likewise.
(__blci_u64): Likewise.
(__blcic_u64): Likewise.
(__blcmsk_u64): Likewise.
(__blcs_u64): Likewise.
(__blsfill_u64): Likewise.
(__blsic_u64): Likewise.
(__t1mskc_u64): Likewise.
(__tzmsk_u64): Likewise.
* config/i386/x86intrin.h: Add TBM check and tbmintrin.h.
* doc/invoke.texi: Document -mtbm.
* doc/extend.texi: Document TBM built-in functions.
gcc/testsuite/
* g++.dg/other/i386-2.C: Add -mtbm.
* g++.dg/other/i386-3.C: Likewise.
* gcc.target/i386/funcspec-5.c: Add tbm and no-tbm targets.
* gcc.target/i386/funcspec-6.c: Likewise.
* gcc.target/i386/sse-12.c: Add -mtbm.
* gcc.target/i386/sse-13.c: Add -mtbm and test immediate
operand intrinsics.
* gcc.target/i386/sse-14.c: Likewise.
* gcc.target/i386/sse-22.c: Likewise.
* gcc.target/i386/sse-23.c: Likewise.
* gcc.target/i386/tbm-1.c: New file.
* gcc.target/i386/tbm-2.c: Likewise.
From-SVN: r166562
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/i386-2.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/i386-3.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/bmi-5.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/bmi-6.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/funcspec-5.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/funcspec-6.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-12.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-13.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-14.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-22.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-23.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/tbm-1.c | 74 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/tbm-2.c | 75 |
14 files changed, 216 insertions, 23 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bc71f3c..52507c0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,20 @@ 2010-11-10 Quentin Neill <quentin.neill.gnu@gmail.com> + * g++.dg/other/i386-2.C: Add -mtbm. + * g++.dg/other/i386-3.C: Likewise. + * gcc.target/i386/funcspec-5.c: Add tbm and no-tbm targets. + * gcc.target/i386/funcspec-6.c: Likewise. + * gcc.target/i386/sse-12.c: Add -mtbm. + * gcc.target/i386/sse-13.c: Add -mtbm and test immediate + operand intrinsics. + * gcc.target/i386/sse-14.c: Likewise. + * gcc.target/i386/sse-22.c: Likewise. + * gcc.target/i386/sse-23.c: Likewise. + * gcc.target/i386/tbm-1.c: New file. + * gcc.target/i386/tbm-2.c: Likewise. + +2010-11-10 Quentin Neill <quentin.neill.gnu@gmail.com> + * g++.dg/other/i386-2.C: Add -mbmi. * g++.dg/other/i386-3.C: Likewise. * gcc.target/i386/funcspec-5.c: Add bmi and no-bmi targets. diff --git a/gcc/testsuite/g++.dg/other/i386-2.C b/gcc/testsuite/g++.dg/other/i386-2.C index f0a382a..6f7ca84 100644 --- a/gcc/testsuite/g++.dg/other/i386-2.C +++ b/gcc/testsuite/g++.dg/other/i386-2.C @@ -1,9 +1,9 @@ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ -/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mbmi -mlwp -mfsgsbase -mrdrnd -mf16c" } */ +/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mbmi -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c" } */ /* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, abmintrin.h, - bmiintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h are usable with - -O -pedantic-errors. */ + bmiintrin.h, tbmintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h + are usable with -O -pedantic-errors. */ #include <x86intrin.h> diff --git a/gcc/testsuite/g++.dg/other/i386-3.C b/gcc/testsuite/g++.dg/other/i386-3.C index 4b27372..a8b2039 100644 --- a/gcc/testsuite/g++.dg/other/i386-3.C +++ b/gcc/testsuite/g++.dg/other/i386-3.C @@ -1,8 +1,8 @@ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ -/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mbmi -mlwp -mfsgsbase -mrdrnd -mf16c" } */ +/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mbmi -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c" } */ /* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, abmintrin.h, - bmiintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h are usable with - -O -fkeep-inline-functions. */ + bmiintrin.h, tbmintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h + are usable with -O -fkeep-inline-functions. */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/bmi-5.c b/gcc/testsuite/gcc.target/i386/bmi-5.c index b29c453..906bf21 100644 --- a/gcc/testsuite/gcc.target/i386/bmi-5.c +++ b/gcc/testsuite/gcc.target/i386/bmi-5.c @@ -1,6 +1,6 @@ /* { dg-do link } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O0 -mbmi" } */ +/* { dg-options "-O2 -mbmi" } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/bmi-6.c b/gcc/testsuite/gcc.target/i386/bmi-6.c index 5d4bcf4..a4489e0 100644 --- a/gcc/testsuite/gcc.target/i386/bmi-6.c +++ b/gcc/testsuite/gcc.target/i386/bmi-6.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "-O0 -mbmi" } */ +/* { dg-options "-O2 -mbmi" } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/funcspec-5.c b/gcc/testsuite/gcc.target/i386/funcspec-5.c index 5e07d85..1e18dcf 100644 --- a/gcc/testsuite/gcc.target/i386/funcspec-5.c +++ b/gcc/testsuite/gcc.target/i386/funcspec-5.c @@ -19,6 +19,7 @@ extern void test_sse4_2 (void) __attribute__((__target__("sse4.2"))); extern void test_sse4a (void) __attribute__((__target__("sse4a"))); extern void test_fma4 (void) __attribute__((__target__("fma4"))); extern void test_ssse3 (void) __attribute__((__target__("ssse3"))); +extern void test_tbm (void) __attribute__((__target__("tbm"))); extern void test_no_abm (void) __attribute__((__target__("no-abm"))); extern void test_no_aes (void) __attribute__((__target__("no-aes"))); @@ -36,6 +37,7 @@ extern void test_no_sse4_2 (void) __attribute__((__target__("no-sse4.2"))); extern void test_no_sse4a (void) __attribute__((__target__("no-sse4a"))); extern void test_no_fma4 (void) __attribute__((__target__("no-fma4"))); extern void test_no_ssse3 (void) __attribute__((__target__("no-ssse3"))); +extern void test_no_tbm (void) __attribute__((__target__("no-tbm"))); extern void test_arch_i386 (void) __attribute__((__target__("arch=i386"))); extern void test_arch_i486 (void) __attribute__((__target__("arch=i486"))); diff --git a/gcc/testsuite/gcc.target/i386/funcspec-6.c b/gcc/testsuite/gcc.target/i386/funcspec-6.c index 81c831c..92a3cb5 100644 --- a/gcc/testsuite/gcc.target/i386/funcspec-6.c +++ b/gcc/testsuite/gcc.target/i386/funcspec-6.c @@ -19,6 +19,7 @@ extern void test_sse4_2 (void) __attribute__((__target__("sse4.2"))); extern void test_sse4a (void) __attribute__((__target__("sse4a"))); extern void test_fma4 (void) __attribute__((__target__("fma4"))); extern void test_ssse3 (void) __attribute__((__target__("ssse3"))); +extern void test_tbm (void) __attribute__((__target__("tbm"))); extern void test_no_abm (void) __attribute__((__target__("no-abm"))); extern void test_no_aes (void) __attribute__((__target__("no-aes"))); @@ -36,6 +37,7 @@ extern void test_no_sse4_2 (void) __attribute__((__target__("no-sse4.2"))); extern void test_no_sse4a (void) __attribute__((__target__("no-sse4a"))); extern void test_no_fma4 (void) __attribute__((__target__("no-fma4"))); extern void test_no_ssse3 (void) __attribute__((__target__("no-ssse3"))); +extern void test_no_tbm (void) __attribute__((__target__("no-tbm"))); extern void test_arch_nocona (void) __attribute__((__target__("arch=nocona"))); extern void test_arch_core2 (void) __attribute__((__target__("arch=core2"))); diff --git a/gcc/testsuite/gcc.target/i386/sse-12.c b/gcc/testsuite/gcc.target/i386/sse-12.c index d59777b..fb53c3c 100644 --- a/gcc/testsuite/gcc.target/i386/sse-12.c +++ b/gcc/testsuite/gcc.target/i386/sse-12.c @@ -1,9 +1,9 @@ /* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, mm3dnow.h, - fma4intrin.h, abmintrin.h, bmiintrin.h, lwpintrin.h, + fma4intrin.h, abmintrin.h, bmiintrin.h, tbmintrin.h, lwpintrin.h, popcntintrin.h and mm_malloc.h are usable with -O -std=c89 -pedantic-errors. */ /* { dg-do compile } */ -/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mbmi -mlwp -mfsgsbase -mrdrnd -mf16c" } */ +/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mbmi -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c" } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/sse-13.c b/gcc/testsuite/gcc.target/i386/sse-13.c index 01809d0..6d84e3a 100644 --- a/gcc/testsuite/gcc.target/i386/sse-13.c +++ b/gcc/testsuite/gcc.target/i386/sse-13.c @@ -5,9 +5,9 @@ /* Test that the intrinsics compile with optimization. All of them are defined as inline functions in {,x,e,p,t,s,w,a,b,i}mmintrin.h, - xopintrin.h, abmintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h - that reference the proper builtin functions. Defining away - "extern" and "__inline" results in all of them being compiled as + xopintrin.h, abmintrin.h, tbmintrin.h, lwpintrin.h, popcntintrin.h + and mm3dnow.h that reference the proper builtin functions. Defining + away "extern" and "__inline" results in all of them being compiled as proper functions. */ #define extern @@ -141,4 +141,9 @@ #define __builtin_ia32_lwpins32(D2, D1, F) __builtin_ia32_lwpins32 (D2, D1, 1) #define __builtin_ia32_lwpins64(D2, D1, F) __builtin_ia32_lwpins64 (D2, D1, 1) +/* tbmintrin.h */ +#define __builtin_ia32_bextri_u32(X, Y) __builtin_ia32_bextri_u32 (X, 1) +#define __builtin_ia32_bextri_u64(X, Y) __builtin_ia32_bextri_u64 (X, 1) + + #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/sse-14.c b/gcc/testsuite/gcc.target/i386/sse-14.c index d256e68..41bde1b 100644 --- a/gcc/testsuite/gcc.target/i386/sse-14.c +++ b/gcc/testsuite/gcc.target/i386/sse-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -msse4a -maes -mpclmul -mpopcnt -mabm -mlwp -mfsgsbase -mrdrnd -mf16c" } */ +/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -msse4a -maes -mpclmul -mpopcnt -mabm -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c" } */ #include <mm_malloc.h> @@ -177,3 +177,9 @@ test_2 ( __lwpins32, unsigned char, unsigned int, unsigned int, 1) test_2 ( __lwpval64, void, unsigned long long, unsigned int, 1) test_2 ( __lwpins64, unsigned char, unsigned long long, unsigned int, 1) #endif + +/* tbmintrin.h */ +test_1 ( __bextri_u32, unsigned int, unsigned int, 1) +#ifdef __x86_64__ +test_1 ( __bextri_u64, unsigned long long, unsigned long long, 1) +#endif diff --git a/gcc/testsuite/gcc.target/i386/sse-22.c b/gcc/testsuite/gcc.target/i386/sse-22.c index bb0472d..e28164d 100644 --- a/gcc/testsuite/gcc.target/i386/sse-22.c +++ b/gcc/testsuite/gcc.target/i386/sse-22.c @@ -6,10 +6,10 @@ /* Test that the intrinsics compile without optimization. All of them are defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h, - xopintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h that - reference the proper builtin functions. Defining away "extern" and - "__inline" results in all of them being compiled as proper - functions. */ + xopintrin.h, tbmintrin.h, lwpintrin.h, popcntintrin.h and + mm3dnow.h that reference the proper builtin functions. Defining + away "extern" and "__inline" results in all of them being compiled as + proper functions. */ #define extern #define __inline @@ -39,7 +39,7 @@ #ifndef DIFFERENT_PRAGMAS -#pragma GCC target ("mmx,3dnow,sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,aes,pclmul,xop,popcnt,abm,lwp,fsgsbase,rdrnd,f16c") +#pragma GCC target ("mmx,3dnow,sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,aes,pclmul,xop,popcnt,abm,lwp,fsgsbase,rdrnd,f16c,tbm") #endif /* Following intrinsics require immediate arguments. They @@ -188,3 +188,13 @@ test_2 ( __lwpins64, unsigned char, unsigned long long, unsigned int, 1) test_1 (_cvtss_sh, unsigned short, float, 1) test_1 (_mm_cvtps_ph, __m128i, __m128, 1) test_1 (_mm256_cvtps_ph, __m128i, __m256, 1) + +/* tbmintrin.h (TBM). */ +#ifdef DIFFERENT_PRAGMAS +#pragma GCC target ("tbm") +#endif +#include <x86intrin.h> +test_1 ( __bextri_u32, unsigned int, unsigned int, 1) +#ifdef __x86_64__ +test_1 ( __bextri_u64, unsigned long long, unsigned long long, 1) +#endif diff --git a/gcc/testsuite/gcc.target/i386/sse-23.c b/gcc/testsuite/gcc.target/i386/sse-23.c index 0e15bb2..3d932e1 100644 --- a/gcc/testsuite/gcc.target/i386/sse-23.c +++ b/gcc/testsuite/gcc.target/i386/sse-23.c @@ -5,9 +5,9 @@ /* Test that the intrinsics compile with optimization. All of them are defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h, - xopintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h that - reference the proper builtin functions. Defining away "extern" and - "__inline" results in all of them being compiled as proper + xopintrin.h, lwpintrin.h, tbmintrin.h, popcntintrin.h and mm3dnow.h + that reference the proper builtin functions. Defining away "extern" + and "__inline" results in all of them being compiled as proper functions. */ #define extern @@ -141,7 +141,11 @@ #define __builtin_ia32_lwpins32(D2, D1, F) __builtin_ia32_lwpins32 (D2, D1, 1) #define __builtin_ia32_lwpins64(D2, D1, F) __builtin_ia32_lwpins64 (D2, D1, 1) -#pragma GCC target ("3dnow,sse4,sse4a,aes,pclmul,xop,abm,popcnt,lwp,fsgsbase,rdrnd,f16c") +/* tbmintrin.h */ +#define __builtin_ia32_bextri_u32(X, Y) __builtin_ia32_bextr_u32 (X, 1) +#define __builtin_ia32_bextri_u64(X, Y) __builtin_ia32_bextr_u64 (X, 1) + +#pragma GCC target ("3dnow,sse4,sse4a,aes,pclmul,xop,abm,popcnt,lwp,tbm,fsgsbase,rdrnd,f16c") #include <wmmintrin.h> #include <smmintrin.h> #include <mm3dnow.h> diff --git a/gcc/testsuite/gcc.target/i386/tbm-1.c b/gcc/testsuite/gcc.target/i386/tbm-1.c new file mode 100644 index 0000000..2c16d74 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/tbm-1.c @@ -0,0 +1,74 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtbm" } */ +/* { dg-final { scan-assembler "bextr\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "blcfill\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "blci\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "blcic\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "blcmsk\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "blcs\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "blsfill\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "blsic\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "t1mskc\[^\\n]*(%|)eax" } } */ +/* { dg-final { scan-assembler "tzmsk\[^\\n]*(%|)eax" } } */ + +#include <x86intrin.h> + +unsigned int +func_bextri32 (unsigned int X) +{ + return __bextri_u32 (X, 0x101); +} + +unsigned int +func_blcfill32 (unsigned int X) +{ + return __blcfill_u32 (X); +} + +unsigned int +func_blci32 (unsigned int X) +{ + return __blci_u32 (X); +} + +unsigned int +func_blcic32 (unsigned int X) +{ + return __blcic_u32 (X); +} + +unsigned int +func_blcmsk32 (unsigned int X) +{ + return __blcmsk_u32 (X); +} + +unsigned int +func_blcs32 (unsigned int X) +{ + return __blcs_u32 (X); +} + +unsigned int +func_blsfill32 (unsigned int X) +{ + return __blsfill_u32 (X); +} + +unsigned int +func_blsic32 (unsigned int X) +{ + return __blsic_u32 (X); +} + +unsigned int +func_t1mskc32 (unsigned int X) +{ + return __t1mskc_u32 (X); +} + +unsigned int +func_tzmsk32 (unsigned int X) +{ + return __tzmsk_u32 (X); +} diff --git a/gcc/testsuite/gcc.target/i386/tbm-2.c b/gcc/testsuite/gcc.target/i386/tbm-2.c new file mode 100644 index 0000000..447e0ab --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/tbm-2.c @@ -0,0 +1,75 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O2 -mtbm" } */ +/* { dg-final { scan-assembler "bextr\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "blcfill\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "blci\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "blcic\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "blcmsk\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "blcs\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "blsfill\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "blsic\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "t1mskc\[^\\n]*(%|)rax" } } */ +/* { dg-final { scan-assembler "tzmsk\[^\\n]*(%|)rax" } } */ + +#include <x86intrin.h> + +unsigned long long +func_bextri64 (unsigned long long X) +{ + return __bextri_u64 (X, 0x101); +} + +unsigned long long +func_blcfill64 (unsigned long long X) +{ + return __blcfill_u64 (X); +} + +unsigned long long +func_blci64 (unsigned long long X) +{ + return __blci_u64 (X); +} + +unsigned long long +func_blcic64 (unsigned long long X) +{ + return __blcic_u64 (X); +} + +unsigned long long +func_blcmsk64 (unsigned long long X) +{ + return __blcmsk_u64 (X); +} + +unsigned long long +func_blcs64 (unsigned long long X) +{ + return __blcs_u64 (X); +} + +unsigned long long +func_blsfill64 (unsigned long long X) +{ + return __blsfill_u64 (X); +} + +unsigned long long +func_blsic64 (unsigned long long X) +{ + return __blsic_u64 (X); +} + +unsigned long long +func_t1mskc64 (unsigned long long X) +{ + return __t1mskc_u64 (X); +} + +unsigned long long +func_tzmsk64 (unsigned long long X) +{ + return __tzmsk_u64 (X); +} |