Commit 332fd57b92d26e2ac6112340b98e92bb76117a41

Authored by Paul Mundt
1 parent b6d7b66609

sh: Bring the SH-5 FPU in line with the SH-4 FPU API.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>

Showing 9 changed files with 59 additions and 59 deletions Side-by-side Diff

arch/sh/kernel/cpu/sh5/fpu.c
... ... @@ -30,12 +30,12 @@
30 30  
31 31 static union sh_fpu_union init_fpuregs = {
32 32 .hard = {
33   - .fp_regs = { [0 ... 63] = sNAN32 },
34   - .fpscr = FPSCR_INIT
  33 + .fp_regs = { [0 ... 63] = sNAN32 },
  34 + .fpscr = FPSCR_INIT
35 35 }
36 36 };
37 37  
38   -inline void fpsave(struct sh_fpu_hard_struct *fpregs)
  38 +void save_fpu(struct task_struct *tsk, struct pt_regs *regs)
39 39 {
40 40 asm volatile("fst.p %0, (0*8), fp0\n\t"
41 41 "fst.p %0, (1*8), fp2\n\t"
42 42  
... ... @@ -73,11 +73,10 @@
73 73 "fgetscr fr63\n\t"
74 74 "fst.s %0, (32*8), fr63\n\t"
75 75 : /* no output */
76   - : "r" (fpregs)
  76 + : "r" (&tsk->thread.fpu.hard)
77 77 : "memory");
78 78 }
79 79  
80   -
81 80 static inline void
82 81 fpload(struct sh_fpu_hard_struct *fpregs)
83 82 {
84 83  
... ... @@ -153,10 +152,10 @@
153 152 return;
154 153  
155 154 enable_fpu();
156   - if (last_task_used_math != NULL) {
  155 + if (last_task_used_math != NULL)
157 156 /* Other processes fpu state, save away */
158   - fpsave(&last_task_used_math->thread.fpu.hard);
159   - }
  157 + save_fpu(last_task_used_math, regs);
  158 +
160 159 last_task_used_math = current;
161 160 if (used_math()) {
162 161 fpload(&current->thread.fpu.hard);
arch/sh/kernel/process_64.c
... ... @@ -480,7 +480,7 @@
480 480 if (fpvalid) {
481 481 if (current == last_task_used_math) {
482 482 enable_fpu();
483   - fpsave(&tsk->thread.fpu.hard);
  483 + save_fpu(tsk, regs);
484 484 disable_fpu();
485 485 last_task_used_math = 0;
486 486 regs->sr |= SR_FD;
... ... @@ -507,7 +507,7 @@
507 507 #ifdef CONFIG_SH_FPU
508 508 if(last_task_used_math == current) {
509 509 enable_fpu();
510   - fpsave(&current->thread.fpu.hard);
  510 + save_fpu(current, regs);
511 511 disable_fpu();
512 512 last_task_used_math = NULL;
513 513 regs->sr |= SR_FD;
arch/sh/kernel/ptrace_64.c
... ... @@ -75,7 +75,7 @@
75 75  
76 76 if (last_task_used_math == task) {
77 77 enable_fpu();
78   - fpsave(&task->thread.fpu.hard);
  78 + save_fpu(task, regs);
79 79 disable_fpu();
80 80 last_task_used_math = 0;
81 81 regs->sr |= SR_FD;
... ... @@ -111,7 +111,7 @@
111 111 set_stopped_child_used_math(task);
112 112 } else if (last_task_used_math == task) {
113 113 enable_fpu();
114   - fpsave(&task->thread.fpu.hard);
  114 + save_fpu(task, regs);
115 115 disable_fpu();
116 116 last_task_used_math = 0;
117 117 regs->sr |= SR_FD;
arch/sh/kernel/signal_64.c
... ... @@ -212,7 +212,7 @@
212 212  
213 213 if (current == last_task_used_math) {
214 214 enable_fpu();
215   - fpsave(&current->thread.fpu.hard);
  215 + save_fpu(current, regs);
216 216 disable_fpu();
217 217 last_task_used_math = NULL;
218 218 regs->sr |= SR_FD;
arch/sh/kernel/traps_64.c
... ... @@ -618,7 +618,7 @@
618 618 indexed by register number. */
619 619 if (last_task_used_math == current) {
620 620 enable_fpu();
621   - fpsave(&current->thread.fpu.hard);
  621 + save_fpu(current, regs);
622 622 disable_fpu();
623 623 last_task_used_math = NULL;
624 624 regs->sr |= SR_FD;
... ... @@ -691,7 +691,7 @@
691 691 indexed by register number. */
692 692 if (last_task_used_math == current) {
693 693 enable_fpu();
694   - fpsave(&current->thread.fpu.hard);
  694 + save_fpu(current, regs);
695 695 disable_fpu();
696 696 last_task_used_math = NULL;
697 697 regs->sr |= SR_FD;
include/asm-sh/fpu.h
  1 +#ifndef __ASM_SH_FPU_H
  2 +#define __ASM_SH_FPU_H
  3 +
  4 +#define SR_FD 0x00008000
  5 +
  6 +#ifndef __ASSEMBLY__
  7 +#include <asm/ptrace.h>
  8 +
  9 +#ifdef CONFIG_SH_FPU
  10 +static inline void release_fpu(struct pt_regs *regs)
  11 +{
  12 + regs->sr |= SR_FD;
  13 +}
  14 +
  15 +static inline void grab_fpu(struct pt_regs *regs)
  16 +{
  17 + regs->sr &= ~SR_FD;
  18 +}
  19 +
  20 +struct task_struct;
  21 +
  22 +extern void save_fpu(struct task_struct *__tsk, struct pt_regs *regs);
  23 +#else
  24 +#define release_fpu(regs) do { } while (0)
  25 +#define grab_fpu(regs) do { } while (0)
  26 +#define save_fpu(tsk, regs) do { } while (0)
  27 +#endif
  28 +
  29 +#define unlazy_fpu(tsk, regs) do { \
  30 + if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \
  31 + save_fpu(tsk, regs); \
  32 + } \
  33 +} while (0)
  34 +
  35 +#define clear_fpu(tsk, regs) do { \
  36 + if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \
  37 + clear_tsk_thread_flag(tsk, TIF_USEDFPU); \
  38 + release_fpu(regs); \
  39 + } \
  40 +} while (0)
  41 +
  42 +#endif /* __ASSEMBLY__ */
  43 +
  44 +#endif /* __ASM_SH_FPU_H */
include/asm-sh/processor.h
... ... @@ -2,9 +2,9 @@
2 2 #define __ASM_SH_PROCESSOR_H
3 3  
4 4 #include <asm/cpu-features.h>
  5 +#include <asm/fpu.h>
5 6  
6 7 #ifndef __ASSEMBLY__
7   -
8 8 /*
9 9 * CPU type and hardware bug flags. Kept separately for each CPU.
10 10 *
include/asm-sh/processor_32.h
... ... @@ -65,7 +65,6 @@
65 65 * IMASK-bit:
66 66 * Interrupt level mask
67 67 */
68   -#define SR_FD 0x00008000
69 68 #define SR_DSP 0x00001000
70 69 #define SR_IMASK 0x000000f0
71 70  
... ... @@ -177,31 +176,6 @@
177 176 : "=&r" (__dummy)
178 177 : "r" (~SR_FD));
179 178 }
180   -
181   -static __inline__ void release_fpu(struct pt_regs *regs)
182   -{
183   - regs->sr |= SR_FD;
184   -}
185   -
186   -static __inline__ void grab_fpu(struct pt_regs *regs)
187   -{
188   - regs->sr &= ~SR_FD;
189   -}
190   -
191   -extern void save_fpu(struct task_struct *__tsk, struct pt_regs *regs);
192   -
193   -#define unlazy_fpu(tsk, regs) do { \
194   - if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \
195   - save_fpu(tsk, regs); \
196   - } \
197   -} while (0)
198   -
199   -#define clear_fpu(tsk, regs) do { \
200   - if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \
201   - clear_tsk_thread_flag(tsk, TIF_USEDFPU); \
202   - release_fpu(regs); \
203   - } \
204   -} while (0)
205 179  
206 180 /* Double presision, NANS as NANS, rounding to nearest, no exceptions */
207 181 #define FPSCR_INIT 0x00080000
include/asm-sh/processor_64.h
... ... @@ -102,8 +102,6 @@
102 102 * Single step bit
103 103 *
104 104 */
105   -#define SR_FD 0x00008000
106   -
107 105 #if defined(CONFIG_SH64_SR_WATCH)
108 106 #define SR_MMU 0x84000000
109 107 #else
... ... @@ -243,16 +241,6 @@
243 241 : "r" (~SR_FD));
244 242 }
245 243  
246   -static inline void release_fpu(struct pt_regs *regs)
247   -{
248   - regs->sr |= SR_FD;
249   -}
250   -
251   -static inline void grab_fpu(struct pt_regs *regs)
252   -{
253   - regs->sr &= ~SR_FD;
254   -}
255   -
256 244 /* Round to nearest, no exceptions on inexact, overflow, underflow,
257 245 zero-divide, invalid. Configure option for whether to flush denorms to
258 246 zero, or except if a denorm is encountered. */
259 247  
... ... @@ -263,13 +251,9 @@
263 251 #endif
264 252  
265 253 #ifdef CONFIG_SH_FPU
266   -/* Save the current FP regs */
267   -void fpsave(struct sh_fpu_hard_struct *fpregs);
268   -
269 254 /* Initialise the FP state of a task */
270 255 void fpinit(struct sh_fpu_hard_struct *fpregs);
271 256 #else
272   -#define fpsave(fpregs) do { } while (0)
273 257 #define fpinit(fpregs) do { } while (0)
274 258 #endif
275 259