From 4ad5526709f61e331db6054d3b8e936ebff772ca Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 8 Apr 2010 16:37:34 +0000 Subject: 2010-04-08 Till Straumann * cpu_asm.S, rtems/score/cpu.h: On uC5282, the thread restart needed to reload the frame pointer. As part of doing this, the code was moved from inline asm to the .S file. --- cpukit/score/cpu/m68k/ChangeLog | 6 ++++++ cpukit/score/cpu/m68k/cpu_asm.S | 13 +++++++++++++ cpukit/score/cpu/m68k/rtems/score/cpu.h | 12 ++++-------- 3 files changed, 23 insertions(+), 8 deletions(-) (limited to 'cpukit/score') diff --git a/cpukit/score/cpu/m68k/ChangeLog b/cpukit/score/cpu/m68k/ChangeLog index 33698ed19f..f424d59e50 100644 --- a/cpukit/score/cpu/m68k/ChangeLog +++ b/cpukit/score/cpu/m68k/ChangeLog @@ -1,3 +1,9 @@ +2010-04-08 Till Straumann + + * cpu_asm.S, rtems/score/cpu.h: On uC5282, the thread restart needed to + reload the frame pointer. As part of doing this, the code was moved + from inline asm to the .S file. + 2010-03-27 Joel Sherrill * cpu.c, cpu_asm.S: Add include of config.h diff --git a/cpukit/score/cpu/m68k/cpu_asm.S b/cpukit/score/cpu/m68k/cpu_asm.S index a6f5c317f3..a8bbdef2ea 100644 --- a/cpukit/score/cpu/m68k/cpu_asm.S +++ b/cpukit/score/cpu/m68k/cpu_asm.S @@ -61,10 +61,23 @@ cacr_set: movew sr,d1 | get content of sr in d1 movec d0,cacr | enable FPU in cacr #endif + restore: movml a0@,d1-d7/a2-a7 | restore context movw d1,sr | restore status register rts + .global SYM (_CPU_Context_Restart_self) +.set CONTEXT_ARG, 4 | context arg + +#if defined( __mcoldfire__ ) && ( M68K_HAS_FPU == 1 ) +/* XXX _CPU_Context_switch maintains FPU context -- do we have to restore + * that, too?? + */ +#warning "_CPU_Context_Restart_self restoring FPU context not implemented" +#endif +SYM(_CPU_Context_Restart_self): + moval a7@(CONTEXT_ARG),a0 + bra restore /* * Floating point context save and restore. * diff --git a/cpukit/score/cpu/m68k/rtems/score/cpu.h b/cpukit/score/cpu/m68k/rtems/score/cpu.h index 9b004ccfc6..461f3dbc28 100644 --- a/cpukit/score/cpu/m68k/rtems/score/cpu.h +++ b/cpukit/score/cpu/m68k/rtems/score/cpu.h @@ -472,14 +472,6 @@ uint32_t _CPU_ISR_Get_level( void ); } while ( 0 ) #endif -#define _CPU_Context_Restart_self( _the_context ) \ - { asm volatile( "movew %0,%%sr ; " \ - "moval %1,%%a7 ; " \ - "rts" \ - : "=d" ((_the_context)->sr), "=d" ((_the_context)->a7_msp) \ - : "0" ((_the_context)->sr), "1" ((_the_context)->a7_msp) ); \ - } - /* end of Context handler macros */ /* @@ -700,6 +692,10 @@ void _CPU_Context_switch( Context_Control *heir ); +void _CPU_Context_Restart_self( + Context_Control *the_context +); + /* * _CPU_Context_save_fp * -- cgit v1.2.3