Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 77792
b: refs/heads/master
c: 332fd57
h: refs/heads/master
v: v3
  • Loading branch information
Paul Mundt committed Jan 28, 2008
1 parent ce2cd14 commit 44a7a8f
Show file tree
Hide file tree
Showing 10 changed files with 60 additions and 60 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b6d7b666097e79a8908e3c43fd55fd291a95e133
refs/heads/master: 332fd57b92d26e2ac6112340b98e92bb76117a41
16 changes: 7 additions & 9 deletions trunk/arch/sh/kernel/cpu/sh5/fpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@

static union sh_fpu_union init_fpuregs = {
.hard = {
.fp_regs = { [0 ... 63] = sNAN32 },
.fpscr = FPSCR_INIT
.fp_regs = { [0 ... 63] = sNAN32 },
.fpscr = FPSCR_INIT
}
};

inline void fpsave(struct sh_fpu_hard_struct *fpregs)
void save_fpu(struct task_struct *tsk, struct pt_regs *regs)
{
asm volatile("fst.p %0, (0*8), fp0\n\t"
"fst.p %0, (1*8), fp2\n\t"
Expand Down Expand Up @@ -73,11 +73,10 @@ inline void fpsave(struct sh_fpu_hard_struct *fpregs)
"fgetscr fr63\n\t"
"fst.s %0, (32*8), fr63\n\t"
: /* no output */
: "r" (fpregs)
: "r" (&tsk->thread.fpu.hard)
: "memory");
}


static inline void
fpload(struct sh_fpu_hard_struct *fpregs)
{
Expand Down Expand Up @@ -153,10 +152,10 @@ do_fpu_state_restore(unsigned long ex, struct pt_regs *regs)
return;

enable_fpu();
if (last_task_used_math != NULL) {
if (last_task_used_math != NULL)
/* Other processes fpu state, save away */
fpsave(&last_task_used_math->thread.fpu.hard);
}
save_fpu(last_task_used_math, regs);

last_task_used_math = current;
if (used_math()) {
fpload(&current->thread.fpu.hard);
Expand All @@ -167,4 +166,3 @@ do_fpu_state_restore(unsigned long ex, struct pt_regs *regs)
}
disable_fpu();
}

4 changes: 2 additions & 2 deletions trunk/arch/sh/kernel/process_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,7 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
if (fpvalid) {
if (current == last_task_used_math) {
enable_fpu();
fpsave(&tsk->thread.fpu.hard);
save_fpu(tsk, regs);
disable_fpu();
last_task_used_math = 0;
regs->sr |= SR_FD;
Expand All @@ -507,7 +507,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
#ifdef CONFIG_SH_FPU
if(last_task_used_math == current) {
enable_fpu();
fpsave(&current->thread.fpu.hard);
save_fpu(current, regs);
disable_fpu();
last_task_used_math = NULL;
regs->sr |= SR_FD;
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/sh/kernel/ptrace_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ get_fpu_long(struct task_struct *task, unsigned long addr)

if (last_task_used_math == task) {
enable_fpu();
fpsave(&task->thread.fpu.hard);
save_fpu(task, regs);
disable_fpu();
last_task_used_math = 0;
regs->sr |= SR_FD;
Expand Down Expand Up @@ -111,7 +111,7 @@ put_fpu_long(struct task_struct *task, unsigned long addr, unsigned long data)
set_stopped_child_used_math(task);
} else if (last_task_used_math == task) {
enable_fpu();
fpsave(&task->thread.fpu.hard);
save_fpu(task, regs);
disable_fpu();
last_task_used_math = 0;
regs->sr |= SR_FD;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/sh/kernel/signal_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ setup_sigcontext_fpu(struct pt_regs *regs, struct sigcontext __user *sc)

if (current == last_task_used_math) {
enable_fpu();
fpsave(&current->thread.fpu.hard);
save_fpu(current, regs);
disable_fpu();
last_task_used_math = NULL;
regs->sr |= SR_FD;
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/sh/kernel/traps_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,7 @@ static int misaligned_fpu_load(struct pt_regs *regs,
indexed by register number. */
if (last_task_used_math == current) {
enable_fpu();
fpsave(&current->thread.fpu.hard);
save_fpu(current, regs);
disable_fpu();
last_task_used_math = NULL;
regs->sr |= SR_FD;
Expand Down Expand Up @@ -691,7 +691,7 @@ static int misaligned_fpu_store(struct pt_regs *regs,
indexed by register number. */
if (last_task_used_math == current) {
enable_fpu();
fpsave(&current->thread.fpu.hard);
save_fpu(current, regs);
disable_fpu();
last_task_used_math = NULL;
regs->sr |= SR_FD;
Expand Down
44 changes: 44 additions & 0 deletions trunk/include/asm-sh/fpu.h
Original file line number Diff line number Diff line change
@@ -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 */
2 changes: 1 addition & 1 deletion trunk/include/asm-sh/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
26 changes: 0 additions & 26 deletions trunk/include/asm-sh/processor_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down
16 changes: 0 additions & 16 deletions trunk/include/asm-sh/processor_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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. */
Expand All @@ -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

Expand Down

0 comments on commit 44a7a8f

Please sign in to comment.