39#ifndef _RTEMS_SCORE_CPUIMPL_H
40#define _RTEMS_SCORE_CPUIMPL_H
42#include <rtems/score/cpu.h>
56 #define FRAME_LINK_SPACE 32
58 #define FRAME_LINK_SPACE 8
61#define SRR0_FRAME_OFFSET FRAME_LINK_SPACE
62#define SRR1_FRAME_OFFSET (SRR0_FRAME_OFFSET + PPC_REG_SIZE)
63#define EXCEPTION_NUMBER_OFFSET (SRR1_FRAME_OFFSET + PPC_REG_SIZE)
64#define PPC_EXC_INTERRUPT_ENTRY_INSTANT_OFFSET (EXCEPTION_NUMBER_OFFSET + 4)
65#define EXC_CR_OFFSET (EXCEPTION_NUMBER_OFFSET + 8)
66#define EXC_XER_OFFSET (EXC_CR_OFFSET + 4)
67#define EXC_CTR_OFFSET (EXC_XER_OFFSET + 4)
68#define EXC_LR_OFFSET (EXC_CTR_OFFSET + PPC_REG_SIZE)
69#define PPC_EXC_INTERRUPT_FRAME_OFFSET (EXC_LR_OFFSET + PPC_REG_SIZE)
72 #define PPC_EXC_GPR_OFFSET(gpr) \
73 ((gpr) * PPC_GPR_SIZE + PPC_EXC_INTERRUPT_FRAME_OFFSET + PPC_REG_SIZE)
74 #define PPC_EXC_GPR3_PROLOGUE_OFFSET PPC_EXC_GPR_OFFSET(3)
75 #if defined(PPC_MULTILIB_ALTIVEC) && defined(PPC_MULTILIB_FPU)
76 #define PPC_EXC_VRSAVE_OFFSET PPC_EXC_GPR_OFFSET(33)
77 #define PPC_EXC_VSCR_OFFSET (PPC_EXC_VRSAVE_OFFSET + 28)
78 #define PPC_EXC_VR_OFFSET(v) ((v) * 16 + PPC_EXC_VSCR_OFFSET + 4)
79 #define PPC_EXC_FR_OFFSET(f) ((f) * 8 + PPC_EXC_VR_OFFSET(32))
80 #define PPC_EXC_FPSCR_OFFSET PPC_EXC_FR_OFFSET(32)
81 #define PPC_EXC_FRAME_SIZE PPC_EXC_FR_OFFSET(34)
82 #define PPC_EXC_MIN_VSCR_OFFSET (PPC_EXC_GPR_OFFSET(13) + 12)
83 #define PPC_EXC_MIN_VR_OFFSET(v) ((v) * 16 + PPC_EXC_MIN_VSCR_OFFSET + 4)
84 #define PPC_EXC_MIN_FR_OFFSET(f) ((f) * 8 + PPC_EXC_MIN_VR_OFFSET(20))
85 #define PPC_EXC_MIN_FPSCR_OFFSET PPC_EXC_MIN_FR_OFFSET(14)
86 #define CPU_INTERRUPT_FRAME_SIZE \
87 (PPC_EXC_MIN_FR_OFFSET(16) + PPC_STACK_RED_ZONE_SIZE)
88 #elif defined(PPC_MULTILIB_ALTIVEC)
89 #define PPC_EXC_VRSAVE_OFFSET PPC_EXC_GPR_OFFSET(33)
90 #define PPC_EXC_VSCR_OFFSET (PPC_EXC_VRSAVE_OFFSET + 28)
91 #define PPC_EXC_VR_OFFSET(v) ((v) * 16 + PPC_EXC_VSCR_OFFSET + 4)
92 #define PPC_EXC_FRAME_SIZE PPC_EXC_VR_OFFSET(32)
93 #define PPC_EXC_MIN_VSCR_OFFSET (PPC_EXC_GPR_OFFSET(13) + 12)
94 #define PPC_EXC_MIN_VR_OFFSET(v) ((v) * 16 + PPC_EXC_MIN_VSCR_OFFSET + 4)
95 #define CPU_INTERRUPT_FRAME_SIZE \
96 (PPC_EXC_MIN_VR_OFFSET(20) + PPC_STACK_RED_ZONE_SIZE)
97 #elif defined(PPC_MULTILIB_FPU)
98 #define PPC_EXC_FR_OFFSET(f) ((f) * 8 + PPC_EXC_GPR_OFFSET(33))
99 #define PPC_EXC_FPSCR_OFFSET PPC_EXC_FR_OFFSET(32)
100 #define PPC_EXC_FRAME_SIZE PPC_EXC_FR_OFFSET(34)
101 #define PPC_EXC_MIN_FR_OFFSET(f) ((f) * 8 + PPC_EXC_GPR_OFFSET(13))
102 #define PPC_EXC_MIN_FPSCR_OFFSET PPC_EXC_MIN_FR_OFFSET(14)
103 #define CPU_INTERRUPT_FRAME_SIZE \
104 (PPC_EXC_MIN_FR_OFFSET(16) + PPC_STACK_RED_ZONE_SIZE)
106 #define PPC_EXC_FRAME_SIZE PPC_EXC_GPR_OFFSET(33)
107 #define CPU_INTERRUPT_FRAME_SIZE \
108 (PPC_EXC_GPR_OFFSET(13) + PPC_STACK_RED_ZONE_SIZE)
111 #define PPC_EXC_SPEFSCR_OFFSET 44
112 #define PPC_EXC_ACC_OFFSET 48
113 #define PPC_EXC_GPR_OFFSET(gpr) ((gpr) * PPC_GPR_SIZE + 56)
114 #define PPC_EXC_GPR3_PROLOGUE_OFFSET (PPC_EXC_GPR_OFFSET(3) + 4)
115 #define CPU_INTERRUPT_FRAME_SIZE (160 + PPC_STACK_RED_ZONE_SIZE)
116 #define PPC_EXC_FRAME_SIZE 320
119#define GPR0_OFFSET PPC_EXC_GPR_OFFSET(0)
120#define GPR1_OFFSET PPC_EXC_GPR_OFFSET(1)
121#define GPR2_OFFSET PPC_EXC_GPR_OFFSET(2)
122#define GPR3_OFFSET PPC_EXC_GPR_OFFSET(3)
123#define GPR4_OFFSET PPC_EXC_GPR_OFFSET(4)
124#define GPR5_OFFSET PPC_EXC_GPR_OFFSET(5)
125#define GPR6_OFFSET PPC_EXC_GPR_OFFSET(6)
126#define GPR7_OFFSET PPC_EXC_GPR_OFFSET(7)
127#define GPR8_OFFSET PPC_EXC_GPR_OFFSET(8)
128#define GPR9_OFFSET PPC_EXC_GPR_OFFSET(9)
129#define GPR10_OFFSET PPC_EXC_GPR_OFFSET(10)
130#define GPR11_OFFSET PPC_EXC_GPR_OFFSET(11)
131#define GPR12_OFFSET PPC_EXC_GPR_OFFSET(12)
132#define GPR13_OFFSET PPC_EXC_GPR_OFFSET(13)
133#define GPR14_OFFSET PPC_EXC_GPR_OFFSET(14)
134#define GPR15_OFFSET PPC_EXC_GPR_OFFSET(15)
135#define GPR16_OFFSET PPC_EXC_GPR_OFFSET(16)
136#define GPR17_OFFSET PPC_EXC_GPR_OFFSET(17)
137#define GPR18_OFFSET PPC_EXC_GPR_OFFSET(18)
138#define GPR19_OFFSET PPC_EXC_GPR_OFFSET(19)
139#define GPR20_OFFSET PPC_EXC_GPR_OFFSET(20)
140#define GPR21_OFFSET PPC_EXC_GPR_OFFSET(21)
141#define GPR22_OFFSET PPC_EXC_GPR_OFFSET(22)
142#define GPR23_OFFSET PPC_EXC_GPR_OFFSET(23)
143#define GPR24_OFFSET PPC_EXC_GPR_OFFSET(24)
144#define GPR25_OFFSET PPC_EXC_GPR_OFFSET(25)
145#define GPR26_OFFSET PPC_EXC_GPR_OFFSET(26)
146#define GPR27_OFFSET PPC_EXC_GPR_OFFSET(27)
147#define GPR28_OFFSET PPC_EXC_GPR_OFFSET(28)
148#define GPR29_OFFSET PPC_EXC_GPR_OFFSET(29)
149#define GPR30_OFFSET PPC_EXC_GPR_OFFSET(30)
150#define GPR31_OFFSET PPC_EXC_GPR_OFFSET(31)
152#define CPU_PER_CPU_CONTROL_SIZE 0
154#define CPU_THREAD_LOCAL_STORAGE_VARIANT 10
159#define PPC_PER_CPU_CONTROL_REGISTER 272
173 uint32_t FRAME_RESERVED;
181 uint32_t RESERVED_FOR_ALIGNMENT_0;
182 uint32_t EXC_INTERRUPT_ENTRY_INSTANT;
187 uintptr_t EXC_INTERRUPT_FRAME;
189 uint32_t EXC_SPEFSCR;
205 #ifdef PPC_MULTILIB_ALTIVEC
207 uint32_t RESERVED_FOR_ALIGNMENT_3[3];
231 #ifdef PPC_MULTILIB_FPU
247 uint64_t RESERVED_FOR_ALIGNMENT_4;
249 #if PPC_STACK_RED_ZONE_SIZE > 0
250 uint8_t RED_ZONE[ PPC_STACK_RED_ZONE_SIZE ];
256static inline struct Per_CPU_Control *_PPC_Get_current_per_CPU_control(
void )
268#define _CPU_Get_current_per_CPU_control() _PPC_Get_current_per_CPU_control()
272void _CPU_Context_volatile_clobber( uintptr_t pattern );
274void _CPU_Context_validate( uintptr_t pattern );
276static inline void _CPU_Instruction_illegal(
void )
278 __asm__
volatile (
".long 0" );
281static inline void _CPU_Instruction_no_operation(
void )
283 __asm__
volatile (
"nop" );
286static inline void _CPU_Use_thread_local_storage(
291 register uintptr_t tp __asm__(
"13" );
293 register uintptr_t tp __asm__(
"2" );
296 tp = ppc_get_context(
context )->tp;
299 __asm__
volatile (
"" : :
"r" ( tp ) );
302static inline void *_CPU_Get_TLS_thread_pointer(
306 return (
void *) ppc_get_context(
context )->tp;
#define RTEMS_XSTRING(...)
Stringifies the expansion of the arguments.
Definition: basedefs.h:987
rtems_termios_device_context * context
Definition: console-config.c:62
Interrupt stack frame (ISF).
Definition: cpuimpl.h:64
Thread register context.
Definition: cpu.h:173
Per CPU Core Structure.
Definition: percpu.h:384