source: rtems/cpukit/score/cpu/powerpc/rtems/score/powerpc.h @ f2e6c3e

4.115
Last change on this file since f2e6c3e was 3e2647a7, checked in by Sebastian Huber <sebastian.huber@…>, on 12/23/14 at 13:18:06

powerpc: AltiVec? and FPU context support

Add AltiVec? and FPU support to the Context_Control in case we use the
e6500 multilib.

Add PPC_MULTILIB_ALTIVEC and PPC_MULTILIB_FPU multilib defines. Add
non-volatile AltiVec? and FPU context to Context_Control. Add save/restore of
non-volatile AltiVec? and FPU to _CPU_Context_switch(). Add save/restore
of volatile AltiVec? and FPU context to the exception code. Adjust data
cache optimizations for the new context and cache line size.

  • Property mode set to 100644
File size: 4.0 KB
Line 
1/**
2 * @file
3 *
4 * @brief IBM/Motorola Power Pc Definitions
5 *
6 * This file contains definitions for the IBM/Motorola PowerPC
7 * family members.
8 */
9
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
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 */
Note: See TracBrowser for help on using the repository browser.