Посмотр рубрик

__builtin-функции

У GCC/Clang есть несколько полезных и хорошо оптимизированных функций.

Битовая математика #

__builtin_popcount #

int __builtin_popcount(unsigned int v)
int __builtin_popcountl(unsigned long v)
int __builtin_popcountll(unsigned long long v)
Возвращает количество установленных (1) бит в числе, например __builtin_popcount(0b110110) == 4

__builtin_parity #

int __builtin_parity(unsigned int v)
int __builtin_parityl(unsigned long v)
int __builtin_parityll(unsigned long long v)
Проверяет чётность числа - возвращает 1 для чётного и 0 для нечётного

__builtin_clz #

int __builtin_clz(unsigned int v)
int __builtin_clzl(unsigned long v)
int __builtin_clzll(unsigned long long v)
Count leading zeroes - возвращает количество незначащих нулей слева (до первого 1 бита), например __builtin_clz(0b0000100101) == 10 на 8 бит процессоре, при 32-бит int результат будет 26. Нулевой аргумент - неопределённое поведение!

__builtin_ctz #

int __builtin_ctz(unsigned int v)
int __builtin_ctzl(unsigned long v)
int __builtin_ctzll(unsigned long long v)
Count trailing zeroes - возвращает количество значащих нулей справа (до первого 1 бита), например __builtin_ctz(0b10101000) == 3

Математика #

Аналоги #

double __builtin_sqrt(double)
float __builtin_sqrtf(float)
double __builtin_sin(double)
float __builtin_sinf(float)
double __builtin_cos(double)
float __builtin_cosf(float)
double __builtin_tan(double)
float __builtin_tanf(float)
double __builtin_pow(double, double)
float __builtin_powf(float, float)
double __builtin_fabs(double)
int __builtin_abs(int)
long __builtin_labs(long)
long long __builtin_llabs(long long)
Аналоги стандартных математических функций

Память #

__builtin_bzero #

void __builtin_bzero(void *p, unsigned long long n)
Заполнить память нулями на n байт

Аналоги #

void *__builtin_memcpy(void *, const void *, unsigned long long)
void *__builtin_memmove(void *, const void *, unsigned long long)
void *__builtin_memset(void *, int, unsigned long long)
int __builtin_memcmp(const void *, const void *, unsigned long long)
Аналоги стандартных функций для памяти

Строки #

Аналоги #

unsigned long long __builtin_strlen(const char *)
char *__builtin_strcpy(char *, const char *)
char *__builtin_strncpy(char *, const char *, unsigned long long)
int __builtin_strcmp(const char *, const char *)
int __builtin_strncmp(const char *, const char *, unsigned long long)
char *__builtin_strchr(const char *, int)
char *__builtin_strrchr(const char *, int)
Аналоги стандартных функций для строк

Полезные страницы #

Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх