diff options
Diffstat (limited to 'arch/m68k/include/asm/processor.h')
-rw-r--r-- | arch/m68k/include/asm/processor.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/m68k/include/asm/processor.h b/arch/m68k/include/asm/processor.h index 7a6a7590cc0..278c69bad57 100644 --- a/arch/m68k/include/asm/processor.h +++ b/arch/m68k/include/asm/processor.h | |||
@@ -20,23 +20,26 @@ | |||
20 | 20 | ||
21 | static inline unsigned long rdusp(void) | 21 | static inline unsigned long rdusp(void) |
22 | { | 22 | { |
23 | #ifdef CONFIG_COLDFIRE | 23 | #ifdef CONFIG_COLDFIRE_SW_A7 |
24 | extern unsigned int sw_usp; | 24 | extern unsigned int sw_usp; |
25 | return sw_usp; | 25 | return sw_usp; |
26 | #else | 26 | #else |
27 | unsigned long usp; | 27 | register unsigned long usp __asm__("a0"); |
28 | __asm__ __volatile__("move %/usp,%0" : "=a" (usp)); | 28 | /* move %usp,%a0 */ |
29 | __asm__ __volatile__(".word 0x4e68" : "=a" (usp)); | ||
29 | return usp; | 30 | return usp; |
30 | #endif | 31 | #endif |
31 | } | 32 | } |
32 | 33 | ||
33 | static inline void wrusp(unsigned long usp) | 34 | static inline void wrusp(unsigned long usp) |
34 | { | 35 | { |
35 | #ifdef CONFIG_COLDFIRE | 36 | #ifdef CONFIG_COLDFIRE_SW_A7 |
36 | extern unsigned int sw_usp; | 37 | extern unsigned int sw_usp; |
37 | sw_usp = usp; | 38 | sw_usp = usp; |
38 | #else | 39 | #else |
39 | __asm__ __volatile__("move %0,%/usp" : : "a" (usp)); | 40 | register unsigned long a0 __asm__("a0") = usp; |
41 | /* move %a0,%usp */ | ||
42 | __asm__ __volatile__(".word 0x4e60" : : "a" (a0) ); | ||
40 | #endif | 43 | #endif |
41 | } | 44 | } |
42 | 45 | ||