summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2007-11-22 17:30:50 +0900
committerPaul Mundt <lethal@linux-sh.org>2008-01-28 13:18:55 +0900
commit332fd57b92d26e2ac6112340b98e92bb76117a41 (patch)
treefbbc00a900299ad91f46a74b8f2d42efaf4809af /include
parentb6d7b666097e79a8908e3c43fd55fd291a95e133 (diff)
sh: Bring the SH-5 FPU in line with the SH-4 FPU API.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-sh/fpu.h44
-rw-r--r--include/asm-sh/processor.h2
-rw-r--r--include/asm-sh/processor_32.h26
-rw-r--r--include/asm-sh/processor_64.h16
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