| /* |
| * Copyright (C) 2004 Microtronix Datacom Ltd. |
| * |
| * This file is subject to the terms and conditions of the GNU General Public |
| * License. See the file "COPYING" in the main directory of this archive |
| * for more details. |
| */ |
| #ifndef _ASM_NIOS2_SWITCH_TO_H |
| #define _ASM_NIOS2_SWITCH_TO_H |
| |
| /* |
| * switch_to(n) should switch tasks to task ptr, first checking that |
| * ptr isn't the current task, in which case it does nothing. This |
| * also clears the TS-flag if the task we switched to has used the |
| * math co-processor latest. |
| */ |
| #define switch_to(prev, next, last) \ |
| { \ |
| void *_last; \ |
| __asm__ __volatile__ ( \ |
| "mov r4, %1\n" \ |
| "mov r5, %2\n" \ |
| "call resume\n" \ |
| "mov %0,r4\n" \ |
| : "=r" (_last) \ |
| : "r" (prev), "r" (next) \ |
| : "r4", "r5", "r7", "r8", "ra"); \ |
| (last) = _last; \ |
| } |
| |
| #endif /* _ASM_NIOS2_SWITCH_TO_H */ |