Pacify IAR warnings for side-effects.
[bertos.git] / cfg / cpu_detect.h
1 /*!
2  * \file
3  * <!--
4  * Copyright 2004, 2005 Develer S.r.l. (http://www.develer.com/)
5  * Copyright 2004 Giovanni Bajo
6  * This file is part of DevLib - See README.devlib for information.
7  * -->
8  *
9  * \brief CPU detection through special preprocessor macros
10  *
11  */
12
13 /*#*
14  *#* $Log$
15  *#* Revision 1.2  2005/06/14 06:15:10  bernie
16  *#* Add X86_64 support.
17  *#*
18  *#* Revision 1.1  2005/04/11 19:04:13  bernie
19  *#* Move top-level headers to cfg/ subdir.
20  *#*
21  *#* Revision 1.4  2005/02/16 20:33:24  bernie
22  *#* Preliminary PPC support.
23  *#*
24  *#* Revision 1.3  2004/12/31 17:39:26  bernie
25  *#* Use C89 comments only.
26  *#*
27  *#* Revision 1.2  2004/08/25 14:12:08  rasky
28  *#* Aggiornato il comment block dei log RCS
29  *#*
30  *#* Revision 1.1  2004/07/30 17:14:49  rasky
31  *#* File sfuggito al commit precedente (nuova gestione unificata del detect della CPU
32  *#*
33  *#* Revision 1.2  2004/07/30 10:31:07  rasky
34  *#* Aggiunto detect per ATmega128
35  *#*/
36
37 #ifndef CPU_DETECT_H
38 #define CPU_DETECT_H
39
40 #if defined(__IAR_SYSTEMS_ICC) || defined(__IAR_SYSTEMS_ICC__)
41         #define CPU_I196                1
42         #define CPU_ID                  i196
43 #else
44         #define CPU_I196                0
45 #endif
46
47 #if defined(__i386__) /* GCC */ \
48         || (defined(_M_IX86) && !defined(_WIN64)) /* MSVC */
49         #define CPU_X86                 1
50         #define CPU_X86_32              1
51         #define CPU_X86_64              0
52         #define CPU_ID                  x86
53 #elif defined(__x86_64__) /* GCC */ \
54         || (defined(_M_IX86) && defined(_WIN64)) /* MSVC */
55         #define CPU_X86                 1
56         #define CPU_X86_32              0
57         #define CPU_X86_64              1
58         #define CPU_ID                  x86
59 #else
60         #define CPU_X86                 0
61         #define CPU_I386                0
62         #define CPU_X86_64              0
63 #endif
64
65 #if defined (_ARCH_PPC) || defined(_ARCH_PPC64)
66         #define CPU_PPC                 1
67         #define CPU_ID                  ppc
68         #if defined(_ARCH_PPC)
69                 #define CPU_PPC32       1
70         #else
71                 #define CPU_PPC32       0
72         #endif
73         #if defined(_ARCH_PPC64)
74                 #define CPU_PPC64       1
75         #else
76                 #define CPU_PPC64       0
77         #endif
78 #else
79         #define CPU_PPC                 0
80         #define CPU_PPC32               0
81         #define CPU_PPC64               0
82 #endif
83
84 #if defined(__m56800E__) || defined(__m56800__)
85         #define CPU_DSP56K              1
86         #define CPU_ID                  dsp56k
87 #else
88         #define CPU_DSP56K              0
89 #endif
90
91 #if defined (__AVR__)
92         #define CPU_AVR                 1
93         #define CPU_ID                  avr
94
95         #if defined(__AVR_ATmega64__)
96                 #define CPU_AVR_ATMEGA64    1
97         #else
98                 #define CPU_AVR_ATMEGA64    0
99         #endif
100
101         #if defined(__AVR_ATmega103__)
102                 #define CPU_AVR_ATMEGA103   1
103         #else
104                 #define CPU_AVR_ATMEGA103   0
105         #endif
106
107         #if defined(__AVR_ATmega128__)
108                 #define CPU_AVR_ATMEGA128   1
109         #else
110                 #define CPU_AVR_ATMEGA128   0
111         #endif
112
113         #if defined(__AVR_ATmega8__)
114                 #define CPU_AVR_ATMEGA8     1
115         #else
116                 #define CPU_AVR_ATMEGA8     0
117         #endif
118 #else
119         #define CPU_AVR                 0
120         #define CPU_AVR_ATMEGA8         0
121         #define CPU_AVR_ATMEGA64        0
122         #define CPU_AVR_ATMEGA103       0
123         #define CPU_AVR_ATMEGA128       0
124 #endif
125
126
127 /* Self-check for the detection: only one CPU must be detected */
128 #if CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR == 0
129         #error Unknown CPU
130 #elif !defined(CPU_ID)
131         #error CPU_ID not defined
132 #elif CPU_I196 + CPU_X86 + CPU_PPC + CPU_DSP56K + CPU_AVR != 1
133         #error Internal CPU configuration error
134 #endif
135
136
137 #endif /* CPU_DETECT_H */