In message 20020603181539.GB19105@suse.de, Stefan Reinauer writes:
typedef intptr_t type_n; // cell size typedef uintptr_t type_u; // cell size +#if defined(__alpha__) || defined(__x86_64__) || \
- defined(__ia64__) || defined(ppc64)
+typedef intmax_t type_d __attribute__ ((mode (TI))); // 2 * cell size +typedef uintmax_t type_du __attribute__ ((mode (TI))); // 2 * cell size +#else typedef intmax_t type_d; // 2 * cell size typedef uintmax_t type_du; // 2 * cell size +#endif #else
Dunno about the Gnu-isms, 'cause we avoid 'em in SmartFirmware, but as a general rule, you should change your defines to something like this:
typedef intptr_t type_n; // cell size typedef uintptr_t type_u; // cell size +#ifdef int64_type +typedef intmax_t type_d __attribute__ ((mode (TI))); // 2 * cell size +typedef uintmax_t type_du __attribute__ ((mode (TI))); // 2 * cell size +#else typedef intmax_t type_d; // 2 * cell size typedef uintmax_t type_du; // 2 * cell size +#endif #else
and have a machine-dependent section that sets int64_type (or whatever) based on the CPU type or some-such. Make the macros reflect the specific feature directly.
We use two different macros defined in a machdep.h header file, which is customized for each platform and compiler. One macro determines the presence/absence of 64-bit ints (say INT_64BIT) and another determines if pointers will be 64-bits or not (PTR_64BIT). Only one place needs to specify the settings of these macros, machdep.h, and every other common source file is neatly disconnected from any machine dependancies.
As for the Gnu-isms, we wrap the necessary code in #ifdef __GNUC__, in some cases creating a null macro to reduce the subsequent ifdef mess:
#ifndef __GNU_C__ #define __attribute__(arg) /* noop */ #endif
Obviously, there are other ways to deal with this as well.
Just for what it's worth.
-- Parag - To unsubscribe: send mail to majordomo@freiburg.linux.de with 'unsubscribe openbios' in the body of the message http://www.freiburg.linux.de/OpenBIOS/ - free your system..