diff options
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index b20426cd784..096fec62ee3 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -7676,9 +7676,9 @@ fold_builtin_bitop (tree fndecl, tree arg) { CASE_INT_FN (BUILT_IN_FFS): if (lo != 0) - result = exact_log2 (lo & -lo) + 1; + result = ffs_hwi (lo); else if (hi != 0) - result = HOST_BITS_PER_WIDE_INT + exact_log2 (hi & -hi) + 1; + result = HOST_BITS_PER_WIDE_INT + ffs_hwi (hi); else result = 0; break; @@ -7694,9 +7694,9 @@ fold_builtin_bitop (tree fndecl, tree arg) CASE_INT_FN (BUILT_IN_CTZ): if (lo != 0) - result = exact_log2 (lo & -lo); + result = ctz_hwi (lo); else if (hi != 0) - result = HOST_BITS_PER_WIDE_INT + exact_log2 (hi & -hi); + result = HOST_BITS_PER_WIDE_INT + ctz_hwi (hi); else if (! CTZ_DEFINED_VALUE_AT_ZERO (TYPE_MODE (type), result)) result = width; break; @@ -7706,7 +7706,7 @@ fold_builtin_bitop (tree fndecl, tree arg) while (lo) result++, lo &= lo - 1; while (hi) - result++, hi &= hi - 1; + result++, hi &= (unsigned HOST_WIDE_INT) hi - 1; break; CASE_INT_FN (BUILT_IN_PARITY): @@ -7714,7 +7714,7 @@ fold_builtin_bitop (tree fndecl, tree arg) while (lo) result++, lo &= lo - 1; while (hi) - result++, hi &= hi - 1; + result++, hi &= (unsigned HOST_WIDE_INT) hi - 1; result &= 1; break; |