use __builtin_clz to compute most significant bit set

Поиск
Список
Период
Сортировка
От Joseph Yu
Тема use __builtin_clz to compute most significant bit set
Дата
Msg-id CAA0WR3AgGcboOWfg-u_fBP+bqxEYLuqDaOuvufyrFE-vG4xFYA@mail.gmail.com
обсуждение исходный текст
Ответы Re: use __builtin_clz to compute most significant bit set  (Magnus Hagander <magnus@hagander.net>)
Список pgsql-hackers
hi community

This is the first time for me to submit a patch to Postgres community.

instead of using for loop to find the most significant bit set. we could use __builtin_clz function to first find the number of leading zeros for the mask and then we can find the index by 32 - __builtin_clz(mask).

diff --git a/src/port/fls.c b/src/port/fls.c
index 19b4221826..4f4c412732 100644
--- a/src/port/fls.c
+++ b/src/port/fls.c
@@ -54,11 +54,7 @@
 int
 fls(int mask)
 {
- int bit;
-
  if (mask == 0)
  return (0);
- for (bit = 1; mask != 1; bit++)
- mask = (unsigned int) mask >> 1;
- return (bit);
+ return (sizeof(int) << 3) - __builtin_clz(mask);
 }

Best Regards,

Joseph
Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: stopgap fix for signal handling during restore_command
Следующее
От: Nathan Bossart
Дата:
Сообщение: Re: stopgap fix for signal handling during restore_command