lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20231217071250.892867-3-mailhol.vincent@wanadoo.fr> Date: Sun, 17 Dec 2023 16:12:47 +0900 From: Vincent Mailhol <mailhol.vincent@...adoo.fr> To: Andrew Morton <akpm@...ux-foundation.org>, linux-kernel@...r.kernel.org, Yury Norov <yury.norov@...il.com> Cc: Nick Desaulniers <ndesaulniers@...gle.com>, Douglas Anderson <dianders@...omium.org>, Kees Cook <keescook@...omium.org>, Petr Mladek <pmladek@...e.com>, Randy Dunlap <rdunlap@...radead.org>, Zhaoyang Huang <zhaoyang.huang@...soc.com>, Geert Uytterhoeven <geert+renesas@...der.be>, Marco Elver <elver@...gle.com>, Brian Cain <bcain@...cinc.com>, Geert Uytterhoeven <geert@...ux-m68k.org>, Matthew Wilcox <willy@...radead.org>, "Paul E . McKenney" <paulmck@...nel.org>, linux-hexagon@...r.kernel.org, linux-m68k@...ts.linux-m68k.org, Vincent Mailhol <mailhol.vincent@...adoo.fr> Subject: [PATCH v3 2/5] m68k/bitops: use __builtin_{clz,ctzl,ffs} to evaluate constant expressions The compiler is not able to do constant folding on "asm volatile" code. Evaluate whether or not the function argument is a constant expression and if this is the case, return an equivalent builtin expression. On an allyesconfig, with GCC 13.2.1, it saves roughly 8 KB. $ size --format=GNU vmlinux.before vmlinux.after text data bss total filename 60446534 70972412 2289596 133708542 vmlinux.before 60429746 70978876 2291676 133700298 vmlinux.after Reference: commit fdb6649ab7c1 ("x86/asm/bitops: Use __builtin_ctzl() to evaluate constant expressions") Link: https://git.kernel.org/torvalds/c/fdb6649ab7c1 Signed-off-by: Vincent Mailhol <mailhol.vincent@...adoo.fr> --- arch/m68k/include/asm/bitops.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/m68k/include/asm/bitops.h b/arch/m68k/include/asm/bitops.h index ae0457d582b8..3f89b9dccc33 100644 --- a/arch/m68k/include/asm/bitops.h +++ b/arch/m68k/include/asm/bitops.h @@ -470,6 +470,9 @@ static __always_inline unsigned long ffz(unsigned long word) { int res; + if (__builtin_constant_p(word)) + return __builtin_ctzl(~word); + __asm__ __volatile__ ("bfffo %1{#0,#0},%0" : "=d" (res) : "d" (~word & -~word)); return res ^ 31; @@ -491,6 +494,9 @@ static __always_inline unsigned long ffz(unsigned long word) !defined(CONFIG_M68000) static __always_inline unsigned long __ffs(unsigned long x) { + if (__builtin_constant_p(x)) + return __builtin_ctzl(x); + __asm__ __volatile__ ("bitrev %0; ff1 %0" : "=d" (x) : "0" (x)); @@ -523,6 +529,9 @@ static __always_inline int ffs(int x) { int cnt; + if (__builtin_constant_p(x)) + return __builtin_ffs(x); + __asm__ ("bfffo %1{#0:#0},%0" : "=d" (cnt) : "dm" (x & -x)); @@ -541,6 +550,9 @@ static __always_inline int fls(unsigned int x) { int cnt; + if (__builtin_constant_p(x)) + return x ? BITS_PER_TYPE(x) - __builtin_clz(x) : 0; + __asm__ ("bfffo %1{#0,#0},%0" : "=d" (cnt) : "dm" (x)); -- 2.25.1
Powered by blists - more mailing lists