Merge from kseries.
[bertos.git] / cfg / cpu_detect.h
index 5e48b76e2371224f5ee75ba875733c642548cf53..3af28a1e575824a89a9d059e0e21a4cdd24f6226 100755 (executable)
@@ -1,4 +1,4 @@
-/*!
+/**
  * \file
  * <!--
  * Copyright 2004, 2005 Develer S.r.l. (http://www.develer.com/)
 
 /*#*
  *#* $Log$
+ *#* Revision 1.6  2007/06/07 14:42:54  batt
+ *#* Merge from project_ks.
+ *#*
+ *#* Revision 1.5  2007/01/27 20:48:36  batt
+ *#* Add support for ATMEGA1281.
+ *#*
+ *#* Revision 1.4  2006/07/19 12:56:25  bernie
+ *#* Convert to new Doxygen style.
+ *#*
+ *#* Revision 1.3  2006/02/10 12:37:37  bernie
+ *#* Add support for ARM on IAR.
+ *#*
+ *#* 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.
  *#*
 #ifndef CPU_DETECT_H
 #define CPU_DETECT_H
 
-#if defined(__IAR_SYSTEMS_ICC) || defined(__IAR_SYSTEMS_ICC__)
-       #define CPU_I196                1
+#if defined(__arm__) /* GCC */ \
+       || defined(__ARM4TM__) /* IAR: defined for all cores >= 4tm */
+       #define CPU_ARM                 1
+       #define CPU_ID                  arm
+#else
+       #define CPU_ARM                 0
+#endif
+
+#if (defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)) \
+       && !defined(__ARM4TM__) /* IAR: if not ARM assume I196 */
+       #define CPU_I196                1
        #define CPU_ID                  i196
 #else
        #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)
        #else
                #define CPU_AVR_ATMEGA8     0
        #endif
+
+       #if defined(__AVR_ATmega168__)
+               #define CPU_AVR_ATMEGA168   1
+       #else
+               #define CPU_AVR_ATMEGA168   0
+       #endif
+
+       #if defined(__AVR_ATmega1281__)
+               #define CPU_AVR_ATMEGA1281  1
+       #else
+               #define CPU_AVR_ATMEGA1281  0
+       #endif
 #else
        #define CPU_AVR                 0
        #define CPU_AVR_ATMEGA8         0
+       #define CPU_AVR_ATMEGA168       0
        #define CPU_AVR_ATMEGA64        0
        #define CPU_AVR_ATMEGA103       0
        #define CPU_AVR_ATMEGA128       0
+       #define CPU_AVR_ATMEGA1281      0
 #endif
 
 
 /* Self-check for the detection: only one CPU must be detected */
-#if CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR == 0
+#if CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR == 0
        #error Unknown CPU
 #elif !defined(CPU_ID)
        #error CPU_ID not defined
-#elif CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR != 1
+#elif CPU_ARM + CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR != 1
        #error Internal CPU configuration error
 #endif