Re: Use of C99 int types

From: Renate Meijer
Date: Sun Apr 03 2005 - 14:20:40 EST



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@xxxxxxxx> 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/