RTEMS 5.2
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
49extern "C" {
50#endif
51
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#ifdef __PPC_CPU_E6500__
76#define PPC_DEFAULT_CACHE_LINE_POWER 6
77#else
78#define PPC_DEFAULT_CACHE_LINE_POWER 5
79#endif
80
81#define PPC_DEFAULT_CACHE_LINE_SIZE (1 << PPC_DEFAULT_CACHE_LINE_POWER)
82
83#define PPC_STRUCTURE_ALIGNMENT PPC_DEFAULT_CACHE_LINE_SIZE
84
85/*
86 * Application binary interfaces.
87 *
88 * PPC_ABI MUST be defined as one of these.
89 * Only big endian is currently supported.
90 */
91
92/*
93 * SVR4 ABI
94 */
95#define PPC_ABI_SVR4 2
96/*
97 * Embedded ABI
98 */
99#define PPC_ABI_EABI 3
100
101/*
102 * Default to the EABI used by current GNU tools
103 */
104
105#ifndef PPC_ABI
106#define PPC_ABI PPC_ABI_EABI
107#endif
108
109/*
110 * Use worst case stack alignment. For the EABI an 8-byte alignment would be
111 * sufficient.
112 */
113
114#define PPC_STACK_ALIGN_POWER 4
115#define PPC_STACK_ALIGNMENT (1 << PPC_STACK_ALIGN_POWER)
116
117/*
118 * Assume PPC_HAS_FPU to be a synonym for _SOFT_FLOAT.
119 */
120
121#if defined(_SOFT_FLOAT) \
122 || defined(__NO_FPRS__) /* e500 has unified integer/FP registers */ \
123 || defined(__PPC_CPU_E6500__)
124#define PPC_HAS_FPU 0
125#else
126#define PPC_HAS_FPU 1
127#endif
128
129#if defined(__PPC_CPU_E6500__) && defined(__ALTIVEC__)
130#define PPC_MULTILIB_ALTIVEC
131#endif
132
133#if defined(__PPC_CPU_E6500__) && !defined(_SOFT_FLOAT)
134#define PPC_MULTILIB_FPU
135#endif
136
137#ifdef PPC_MULTILIB_ALTIVEC
138#define PPC_ALIGNMENT 16
139#else
140#define PPC_ALIGNMENT 8
141#endif
142
143#ifdef __powerpc64__
144#define PPC_STACK_RED_ZONE_SIZE 512
145#else
146#define PPC_STACK_RED_ZONE_SIZE 0
147#endif
148
149/*
150 * Unless specified above, If the model has FP support, it is assumed to
151 * support doubles (8-byte floating point numbers).
152 *
153 * If the model does NOT have FP support, then the model does
154 * NOT have double length FP registers.
155 */
156
157#if (PPC_HAS_FPU)
158#define PPC_HAS_DOUBLE 1
159#else
160#define PPC_HAS_DOUBLE 0
161#endif
162
163/*
164 * Assemblers.
165 * PPC_ASM MUST be defined as one of these.
166 *
167 * PPC_ASM_ELF: ELF assembler. Currently used for all ABIs.
168 *
169 * NOTE: Only PPC_ABI_ELF is currently fully supported.
170 *
171 * Also NOTE: cpukit doesn't need this but asm.h which is defined
172 * in cpukit for consistency with other ports does.
173 */
174
175#define PPC_ASM_ELF 0
176
177/*
178 * Default to the assembler format used by the current GNU tools.
179 */
180#define PPC_ASM PPC_ASM_ELF
181
182
183#ifdef __cplusplus
184}
185#endif
186
187#endif /* _RTEMS_SCORE_POWERPC_H */
Basic Definitions.