diff options
Diffstat (limited to 'include/asm-sh')
-rw-r--r-- | include/asm-sh/fpu.h | 44 | ||||
-rw-r--r-- | include/asm-sh/processor.h | 2 | ||||
-rw-r--r-- | include/asm-sh/processor_32.h | 26 | ||||
-rw-r--r-- | include/asm-sh/processor_64.h | 16 |
4 files changed, 45 insertions, 43 deletions
diff --git a/include/asm-sh/fpu.h b/include/asm-sh/fpu.h new file mode 100644 index 00000000000..33db698a6b4 --- /dev/null +++ b/include/asm-sh/fpu.h @@ -0,0 +1,44 @@ +#ifndef __ASM_SH_FPU_H +#define __ASM_SH_FPU_H + +#define SR_FD 0x00008000 + +#ifndef __ASSEMBLY__ +#include <asm/ptrace.h> + +#ifdef CONFIG_SH_FPU +static inline void release_fpu(struct pt_regs *regs) +{ + regs->sr |= SR_FD; +} + +static inline void grab_fpu(struct pt_regs *regs) +{ + regs->sr &= ~SR_FD; +} + +struct task_struct; + +extern void save_fpu(struct task_struct *__tsk, struct pt_regs *regs); +#else +#define release_fpu(regs) do { } while (0) +#define grab_fpu(regs) do { } while (0) +#define save_fpu(tsk, regs) do { } while (0) +#endif + +#define unlazy_fpu(tsk, regs) do { \ + if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \ + save_fpu(tsk, regs); \ + } \ +} while (0) + +#define clear_fpu(tsk, regs) do { \ + if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \ + clear_tsk_thread_flag(tsk, TIF_USEDFPU); \ + release_fpu(regs); \ + } \ +} while (0) + +#endif /* __ASSEMBLY__ */ + +#endif /* __ASM_SH_FPU_H */ diff --git a/include/asm-sh/processor.h b/include/asm-sh/processor.h index f3bd82e9589..3ae2a1c223f 100644 --- a/include/asm-sh/processor.h +++ b/include/asm-sh/processor.h @@ -2,9 +2,9 @@ #define __ASM_SH_PROCESSOR_H #include <asm/cpu-features.h> +#include <asm/fpu.h> #ifndef __ASSEMBLY__ - /* * CPU type and hardware bug flags. Kept separately for each CPU. * diff --git a/include/asm-sh/processor_32.h b/include/asm-sh/processor_32.h index 1ad74633c00..a7edaa1a870 100644 --- a/include/asm-sh/processor_32.h +++ b/include/asm-sh/processor_32.h @@ -65,7 +65,6 @@ extern struct sh_cpuinfo cpu_data[]; * IMASK-bit: * Interrupt level mask */ -#define SR_FD 0x00008000 #define SR_DSP 0x00001000 #define SR_IMASK 0x000000f0 @@ -178,31 +177,6 @@ static __inline__ void enable_fpu(void) : "r" (~SR_FD)); } -static __inline__ void release_fpu(struct pt_regs *regs) -{ - regs->sr |= SR_FD; -} - -static __inline__ void grab_fpu(struct pt_regs *regs) -{ - regs->sr &= ~SR_FD; -} - -extern void save_fpu(struct task_struct *__tsk, struct pt_regs *regs); - -#define unlazy_fpu(tsk, regs) do { \ - if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \ - save_fpu(tsk, regs); \ - } \ -} while (0) - -#define clear_fpu(tsk, regs) do { \ - if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \ - clear_tsk_thread_flag(tsk, TIF_USEDFPU); \ - release_fpu(regs); \ - } \ -} while (0) - /* Double presision, NANS as NANS, rounding to nearest, no exceptions */ #define FPSCR_INIT 0x00080000 diff --git a/include/asm-sh/processor_64.h b/include/asm-sh/processor_64.h index f5464822923..99c22b14a85 100644 --- a/include/asm-sh/processor_64.h +++ b/include/asm-sh/processor_64.h @@ -102,8 +102,6 @@ extern struct sh_cpuinfo cpu_data[]; * Single step bit * */ -#define SR_FD 0x00008000 - #if defined(CONFIG_SH64_SR_WATCH) #define SR_MMU 0x84000000 #else @@ -243,16 +241,6 @@ static inline void enable_fpu(void) : "r" (~SR_FD)); } -static inline void release_fpu(struct pt_regs *regs) -{ - regs->sr |= SR_FD; -} - -static inline void grab_fpu(struct pt_regs *regs) -{ - regs->sr &= ~SR_FD; -} - /* Round to nearest, no exceptions on inexact, overflow, underflow, zero-divide, invalid. Configure option for whether to flush denorms to zero, or except if a denorm is encountered. */ @@ -263,13 +251,9 @@ static inline void grab_fpu(struct pt_regs *regs) #endif #ifdef CONFIG_SH_FPU -/* Save the current FP regs */ -void fpsave(struct sh_fpu_hard_struct *fpregs); - /* Initialise the FP state of a task */ void fpinit(struct sh_fpu_hard_struct *fpregs); #else -#define fpsave(fpregs) do { } while (0) #define fpinit(fpregs) do { } while (0) #endif |