summaryrefslogtreecommitdiffstats
path: root/cpukit/score
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-04-08 16:37:34 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-04-08 16:37:34 +0000
commit4ad5526709f61e331db6054d3b8e936ebff772ca (patch)
treeec2b3f0bba068acc45f4f224f762267ae9fa8994 /cpukit/score
parent2010-04-08 Joel Sherrill <joel.sherrilL@OARcorp.com> (diff)
downloadrtems-4ad5526709f61e331db6054d3b8e936ebff772ca.tar.bz2
2010-04-08 Till Straumann <strauman@slac.stanford.edu>
* 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.
Diffstat (limited to 'cpukit/score')
-rw-r--r--cpukit/score/cpu/m68k/ChangeLog6
-rw-r--r--cpukit/score/cpu/m68k/cpu_asm.S13
-rw-r--r--cpukit/score/cpu/m68k/rtems/score/cpu.h12
3 files changed, 23 insertions, 8 deletions
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 <strauman@slac.stanford.edu>
+
+ * 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 <joel.sherrill@oarcorp.com>
* 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
*