RTEMS CPU Kit with SuperCore  4.11.3
powerpc.h
Go to the documentation of this file.
1 
10 /*
11  * Author: Andrew Bray <andy@i-cubed.co.uk>
12  *
13  * COPYRIGHT (c) 1995 by i-cubed ltd.
14  *
15  * MPC860 support code was added by Jay Monkman <jmonkman@frasca.com>
16  * MPC8260 support added by Andy Dachs <a.dachs@sstl.co.uk>
17  * Surrey Satellite Technology Limited
18  *
19  * To anyone who acknowledges that this file is provided "AS IS"
20  * without any express or implied warranty:
21  * permission to use, copy, modify, and distribute this file
22  * for any purpose is hereby granted without fee, provided that
23  * the above copyright notice and this notice appears in all
24  * copies, and that the name of i-cubed limited not be used in
25  * advertising or publicity pertaining to distribution of the
26  * software without specific, written prior permission.
27  * i-cubed limited makes no representations about the suitability
28  * of this software for any purpose.
29  *
30  * Derived from c/src/exec/cpu/no_cpu/no_cpu.h:
31  *
32  * COPYRIGHT (c) 1989-1997.
33  * On-Line Applications Research Corporation (OAR).
34  *
35  * The license and distribution terms for this file may in
36  * the file LICENSE in this distribution or at
37  * http://www.rtems.org/license/LICENSE.
38  *
39  *
40  * Note:
41  * This file is included by both C and assembler code ( -DASM )
42  */
43 
44 
45 #ifndef _RTEMS_SCORE_POWERPC_H
46 #define _RTEMS_SCORE_POWERPC_H
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 #include <rtems/score/types.h>
53 
54 /*
55  * Define the name of the CPU family.
56  */
57 
58 #define CPU_NAME "PowerPC"
59 
60 /*
61  * This file contains the information required to build
62  * RTEMS for the PowerPC family.
63  */
64 
65 /* Generic ppc */
66 
67 #ifdef _SOFT_FLOAT
68 #define CPU_MODEL_NAME "Generic (no FPU)"
69 #elif defined(__NO_FPRS__) || defined(__SPE__)
70 #define CPU_MODEL_NAME "Generic (E500/float-gprs/SPE)"
71 #else
72 #define CPU_MODEL_NAME "Generic (classic FPU)"
73 #endif
74 
75 #define PPC_ALIGNMENT 8
76 
77 #ifdef __PPC_CPU_E6500__
78 #define PPC_DEFAULT_CACHE_LINE_POWER 6
79 #else
80 #define PPC_DEFAULT_CACHE_LINE_POWER 5
81 #endif
82 
83 #define PPC_DEFAULT_CACHE_LINE_SIZE (1 << PPC_DEFAULT_CACHE_LINE_POWER)
84 
85 #define PPC_STRUCTURE_ALIGNMENT PPC_DEFAULT_CACHE_LINE_SIZE
86 
87 /*
88  * Application binary interfaces.
89  *
90  * PPC_ABI MUST be defined as one of these.
91  * Only big endian is currently supported.
92  */
93 
94 /*
95  * SVR4 ABI
96  */
97 #define PPC_ABI_SVR4 2
98 /*
99  * Embedded ABI
100  */
101 #define PPC_ABI_EABI 3
102 
103 /*
104  * Default to the EABI used by current GNU tools
105  */
106 
107 #ifndef PPC_ABI
108 #define PPC_ABI PPC_ABI_EABI
109 #endif
110 
111 /*
112  * Use worst case stack alignment. For the EABI an 8-byte alignment would be
113  * sufficient.
114  */
115 
116 #define PPC_STACK_ALIGN_POWER 4
117 #define PPC_STACK_ALIGNMENT (1 << PPC_STACK_ALIGN_POWER)
118 
119 /*
120  * Assume PPC_HAS_FPU to be a synonym for _SOFT_FLOAT.
121  */
122 
123 #if defined(_SOFT_FLOAT) \
124  || defined(__NO_FPRS__) /* e500 has unified integer/FP registers */ \
125  || defined(__PPC_CPU_E6500__)
126 #define PPC_HAS_FPU 0
127 #else
128 #define PPC_HAS_FPU 1
129 #endif
130 
131 #if defined(__PPC_CPU_E6500__) && defined(__ALTIVEC__)
132 #define PPC_MULTILIB_ALTIVEC
133 #endif
134 
135 #if defined(__PPC_CPU_E6500__) && !defined(_SOFT_FLOAT)
136 #define PPC_MULTILIB_FPU
137 #endif
138 
139 /*
140  * Unless specified above, If the model has FP support, it is assumed to
141  * support doubles (8-byte floating point numbers).
142  *
143  * If the model does NOT have FP support, then the model does
144  * NOT have double length FP registers.
145  */
146 
147 #if (PPC_HAS_FPU)
148 #define PPC_HAS_DOUBLE 1
149 #else
150 #define PPC_HAS_DOUBLE 0
151 #endif
152 
153 /*
154  * Assemblers.
155  * PPC_ASM MUST be defined as one of these.
156  *
157  * PPC_ASM_ELF: ELF assembler. Currently used for all ABIs.
158  *
159  * NOTE: Only PPC_ABI_ELF is currently fully supported.
160  *
161  * Also NOTE: cpukit doesn't need this but asm.h which is defined
162  * in cpukit for consistency with other ports does.
163  */
164 
165 #define PPC_ASM_ELF 0
166 
167 /*
168  * Default to the assembler format used by the current GNU tools.
169  */
170 #define PPC_ASM PPC_ASM_ELF
171 
172 
173 #ifdef __cplusplus
174 }
175 #endif
176 
177 #endif /* _RTEMS_SCORE_POWERPC_H */