The patch titled Subject: lib: vsprintf: optimize put_dec_trunc8() has been added to the -mm tree. Its filename is lib-vsprintf-optimize-put_dec_trunc8.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: George Spelvin <linux@xxxxxxxxxxx> Subject: lib: vsprintf: optimize put_dec_trunc8() If you're going to have a conditional branch after each 32x32->64-bit multiply, might as well shrink the code and make it a loop. This also avoids using the long multiply for small integers. (This leaves the comments in a confusing state, but that's a separate patch to make review easier.) Signed-off-by: George Spelvin <linux@xxxxxxxxxxx> Cc: Denys Vlasenko <vda.linux@xxxxxxxxxxxxxx> Cc: Michal Nazarewicz <mina86@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- lib/vsprintf.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff -puN lib/vsprintf.c~lib-vsprintf-optimize-put_dec_trunc8 lib/vsprintf.c --- a/lib/vsprintf.c~lib-vsprintf-optimize-put_dec_trunc8 +++ a/lib/vsprintf.c @@ -174,20 +174,12 @@ char *put_dec_trunc8(char *buf, unsigned unsigned q; /* Copy of previous function's body with added early returns */ - q = (r * (uint64_t)0x1999999a) >> 32; - *buf++ = (r - 10 * q) + '0'; /* 2 */ - if (q == 0) - return buf; - r = (q * (uint64_t)0x1999999a) >> 32; - *buf++ = (q - 10 * r) + '0'; /* 3 */ - if (r == 0) - return buf; - q = (r * (uint64_t)0x1999999a) >> 32; - *buf++ = (r - 10 * q) + '0'; /* 4 */ - if (q == 0) - return buf; - r = (q * (uint64_t)0x1999999a) >> 32; - *buf++ = (q - 10 * r) + '0'; /* 5 */ + while (r >= 10000) { + q = r + '0'; + r = (r * (uint64_t)0x1999999a) >> 32; + *buf++ = q - 10*r; + } + if (r == 0) return buf; q = (r * 0x199a) >> 16; _ Patches currently in -mm which might be from linux@xxxxxxxxxxx are lib-vsprintf-optimize-division-by-10-for-small-integers.patch lib-vsprintf-optimize-division-by-10000.patch lib-vsprintf-optimize-put_dec_trunc8.patch lib-vsprintf-fix-broken-comments.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html