diff options
author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-12-14 15:44:07 +0000 |
---|---|---|
committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-12-14 15:44:07 +0000 |
commit | 8eb56753ca3a81e9a65c7d08242a19a7823ff669 (patch) | |
tree | d9641cbc70d0dc56c7aba7f46076c0a69edc54ca | |
parent | bdf2e637b3dbf5fed245238cc80ad09c80863481 (diff) | |
download | gcc-8eb56753ca3a81e9a65c7d08242a19a7823ff669.tar.gz |
PR target/59874
* config/i386/i386.c (enum ix86_builtins): Add IX86_BUILTIN_CLZS
and IX86_BUILTIN_CTZS.
(bdesc_args): Add __builtin_clzs and __builtin_ctzs.
(ix86_fold_builtin): Handle IX86_BUILTIN_CTZS and IX86_BUILTIN_CLZS.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@243651 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 14 |
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e65dcc2fe0d..8b067fe4fe7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-12-14 Uros Bizjak <ubizjak@gmail.com> + + PR target/59874 + * config/i386/i386.c (enum ix86_builtins): Add IX86_BUILTIN_CLZS + and IX86_BUILTIN_CTZS. + (bdesc_args): Add __builtin_clzs and __builtin_ctzs. + (ix86_fold_builtin): Handle IX86_BUILTIN_CTZS and IX86_BUILTIN_CLZS. + 2016-12-14 Wilco Dijkstra <wdijkstr@arm.com> Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c0855c94a17..91f51d58cb7 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -32396,6 +32396,7 @@ enum ix86_builtins /* LZCNT */ IX86_BUILTIN_LZCNT16, + IX86_BUILTIN_CLZS, IX86_BUILTIN_LZCNT32, IX86_BUILTIN_LZCNT64, @@ -32422,6 +32423,7 @@ enum ix86_builtins IX86_BUILTIN_BEXTR32, IX86_BUILTIN_BEXTR64, IX86_BUILTIN_TZCNT16, + IX86_BUILTIN_CTZS, IX86_BUILTIN_TZCNT32, IX86_BUILTIN_TZCNT64, @@ -33813,6 +33815,8 @@ static const struct builtin_description bdesc_args[] = /* LZCNT */ { OPTION_MASK_ISA_LZCNT, CODE_FOR_lzcnt_hi, "__builtin_ia32_lzcnt_u16", IX86_BUILTIN_LZCNT16, UNKNOWN, (int) UINT16_FTYPE_UINT16 }, + /* Same as above, for backward compatibility. */ + { OPTION_MASK_ISA_LZCNT, CODE_FOR_lzcnt_hi, "__builtin_clzs", IX86_BUILTIN_CLZS, UNKNOWN, (int) UINT16_FTYPE_UINT16 }, { OPTION_MASK_ISA_LZCNT, CODE_FOR_lzcnt_si, "__builtin_ia32_lzcnt_u32", IX86_BUILTIN_LZCNT32, UNKNOWN, (int) UINT_FTYPE_UINT }, { OPTION_MASK_ISA_LZCNT | OPTION_MASK_ISA_64BIT, CODE_FOR_lzcnt_di, "__builtin_ia32_lzcnt_u64", IX86_BUILTIN_LZCNT64, UNKNOWN, (int) UINT64_FTYPE_UINT64 }, @@ -33821,6 +33825,8 @@ static const struct builtin_description bdesc_args[] = { OPTION_MASK_ISA_BMI | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi_bextr_di, "__builtin_ia32_bextr_u64", IX86_BUILTIN_BEXTR64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 }, { OPTION_MASK_ISA_BMI, CODE_FOR_bmi_tzcnt_hi, "__builtin_ia32_tzcnt_u16", IX86_BUILTIN_TZCNT16, UNKNOWN, (int) UINT16_FTYPE_UINT16 }, + /* Same as above, for backward compatibility. */ + { OPTION_MASK_ISA_BMI, CODE_FOR_bmi_tzcnt_hi, "__builtin_ctzs", IX86_BUILTIN_CTZS, UNKNOWN, (int) UINT16_FTYPE_UINT16 }, { OPTION_MASK_ISA_BMI, CODE_FOR_bmi_tzcnt_si, "__builtin_ia32_tzcnt_u32", IX86_BUILTIN_TZCNT32, UNKNOWN, (int) UINT_FTYPE_UINT }, { OPTION_MASK_ISA_BMI | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi_tzcnt_di, "__builtin_ia32_tzcnt_u64", IX86_BUILTIN_TZCNT64, UNKNOWN, (int) UINT64_FTYPE_UINT64 }, @@ -37603,6 +37609,7 @@ ix86_fold_builtin (tree fndecl, int n_args, return fold_builtin_cpu (fndecl, args); case IX86_BUILTIN_TZCNT16: + case IX86_BUILTIN_CTZS: case IX86_BUILTIN_TZCNT32: case IX86_BUILTIN_TZCNT64: gcc_assert (n_args == 1); @@ -37610,7 +37617,8 @@ ix86_fold_builtin (tree fndecl, int n_args, { tree type = TREE_TYPE (TREE_TYPE (fndecl)); tree arg = args[0]; - if (fn_code == IX86_BUILTIN_TZCNT16) + if (fn_code == IX86_BUILTIN_TZCNT16 + || fn_code == IX86_BUILTIN_CTZS) arg = fold_convert (short_unsigned_type_node, arg); if (integer_zerop (arg)) return build_int_cst (type, TYPE_PRECISION (TREE_TYPE (arg))); @@ -37620,6 +37628,7 @@ ix86_fold_builtin (tree fndecl, int n_args, break; case IX86_BUILTIN_LZCNT16: + case IX86_BUILTIN_CLZS: case IX86_BUILTIN_LZCNT32: case IX86_BUILTIN_LZCNT64: gcc_assert (n_args == 1); @@ -37627,7 +37636,8 @@ ix86_fold_builtin (tree fndecl, int n_args, { tree type = TREE_TYPE (TREE_TYPE (fndecl)); tree arg = args[0]; - if (fn_code == IX86_BUILTIN_LZCNT16) + if (fn_code == IX86_BUILTIN_LZCNT16 + || fn_code == IX86_BUILTIN_CLZS) arg = fold_convert (short_unsigned_type_node, arg); if (integer_zerop (arg)) return build_int_cst (type, TYPE_PRECISION (TREE_TYPE (arg))); |