diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-09 14:59:33 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-10 09:58:37 +0100 |
commit | 38a1449fd47be848cc40593abd40262e9ad2030d (patch) | |
tree | e559758984306acb4b4f0e0f88e9a133213557f0 /cpukit/score/cpu/powerpc/rtems | |
parent | score: Move _CPU_Get_current_per_CPU_control() (diff) | |
download | rtems-38a1449fd47be848cc40593abd40262e9ad2030d.tar.bz2 |
powerpc: Add _CPU_Get_current_per_CPU_control()
Add _CPU_Get_current_per_CPU_control() on SMP configurations. Use SPRG0
for the current per-CPU control. This reduces the code size by three
instructions and is slightly faster.
Update #2805.
Diffstat (limited to 'cpukit/score/cpu/powerpc/rtems')
-rw-r--r-- | cpukit/score/cpu/powerpc/rtems/score/cpuimpl.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/cpukit/score/cpu/powerpc/rtems/score/cpuimpl.h b/cpukit/score/cpu/powerpc/rtems/score/cpuimpl.h index 6b8b601cb0..6b8886d42a 100644 --- a/cpukit/score/cpu/powerpc/rtems/score/cpuimpl.h +++ b/cpukit/score/cpu/powerpc/rtems/score/cpuimpl.h @@ -5,6 +5,8 @@ */ /* + * Copyright (c) 2016 embedded brains GmbH + * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.org/license/LICENSE. @@ -15,12 +17,37 @@ #include <rtems/score/cpu.h> +#ifdef RTEMS_SMP + +/* Use SPRG0 for the per-CPU control of the current processor */ +#define PPC_PER_CPU_CONTROL_REGISTER 272 + +#endif /* RTEMS_SMP */ + #ifndef ASM #ifdef __cplusplus extern "C" { #endif +#ifdef RTEMS_SMP + +static inline struct Per_CPU_Control *_PPC_Get_current_per_CPU_control( void ) +{ + struct Per_CPU_Control *cpu_self; + + __asm__ volatile ( + "mfspr %0, " RTEMS_XSTRING( PPC_PER_CPU_CONTROL_REGISTER ) + : "=r" ( cpu_self ) + ); + + return cpu_self; +} + +#define _CPU_Get_current_per_CPU_control() _PPC_Get_current_per_CPU_control() + +#endif /* RTEMS_SMP */ + #ifdef __cplusplus } #endif |