/*#*
*#* $Log$
+ *#* Revision 1.4 2005/06/14 06:15:10 bernie
+ *#* Add X86_64 support.
+ *#*
*#* Revision 1.3 2005/04/12 01:37:01 bernie
*#* Metrowerks touchups from HeCo.
*#*
* \{
*/
typedef signed char int8_t;
- typedef short int int16_t;
- typedef long int int32_t;
typedef unsigned char uint8_t;
+ typedef short int int16_t;
typedef unsigned short int uint16_t;
- typedef unsigned long int uint32_t;
+ typedef long int int32_t; /* _WIN64 safe */
+ typedef unsigned long int uint32_t; /* _WIN64 safe */
+
+ #ifdef _MSC_VER
+ typedef __int64 int64_t;
+ typedef unsigned __int64 uint64_t;
+ #else
+ typedef long long int64_t;
+ typedef unsigned long long uint64_t;
+ #endif
/* \} */
#elif defined(__GNUC__) && CPU_AVR
- /* avr-libc is weird... */
+ /* avr-libc is weird... (Fixed in avr-libc-1.2, hack to be removed soon) */
#include <inttypes.h>
#else
/* This is the correct location. */
#if CPU_REG_BITS > 32
/* 64bit. */
typedef unsigned long size_t;
- typedef long ssize_t;
#else
/* 32bit or 16bit. */
typedef unsigned int size_t;
+ #endif
+#endif
+
+#if !(defined(ssize_t) || defined(__ssize_t_defined))
+ #if CPU_REG_BITS > 32
+ /* 64bit (32bit for _WIN64). */
+ typedef long ssize_t;
+ #else
+ /* 32bit or 16bit. */
typedef int ssize_t;
#endif
#endif
/*#*
*#* $Log$
+ *#* Revision 1.4 2005/06/14 06:15:10 bernie
+ *#* Add X86_64 support.
+ *#*
*#* Revision 1.3 2005/04/12 04:06:17 bernie
*#* Catch missing CPU earlier.
*#*
#elif CPU_X86
#define NOP asm volatile ("nop")
- #define IRQ_DISABLE /* nothing */
- #define IRQ_ENABLE /* nothing */
- #define IRQ_SAVE_DISABLE(x) /* nothing */
- #define IRQ_RESTORE(x) /* nothing */
+ #define IRQ_DISABLE FIXME
+ #define IRQ_ENABLE FIXME
+ #define IRQ_SAVE_DISABLE(x) FIXME
+ #define IRQ_RESTORE(x) FIXME
typedef uint32_t cpuflags_t; // FIXME
- typedef uint32_t cpustack_t;
- #define CPU_REG_BITS 32
#define CPU_REGS_CNT 7
#define CPU_STACK_GROWS_UPWARD 0
#define CPU_SP_ON_EMPTY_SLOT 0
#define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN
#define CPU_HARVARD 0
+ #if CPU_X86_64
+ typedef uint64_t cpustack_t;
+ #define CPU_REG_BITS 64
+
+ #ifdef __WIN64__
+ /* WIN64 is an IL32-P64 weirdo. */
+ #define SIZEOF_LONG 4
+ #endif
+ #else
+ typedef uint32_t cpustack_t;
+ #define CPU_REG_BITS 32
+ #endif
+
#elif CPU_PPC
#define NOP asm volatile ("nop" ::)
#define IRQ_DISABLE FIXME
#endif
#ifndef SIZEOF_PTR
-#define SIZEOF_PTR SIZEOF_INT
+#if CPU_REG_BITS < 32
+ #define SIZEOF_PTR 2
+#elif CPU_REG_BITS == 32
+ #define SIZEOF_PTR 4
+#else /* CPU_REG_BITS > 32 */
+ #define SIZEOF_PTR 8
#endif
#ifndef CPU_BITS_PER_CHAR
STATIC_ASSERT(sizeof(short) == SIZEOF_SHORT);
STATIC_ASSERT(sizeof(long) == SIZEOF_LONG);
STATIC_ASSERT(sizeof(int) == SIZEOF_INT);
-
+STATIC_ASSERT(sizeof(void *) == SIZEOF_PTR);
+STATIC_ASSERT(sizeof(int8_t) * CPU_BITS_PER_CHAR == 8);
+STATIC_ASSERT(sizeof(uint8_t) * CPU_BITS_PER_CHAR == 8);
+STATIC_ASSERT(sizeof(int16_t) * CPU_BITS_PER_CHAR == 16);
+STATIC_ASSERT(sizeof(uint16_t) * CPU_BITS_PER_CHAR == 16);
+STATIC_ASSERT(sizeof(int32_t) * CPU_BITS_PER_CHAR == 32);
+STATIC_ASSERT(sizeof(uint32_t) * CPU_BITS_PER_CHAR == 32);
+#ifdef __HAS_INT64_T__
+STATIC_ASSERT(sizeof(int64_t) * CPU_BITS_PER_CHAR == 64);
+STATIC_ASSERT(sizeof(uint64_t) * CPU_BITS_PER_CHAR == 64);
+#endif
/*!
* \def CPU_IDLE
/*#*
*#* $Log$
+ *#* Revision 1.2 2005/06/14 06:15:10 bernie
+ *#* Add X86_64 support.
+ *#*
*#* Revision 1.1 2005/04/11 19:04:13 bernie
*#* Move top-level headers to cfg/ subdir.
*#*
#define CPU_I196 0
#endif
-#if defined(__i386__) || defined(_MSC_VER)
+#if defined(__i386__) /* GCC */ \
+ || (defined(_M_IX86) && !defined(_WIN64)) /* MSVC */
+ #define CPU_X86 1
+ #define CPU_X86_32 1
+ #define CPU_X86_64 0
+ #define CPU_ID x86
+#elif defined(__x86_64__) /* GCC */ \
+ || (defined(_M_IX86) && defined(_WIN64)) /* MSVC */
#define CPU_X86 1
+ #define CPU_X86_32 0
+ #define CPU_X86_64 1
#define CPU_ID x86
#else
#define CPU_X86 0
+ #define CPU_I386 0
+ #define CPU_X86_64 0
#endif
#if defined (_ARCH_PPC) || defined(_ARCH_PPC64)