https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65373
Bug ID: 65373 Summary: [SH] Implement bit counting built-in functions Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: olegendo at gcc dot gnu.org Target: sh*-*-* In linux/arch/sh/include/asm there's following code: static inline unsigned long ffz(unsigned long word) { unsigned long result; __asm__("1:\n\t" "shlr %1\n\t" "bt/s 1b\n\t" " add #1, %0" : "=r" (result), "=r" (word) : "0" (~0L), "1" (word) : "t"); return result; } static inline unsigned long __ffs(unsigned long word) { unsigned long result; __asm__("1:\n\t" "shlr %1\n\t" "bf/s 1b\n\t" " add #1, %0" : "=r" (result), "=r" (word) : "0" (~0L), "1" (word) : "t"); return result; } The respective GCC built-in functions such as __builtin_ffs should be implemented. The code snippets above result in quite compact code, which could be used for -Os. Otherwise, it could be interesting to see whether it makes sense to expand some inline code as found in include/longlong.h.