summaryrefslogtreecommitdiff
path: root/gcc/config/i386/bmiintrin.h
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2016-10-20 19:53:10 +0200
committerUros Bizjak <uros@gcc.gnu.org>2016-10-20 19:53:10 +0200
commitf56ea76ecbc6b5bc9f6e11252cd1e8b4a566c66d (patch)
tree58bec3b64e32f525f8e43348a9eb8ef5cfbec28f /gcc/config/i386/bmiintrin.h
parent3e23d1bcc4d4b3daf48651d622404c88f9072fe7 (diff)
downloadgcc-f56ea76ecbc6b5bc9f6e11252cd1e8b4a566c66d.tar.gz
re PR target/78037 (Incorrect code generated at optimization level -O2 for tzcnt and binary and)
PR target/78037 * config/i386/bmiintrin.h (__tzcnt_u16): Call __builtin_ia32_tzcnt_u16. (__tzcnt_u32, _tzcnt_u32): Call __builtin_ia32_tzcnt_u32. (__tzcnt_u64, _tzcnt_u64): Call __builtin_ia32_tzcnt_u64. * config/i386/lzcntintrin.h (__lzcnt_u16): Call __builtin_ia32_lzcnt_u16. (__lzcnt_u32, _lzcnt_u32): Call __builtin_ia32_lzcnt_u32. (__lzcnt_u64, _lzcnt_u64): Call __builtin_ia32_lzcnt_u64. * config/i386/i386.md (UNSPEC_LZCNT, UNSPEC_TZCNT): New unspecs. (ctz<mode>2, *ctz<mode>2): Use SWI48 mode iterator. (bmi_tzcnt_<mode>): New expander. (*bmi_tzcnt_<mode>_falsedep_1): New define_insn_and_split pattern. (*bmi_tzcnt_<mode>_falsedep, *bmi_tzcnt_<mode>): New insn patterns. (clz<mode>2_lzcnt, *clz<mode>2_lzcnt): Use SWI48 mode iterator. (lzcnt_<mode>): New expander. (*lzcnt_<mode>_falsedep_1): New define_insn_and_split pattern. (*lzcnt_<mode>_falsedep, *lzcnt_<mode>): New insn patterns. * config/i386/i386-builtin-types.def (UINT_FTYPE_UINT): New. (UINT64_FTYPE_UINT64): New. * config/i386/i386-builtin.def (__builtin_clzs): Remove description. (__builtin_ia32_lzcnt_u16): New description. (__builtin_ia32_lzcnt_u32): Ditto. (__builtin_ia32_lzcnt_u64): Ditto. (__builtin_ctzs): Remove description. (__builtin_ia32_tzcnt_u16): New description. (__builtin_ia32_tzcnt_u32): Ditto. (__builtin_ia32_tzcnt_u64): Ditto. * config/i386/i386.c (ix86_expand_args_builtin): Handle UINT_FTYPE_UINT and UINT64_FTYPE_UINT64. testsuite/ChangeLog: PR target/78037 * gcc.target/i386/pr78037.c: New test. From-SVN: r241381
Diffstat (limited to 'gcc/config/i386/bmiintrin.h')
-rw-r--r--gcc/config/i386/bmiintrin.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/config/i386/bmiintrin.h b/gcc/config/i386/bmiintrin.h
index a838a927be9..3ebe6d7d508 100644
--- a/gcc/config/i386/bmiintrin.h
+++ b/gcc/config/i386/bmiintrin.h
@@ -37,7 +37,7 @@
extern __inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__tzcnt_u16 (unsigned short __X)
{
- return __builtin_ctzs (__X);
+ return __builtin_ia32_tzcnt_u16 (__X);
}
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -97,13 +97,13 @@ _blsr_u32 (unsigned int __X)
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__tzcnt_u32 (unsigned int __X)
{
- return __builtin_ctz (__X);
+ return __builtin_ia32_tzcnt_u32 (__X);
}
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_tzcnt_u32 (unsigned int __X)
{
- return __builtin_ctz (__X);
+ return __builtin_ia32_tzcnt_u32 (__X);
}
@@ -165,13 +165,13 @@ _blsr_u64 (unsigned long long __X)
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__tzcnt_u64 (unsigned long long __X)
{
- return __builtin_ctzll (__X);
+ return __builtin_ia32_tzcnt_u64 (__X);
}
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_tzcnt_u64 (unsigned long long __X)
{
- return __builtin_ctzll (__X);
+ return __builtin_ia32_tzcnt_u64 (__X);
}
#endif /* __x86_64__ */