root/arch/sh/include/asm/fpu.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. release_fpu
  2. grab_fpu
  3. __unlazy_fpu
  4. unlazy_fpu
  5. clear_fpu

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

/* [<][>][^][v][top][bottom][index][help] */