fpu.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef __ASM_SH_FPU_H
  2. #define __ASM_SH_FPU_H
  3. #ifndef __ASSEMBLY__
  4. struct task_struct;
  5. #ifdef CONFIG_SH_FPU
  6. static inline void release_fpu(struct pt_regs *regs)
  7. {
  8. regs->sr |= SR_FD;
  9. }
  10. static inline void grab_fpu(struct pt_regs *regs)
  11. {
  12. regs->sr &= ~SR_FD;
  13. }
  14. extern void save_fpu(struct task_struct *__tsk);
  15. extern void restore_fpu(struct task_struct *__tsk);
  16. extern void fpu_state_restore(struct pt_regs *regs);
  17. extern void __fpu_state_restore(void);
  18. #else
  19. #define save_fpu(tsk) do { } while (0)
  20. #define restore_fpu(tsk) do { } while (0)
  21. #define release_fpu(regs) do { } while (0)
  22. #define grab_fpu(regs) do { } while (0)
  23. #define fpu_state_restore(regs) do { } while (0)
  24. #define __fpu_state_restore(regs) do { } while (0)
  25. #endif
  26. struct user_regset;
  27. extern int do_fpu_inst(unsigned short, struct pt_regs *);
  28. extern int init_fpu(struct task_struct *);
  29. extern int fpregs_get(struct task_struct *target,
  30. const struct user_regset *regset,
  31. unsigned int pos, unsigned int count,
  32. void *kbuf, void __user *ubuf);
  33. static inline void __unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs)
  34. {
  35. if (task_thread_info(tsk)->status & TS_USEDFPU) {
  36. task_thread_info(tsk)->status &= ~TS_USEDFPU;
  37. save_fpu(tsk);
  38. release_fpu(regs);
  39. } else
  40. tsk->thread.fpu_counter = 0;
  41. }
  42. static inline void unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs)
  43. {
  44. preempt_disable();
  45. __unlazy_fpu(tsk, regs);
  46. preempt_enable();
  47. }
  48. static inline void clear_fpu(struct task_struct *tsk, struct pt_regs *regs)
  49. {
  50. preempt_disable();
  51. if (task_thread_info(tsk)->status & TS_USEDFPU) {
  52. task_thread_info(tsk)->status &= ~TS_USEDFPU;
  53. release_fpu(regs);
  54. }
  55. preempt_enable();
  56. }
  57. #endif /* __ASSEMBLY__ */
  58. #endif /* __ASM_SH_FPU_H */