lkml.org 
[lkml]   [2012]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 1/4] lib: vsprintf: Optimize division by 10 for small integers.
    Date
    On Fri, Aug 03 2012, George Spelvin <linux@horizon.com> wrote:
    > Shrink the reciprocal approximations used in put_dec_full4
    > based on the comments in put_dec_full9.
    >
    > Signed-off-by: George Spelvin <linux@horizon.com>
    > Cc: Denys Vlasenko <vda.linux@googlemail.com>
    > Cc: Michal Nazarewicz <mina86@mina86.com>

    Have you verified that the comment is correct?

    > ---
    > lib/vsprintf.c | 5 +++--
    > 1 file changed, 3 insertions(+), 2 deletions(-)
    >
    > I was looking over the code and noticed that the constants could be smaller.
    >
    > diff --git a/lib/vsprintf.c b/lib/vsprintf.c
    > index c3f36d41..2f32fe8 100644
    > --- a/lib/vsprintf.c
    > +++ b/lib/vsprintf.c
    > @@ -243,13 +243,14 @@ char *put_dec(char *buf, unsigned long long n)
    >
    > /* Second algorithm: valid only for 64-bit long longs */
    >
    > +/* See comment in put_dec_full9 for choice of constants */
    > static noinline_for_stack
    > char *put_dec_full4(char *buf, unsigned q)
    > {
    > unsigned r;
    > - r = (q * 0xcccd) >> 19;
    > + r = (q * 0xccd) >> 15;
    > *buf++ = (q - 10 * r) + '0';
    > - q = (r * 0x199a) >> 16;
    > + q = (r * 0xcd) >> 11;
    > *buf++ = (r - 10 * q) + '0';
    > r = (q * 0xcd) >> 11;

    If you are changing everything, this could also be changed to:

    r = (q * 0x67) >> 10;

    no?

    > *buf++ = (q - 10 * r) + '0';

    --
    Best regards, _ _
    .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o
    ..o | Computer Science, Michał “mina86” Nazarewicz (o o)
    ooo +----<email/xmpp: mpn@google.com>--------------ooO--(_)--Ooo--[unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-09-23 20:01    [W:4.496 / U:0.492 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site