Add X86_64 support.
authorbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Jun 2005 06:15:10 +0000 (06:15 +0000)
committerbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Jun 2005 06:15:10 +0000 (06:15 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@411 38d2e660-2303-0410-9eaa-f027e97ec537

cfg/compiler.h
cfg/cpu.h
cfg/cpu_detect.h

index 93f699275d75c56ad6c90b0bfe5784e3a6c858e6..456309427f51c74aca850ae9f41c6605fac00867 100755 (executable)
@@ -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.
  *#*
         * \{
         */
        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. */
@@ -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
index ab7617d285016790b7844e1c9d6bd87b188e7d61..da0ec23a0822bd6671bcc6569b9de8eb7f0e30cb 100755 (executable)
--- 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.
  *#*
 #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
@@ -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
index 5e48b76e2371224f5ee75ba875733c642548cf53..0d64eddfc525641f9a7486c47b57f6f6b67c7c19 100755 (executable)
@@ -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.
  *#*
        #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)