]> Pileus Git - ~andy/linux/blobdiff - lib/vsprintf.c
lib: vsprintf: optimize put_dec_trunc8()
[~andy/linux] / lib / vsprintf.c
index 8cb7635b2ce305118b7491506122ba4bf5afa522..c2236f14640fb8c222e030435f3d02cb44d718e3 100644 (file)
@@ -174,22 +174,12 @@ char *put_dec_trunc8(char *buf, unsigned r)
        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 */
-       if (r == 0)
-               return buf;
+       while (r >= 10000) {
+               q = r + '0';
+               r  = (r * (uint64_t)0x1999999a) >> 32;
+               *buf++ = q - 10*r;
+       }
+
        q      = (r * 0x199a) >> 16;
        *buf++ = (r - 10 * q)  + '0'; /* 6 */
        if (q == 0)