Re: [PATCH 2/3] lib: vsprintf: optimised put_dec() for 32-bit machines

From: MichaÅ Nazarewicz
Date: Fri Aug 06 2010 - 04:53:07 EST


On Fri, 06 Aug 2010 09:35:26 +0200, Denys Vlasenko <vda.linux@xxxxxxxxxxxxxx> wrote:

On Friday 06 August 2010 09:08, Michal Nazarewicz wrote:
>> +static noinline_for_stack
>> +char *put_dec(char *buf, unsigned long long n)
>> +{
>> + uint32_t d3, d2, d1, q;
>> +
>> + if (!n) {
>> + *buf++ = '0';
>> + return buf;
>> + }
>> +
>> + d1 = (n >> 16) & 0xFFFF;
>> + d2 = (n >> 32) & 0xFFFF;
>> + d3 = (n >> 48) & 0xFFFF;
>
> Are you assuming that sizeof(long long) == 8, always?

Well... yes. C requires long long to be at least 64-bit and I don't
see it being larger in any foreseeable feature.

"640k will be enough for everybody"?

Wouldn't it be enough to put a static assert here?

I'd prefer the code which works with arbitrarily wide long long.
If needed, use

if (sizeof(long long) == 8)
64-bit code
else
generic code

Thanks. That seems like a perfect solution. I rearrange the code
and try to post updated version after the weekend.

--
Best regards, _ _
| Humble Liege of Serenely Enlightened Majesty of o' \,=./ `o
| Computer Science, MichaÅ "mina86" Nazarewicz (o o)
+----[mina86*mina86.com]---[mina86*jabber.org]----ooO--(_)--Ooo--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/