Port-sparc64 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Sizeof int_fastN_t vs uint_fastN_t data types



Hi, on NetBSD sparc64 I think /usr/include/sparc/int_mwgwtypes.h
typedefs various integer sizes. My test program with sizeof() for
each data type reports this:

int_fast8_t   = 8 bytes
uint_fast8_t  = 1 byte

int_fast16_t  = 8 bytes
uint_fast16_t = 2 bytes

int_fast32_t  = 8 bytes
uint_fast32_t = 4 bytes

int_fast64_t  = 8 bytes
uint_fast64_t = 8 bytes

The way I read this:

For all signed integers the best performance can be achieved when they
are exactly 8 bytes (64 bits) in size.

Strangely, for all unsigned integers the best performance can be
achieved when they are at their natural sizes. Is this a bug? If not,
then what is the reason for such discrepancy between signed and
unsigned integers?

I would expect discrepancy between OSes, e.g. Linux aarch64 defines
fast versions for 16 and 32 bit integers at 8 bytes, NetBSD aarch64
defines fast versions for 16 and 32 bit integers at 4 bytes. However,
the same OS defining different sizes for signed and unsigned fast
integers seems a bit strange. Is there really that much overhead for
signed integer arithmetic on sparc64?

Thanks.


Home | Main Index | Thread Index | Old Index