Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.26-rc6 55 lines 1.1 kB view raw
1#ifndef __ASM_SH_FPU_H 2#define __ASM_SH_FPU_H 3 4#ifndef __ASSEMBLY__ 5#include <linux/preempt.h> 6#include <asm/ptrace.h> 7 8#ifdef CONFIG_SH_FPU 9static inline void release_fpu(struct pt_regs *regs) 10{ 11 regs->sr |= SR_FD; 12} 13 14static inline void grab_fpu(struct pt_regs *regs) 15{ 16 regs->sr &= ~SR_FD; 17} 18 19struct task_struct; 20 21extern void save_fpu(struct task_struct *__tsk, struct pt_regs *regs); 22#else 23 24#define release_fpu(regs) do { } while (0) 25#define grab_fpu(regs) do { } while (0) 26 27static inline void save_fpu(struct task_struct *tsk, struct pt_regs *regs) 28{ 29 clear_tsk_thread_flag(tsk, TIF_USEDFPU); 30} 31#endif 32 33extern int do_fpu_inst(unsigned short, struct pt_regs *); 34 35static inline void unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs) 36{ 37 preempt_disable(); 38 if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) 39 save_fpu(tsk, regs); 40 preempt_enable(); 41} 42 43static inline void clear_fpu(struct task_struct *tsk, struct pt_regs *regs) 44{ 45 preempt_disable(); 46 if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { 47 clear_tsk_thread_flag(tsk, TIF_USEDFPU); 48 release_fpu(regs); 49 } 50 preempt_enable(); 51} 52 53#endif /* __ASSEMBLY__ */ 54 55#endif /* __ASM_SH_FPU_H */