Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
332fd57b
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
332fd57b
编写于
11月 22, 2007
作者:
P
Paul Mundt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sh: Bring the SH-5 FPU in line with the SH-4 FPU API.
Signed-off-by:
N
Paul Mundt
<
lethal@linux-sh.org
>
上级
b6d7b666
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
59 addition
and
59 deletion
+59
-59
arch/sh/kernel/cpu/sh5/fpu.c
arch/sh/kernel/cpu/sh5/fpu.c
+7
-9
arch/sh/kernel/process_64.c
arch/sh/kernel/process_64.c
+2
-2
arch/sh/kernel/ptrace_64.c
arch/sh/kernel/ptrace_64.c
+2
-2
arch/sh/kernel/signal_64.c
arch/sh/kernel/signal_64.c
+1
-1
arch/sh/kernel/traps_64.c
arch/sh/kernel/traps_64.c
+2
-2
include/asm-sh/fpu.h
include/asm-sh/fpu.h
+44
-0
include/asm-sh/processor.h
include/asm-sh/processor.h
+1
-1
include/asm-sh/processor_32.h
include/asm-sh/processor_32.h
+0
-26
include/asm-sh/processor_64.h
include/asm-sh/processor_64.h
+0
-16
未找到文件。
arch/sh/kernel/cpu/sh5/fpu.c
浏览文件 @
332fd57b
...
...
@@ -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
*
fp
regs
)
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
"
...
...
@@ -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
)
{
...
...
@@ -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
);
...
...
@@ -167,4 +166,3 @@ do_fpu_state_restore(unsigned long ex, struct pt_regs *regs)
}
disable_fpu
();
}
arch/sh/kernel/process_64.c
浏览文件 @
332fd57b
...
...
@@ -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
;
...
...
@@ -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
;
...
...
arch/sh/kernel/ptrace_64.c
浏览文件 @
332fd57b
...
...
@@ -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
;
...
...
@@ -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
;
...
...
arch/sh/kernel/signal_64.c
浏览文件 @
332fd57b
...
...
@@ -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
;
...
...
arch/sh/kernel/traps_64.c
浏览文件 @
332fd57b
...
...
@@ -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
;
...
...
@@ -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
;
...
...
include/asm-sh/fpu.h
0 → 100644
浏览文件 @
332fd57b
#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 */
include/asm-sh/processor.h
浏览文件 @
332fd57b
...
...
@@ -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.
*
...
...
include/asm-sh/processor_32.h
浏览文件 @
332fd57b
...
...
@@ -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
...
...
include/asm-sh/processor_64.h
浏览文件 @
332fd57b
...
...
@@ -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
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录