kstrtox: smaller _parse_integer()
PATCH 1/1 kstrtox: smaller _parse_integer()
Set "overflow" bit upon encountering it instead of postponing to the end of the conversion. Somehow gcc unwedges itself and generates better code:
$ ./scripts/bloat-o-meter ../vmlinux-000 ../obj/vmlinux _parse_integer 177 139 -38
Inspired by patch from Zhaoxiu Zeng.
Signed-off-by Alexey Dobriyan <[email protected]>
---
lib/kstrtox.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
lib/kstrtox.c +1 -5
@@ -48,11 +48,9 @@ unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long {unsigned long long res;unsigned int rv; -int overflow; res =0 ; rv =0 ; - overflow =0 ;while (*s) {unsigned int val;
@@ -71,15 +69,13 @@ unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long*/ if (unlikely (res & (~0ull <<60 ))) {if (res >div_u64 (ULLONG_MAX - val, base)) - overflow =1 ; + rv |=KSTRTOX_OVERFLOW ; } res = res * base + val; rv++; s++; } *p = res; -if (overflow) - rv |=KSTRTOX_OVERFLOW ;return rv; }