lkml.org 
[lkml]   [2005]   [Apr]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: Use of C99 int types
Date

On Apr 3, 2005, at 2:30 PM, Dag Arne Osvik wrote:

> Stephen Rothwell wrote:
>
>> On Sun, 03 Apr 2005 13:55:39 +0200 Dag Arne Osvik <da@osvik.no> wrote:
>>
>>> I've been working on a new DES implementation for Linux, and ran into
>>> the problem of how to get access to C99 types like uint_fast32_t for
>>> internal (not interface) use. In my tests, key setup on Athlon 64
>>> slows
>>> down by 40% when using u32 instead of uint_fast32_t.
>>>
>>
>> If you look in stdint.h you may find that uint_fast32_t is actually
>> 64 bits on Athlon 64 ... so does it help if you use u64?
>>
>>
>
> Yes, but wouldn't it be much better to avoid code like the following,
> which may also be wrong (in terms of speed)?
>
> #ifdef CONFIG_64BIT // or maybe CONFIG_X86_64?
> #define fast_u32 u64
> #else
> #define fast_u32 u32
> #endif

Isn't it better to use a general integer type, reflecting the cpu's
native register-size and let the compiler sort it out? Restrict all
uses of explicit width types to where it's *really* needed, that is, in
drivers, network-code, etc. I firmly oppose any definition of "#define
fast_u32 u64". This kind of definitions will only create needless
confusion.

I wonder how much other code is suffering from this kind of overly
explicit typing. It's much easier to make assumptions about integer
size unwittingly than it is to avoid them. I used to assume (for
instance) that sizeof(int) == sizeof(long) == sizeof(void *) at one
point in my career. Fortunately, reality soon asserted itself again.

Regards,

Renate Meijer.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-04-06 13:31    [from the cache]
©2003-2011 Jasper Spaans