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 7a6a7590cc02..278c69bad57a 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 | ||
