Bit Operation Builtins (Using the GNU Compiler Collection (GCC)) (original) (raw)


7.2.2 Bit Operation Builtins

Built-in Function: int __builtin_ffs (int x)

Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero.

Built-in Function: int __builtin_clz (unsigned int x)

Returns the number of leading 0-bits in x, starting at the most significant bit position. If x is 0, the result is undefined.

Built-in Function: int __builtin_ctz (unsigned int x)

Returns the number of trailing 0-bits in x, starting at the least significant bit position. If x is 0, the result is undefined.

Built-in Function: int __builtin_clrsb (int x)

Returns the number of leading redundant sign bits in x, i.e. the number of bits following the most significant bit that are identical to it. There are no special cases for 0 or other values.

Built-in Function: int __builtin_popcount (unsigned int x)

Returns the number of 1-bits in x.

Built-in Function: int __builtin_parity (unsigned int x)

Returns the parity of x, i.e. the number of 1-bits in xmodulo 2.

Built-in Function: int __builtin_ffsl (long)

Similar to __builtin_ffs, except the argument type islong.

Built-in Function: int __builtin_clzl (unsigned long)

Similar to __builtin_clz, except the argument type isunsigned long.

Built-in Function: int __builtin_ctzl (unsigned long)

Similar to __builtin_ctz, except the argument type isunsigned long.

Built-in Function: int __builtin_clrsbl (long)

Similar to __builtin_clrsb, except the argument type islong.

Built-in Function: int __builtin_popcountl (unsigned long)

Similar to __builtin_popcount, except the argument type isunsigned long.

Built-in Function: int __builtin_parityl (unsigned long)

Similar to __builtin_parity, except the argument type isunsigned long.

Built-in Function: int __builtin_ffsll (long long)

Similar to __builtin_ffs, except the argument type islong long.

Built-in Function: int __builtin_clzll (unsigned long long)

Similar to __builtin_clz, except the argument type isunsigned long long.

Built-in Function: int __builtin_ctzll (unsigned long long)

Similar to __builtin_ctz, except the argument type isunsigned long long.

Built-in Function: int __builtin_clrsbll (long long)

Similar to __builtin_clrsb, except the argument type islong long.

Built-in Function: int __builtin_popcountll (unsigned long long)

Similar to __builtin_popcount, except the argument type isunsigned long long.

Built-in Function: int __builtin_parityll (unsigned long long)

Similar to __builtin_parity, except the argument type isunsigned long long.

Built-in Function: int __builtin_ffsg (...)

Similar to __builtin_ffs, except the argument is type-generic signed integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument.

Built-in Function: int __builtin_clzg (...)

Similar to __builtin_clz, except the argument is type-generic unsigned integer (standard, extended or bit-precise) and there is optional second argument with int type. No integral argument promotions are performed on the first argument. If two arguments are specified, and first argument is 0, the result is the second argument. If only one argument is specified and it is 0, the result is undefined.

Built-in Function: int __builtin_ctzg (...)

Similar to __builtin_ctz, except the argument is type-generic unsigned integer (standard, extended or bit-precise) and there is optional second argument with int type. No integral argument promotions are performed on the first argument. If two arguments are specified, and first argument is 0, the result is the second argument. If only one argument is specified and it is 0, the result is undefined.

Built-in Function: int __builtin_clrsbg (...)

Similar to __builtin_clrsb, except the argument is type-generic signed integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument.

Built-in Function: int __builtin_popcountg (...)

Similar to __builtin_popcount, except the argument is type-generic unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument.

Built-in Function: int __builtin_parityg (...)

Similar to __builtin_parity, except the argument is type-generic unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument.

Built-in Function: type __builtin_stdc_bit_ceil (type arg)

The __builtin_stdc_bit_ceil function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent toarg <= 1 ? (type) 1 : (type) 2 << (prec - 1 - __builtin_clzg ((type) (arg - 1)))where prec is bit width of type, except that side-effects in arg are evaluated just once.

