Messages in this thread Patch in this message | | | Date | Sat, 27 Aug 2016 01:19:21 +0300 | From | Alexey Dobriyan <> | Subject | [PATCH] 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 <adobriyan@gmail.com> ---
lib/kstrtox.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
--- a/lib/kstrtox.c +++ b/lib/kstrtox.c @@ -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; }
| |