Add missing #endif.
[bertos.git] / cfg / cpu.h
index 6afa3fa0a349667242216ab7b5ecf5b1e1cda2f6..a687275fc095f7f641a180b63ddb544a337951c1 100755 (executable)
--- a/cfg/cpu.h
+++ b/cfg/cpu.h
 
 /*#*
  *#* $Log$
+ *#* Revision 1.6  2005/07/19 07:26:49  bernie
+ *#* Add missing #endif.
+ *#*
+ *#* Revision 1.5  2005/06/27 21:24:17  bernie
+ *#* CPU_CSOURCE(): New macro.
+ *#*
+ *#* 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.
+ *#*
+ *#* Revision 1.2  2005/04/11 19:10:27  bernie
+ *#* Include top-level headers from cfg/ subdir.
+ *#*
  *#* Revision 1.1  2005/04/11 19:04:13  bernie
  *#* Move top-level headers to cfg/ subdir.
  *#*
@@ -41,7 +56,7 @@
 #ifndef DEVLIB_CPU_H
 #define DEVLIB_CPU_H
 
-#include "compiler.h" /* for uintXX_t */
+#include <cfg/compiler.h> /* for uintXX_t */
 
 
 /*!
@@ -55,6 +70,9 @@
 /*! Macro to include cpu-specific versions of the headers. */
 #define CPU_HEADER(module)          PP_STRINGIZE(PP_CAT3(module, _, CPU_ID).h)
 
+/*! Macro to include cpu-specific versions of implementation files. */
+#define CPU_CSOURCE(module)         PP_STRINGIZE(PP_CAT3(module, _, CPU_ID).c)
+
 
 #if CPU_I196
 
 #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
        }
        #define IRQ_GETSTATE() irq_getstate()
 
-
-
        typedef uint16_t cpuflags_t;
        typedef unsigned int cpustack_t;
 
         */
        #define CPU_REG_INIT_VALUE(reg) (reg == 0 ? 0x80 : 0)
 
+#else
+       #error No CPU_... defined.
 #endif
 
 /*!
 #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
 #endif
 
 #ifndef CPU_BITS_PER_CHAR
@@ -381,7 +416,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