Built-in Function: type __builtin_stdc_bit_floor (type arg)

The __builtin_stdc_bit_floor function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent toarg == 0 ? (type) 0 : (type) 1 << (prec - 1 - __builtin_clzg (arg))where prec is bit width of type, except that side-effects in arg are evaluated just once.

Built-in Function: unsigned int __builtin_stdc_bit_width (type arg)

The __builtin_stdc_bit_width function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(unsigned int) (prec - __builtin_clzg (arg, prec))where prec is bit width of type.

Built-in Function: unsigned int __builtin_stdc_count_ones (type arg)

The __builtin_stdc_count_ones function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(unsigned int) __builtin_popcountg (arg)

Built-in Function: unsigned int __builtin_stdc_count_zeros (type arg)

The __builtin_stdc_count_zeros function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(unsigned int) __builtin_popcountg ((type) ~arg)

Built-in Function: unsigned int __builtin_stdc_first_leading_one (type arg)

The __builtin_stdc_first_leading_one function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to__builtin_clzg (arg, -1) + 1U

Built-in Function: unsigned int __builtin_stdc_first_leading_zero (type arg)

The __builtin_stdc_first_leading_zero function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to__builtin_clzg ((type) ~arg, -1) + 1U

Built-in Function: unsigned int __builtin_stdc_first_trailing_one (type arg)

The __builtin_stdc_first_trailing_one function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to__builtin_ctzg (arg, -1) + 1U

Built-in Function: unsigned int __builtin_stdc_first_trailing_zero (type arg)

The __builtin_stdc_first_trailing_zero function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to__builtin_ctzg ((type) ~arg, -1) + 1U

Built-in Function: unsigned int __builtin_stdc_has_single_bit (type arg)

The __builtin_stdc_has_single_bit function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(_Bool) (__builtin_popcountg (arg) == 1)

Built-in Function: unsigned int __builtin_stdc_leading_ones (type arg)

The __builtin_stdc_leading_ones function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(unsigned int) __builtin_clzg ((type) ~arg, prec)

Built-in Function: unsigned int __builtin_stdc_leading_zeros (type arg)

The __builtin_stdc_leading_zeros function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(unsigned int) __builtin_clzg (arg, prec)

Built-in Function: unsigned int __builtin_stdc_trailing_ones (type arg)

The __builtin_stdc_trailing_ones function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(unsigned int) __builtin_ctzg ((type) ~arg, prec)

Built-in Function: unsigned int __builtin_stdc_trailing_zeros (type arg)

The __builtin_stdc_trailing_zeros function is available only in C. It is type-generic, the argument can be any unsigned integer (standard, extended or bit-precise). No integral argument promotions are performed on the argument. It is equivalent to(unsigned int) __builtin_ctzg (arg, prec)

Built-in Function: type1 __builtin_stdc_rotate_left (type1 arg1, type2 arg2)

The __builtin_stdc_rotate_left function is available only in C. It is type-generic, the first argument can be any unsigned integer (standard, extended or bit-precise) and second argument any signed or unsigned integer or char. No integral argument promotions are performed on the arguments. It is equivalent to(type1) ((arg1 << (arg2 % prec)) | (arg1 >> ((-(unsigned type2) arg2) % prec)))where prec is bit width of type1, except that side-effects in arg1 and arg2 are evaluated just once. The behavior is undefined if arg2 is negative.

Built-in Function: type1 __builtin_stdc_rotate_right (type1 arg1, type2 arg2)

The __builtin_stdc_rotate_right function is available only in C. It is type-generic, the first argument can be any unsigned integer (standard, extended or bit-precise) and second argument any signed or unsigned integer or char. No integral argument promotions are performed on the arguments. It is equivalent to(type1) ((arg1 >> (arg2 % prec)) | (arg1 << ((-(unsigned type2) arg2) % prec)))where prec is bit width of type1, except that side-effects in arg1 and arg2 are evaluated just once. The behavior is undefined if arg2 is negative.