From c41211f2309fd5499f0ff6768314a0a260d27d1d Mon Sep 17 00:00:00 2001 From: bernie Date: Tue, 14 Jun 2005 06:15:10 +0000 Subject: [PATCH] Add X86_64 support. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@411 38d2e660-2303-0410-9eaa-f027e97ec537 --- cfg/compiler.h | 29 ++++++++++++++++++++++++----- cfg/cpu.h | 45 +++++++++++++++++++++++++++++++++++++-------- cfg/cpu_detect.h | 16 +++++++++++++++- 3 files changed, 76 insertions(+), 14 deletions(-) diff --git a/cfg/compiler.h b/cfg/compiler.h index 93f69927..45630942 100755 --- a/cfg/compiler.h +++ b/cfg/compiler.h @@ -14,6 +14,9 @@ /*#* *#* $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. *#* @@ -306,14 +309,22 @@ * \{ */ 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 #else /* This is the correct location. */ @@ -364,10 +375,18 @@ typedef unsigned char page_t; /*!< Type for banked memory pages. */ #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 diff --git a/cfg/cpu.h b/cfg/cpu.h index ab7617d2..da0ec23a 100755 --- a/cfg/cpu.h +++ b/cfg/cpu.h @@ -17,6 +17,9 @@ /*#* *#* $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. *#* @@ -81,21 +84,32 @@ #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 @@ -355,7 +369,12 @@ #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 @@ -389,7 +408,17 @@ STATIC_ASSERT(sizeof(char) == SIZEOF_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 diff --git a/cfg/cpu_detect.h b/cfg/cpu_detect.h index 5e48b76e..0d64eddf 100755 --- a/cfg/cpu_detect.h +++ b/cfg/cpu_detect.h @@ -12,6 +12,9 @@ /*#* *#* $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. *#* @@ -41,11 +44,22 @@ #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) -- 2.25.1