home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sh / include / asm / fpu.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.6 KB  |  75 lines

  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
  9. static inline void release_fpu(struct pt_regs *regs)
  10. {
  11.     regs->sr |= SR_FD;
  12. }
  13.  
  14. static inline void grab_fpu(struct pt_regs *regs)
  15. {
  16.     regs->sr &= ~SR_FD;
  17. }
  18.  
  19. struct task_struct;
  20.  
  21. extern 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.  
  27. static 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.  
  33. struct user_regset;
  34.  
  35. extern int do_fpu_inst(unsigned short, struct pt_regs *);
  36.  
  37. extern int fpregs_get(struct task_struct *target,
  38.               const struct user_regset *regset,
  39.               unsigned int pos, unsigned int count,
  40.               void *kbuf, void __user *ubuf);
  41.  
  42. static inline void unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs)
  43. {
  44.     preempt_disable();
  45.     if (test_tsk_thread_flag(tsk, TIF_USEDFPU))
  46.         save_fpu(tsk, regs);
  47.     preempt_enable();
  48. }
  49.  
  50. static inline void clear_fpu(struct task_struct *tsk, struct pt_regs *regs)
  51. {
  52.     preempt_disable();
  53.     if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) {
  54.         clear_tsk_thread_flag(tsk, TIF_USEDFPU);
  55.         release_fpu(regs);
  56.     }
  57.     preempt_enable();
  58. }
  59.  
  60. static inline int init_fpu(struct task_struct *tsk)
  61. {
  62.     if (tsk_used_math(tsk)) {
  63.         if ((boot_cpu_data.flags & CPU_HAS_FPU) && tsk == current)
  64.             unlazy_fpu(tsk, task_pt_regs(tsk));
  65.         return 0;
  66.     }
  67.  
  68.     set_stopped_child_used_math(tsk);
  69.     return 0;
  70. }
  71.  
  72. #endif /* __ASSEMBLY__ */
  73.  
  74. #endif /* __ASM_SH_FPU_H */
  75.