Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
16d7b2a4
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
16d7b2a4
编写于
8月 23, 2012
作者:
R
Richard Henderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
target-s390: Convert FP SQUARE ROOT
Signed-off-by:
N
Richard Henderson
<
rth@twiddle.net
>
上级
5d7fd045
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
50 addition
and
7 deletion
+50
-7
target-s390x/fpu_helper.c
target-s390x/fpu_helper.c
+21
-3
target-s390x/helper.h
target-s390x/helper.h
+3
-1
target-s390x/insn-data.def
target-s390x/insn-data.def
+7
-0
target-s390x/translate.c
target-s390x/translate.c
+19
-3
未找到文件。
target-s390x/fpu_helper.c
浏览文件 @
16d7b2a4
...
@@ -613,8 +613,26 @@ uint32_t HELPER(tcxb)(uint64_t ah, uint64_t al, uint64_t m2)
...
@@ -613,8 +613,26 @@ uint32_t HELPER(tcxb)(uint64_t ah, uint64_t al, uint64_t m2)
return
cc
;
return
cc
;
}
}
/* square root
64-bit RR
*/
/* square root
32-bit
*/
void
HELPER
(
sqdbr
)(
CPUS390XState
*
env
,
uint32_t
f1
,
uint32
_t
f2
)
uint64_t
HELPER
(
sqeb
)(
CPUS390XState
*
env
,
uint64
_t
f2
)
{
{
env
->
fregs
[
f1
].
d
=
float64_sqrt
(
env
->
fregs
[
f2
].
d
,
&
env
->
fpu_status
);
float32
ret
=
float32_sqrt
(
f2
,
&
env
->
fpu_status
);
handle_exceptions
(
env
,
GETPC
());
return
ret
;
}
/* square root 64-bit */
uint64_t
HELPER
(
sqdb
)(
CPUS390XState
*
env
,
uint64_t
f2
)
{
float64
ret
=
float64_sqrt
(
f2
,
&
env
->
fpu_status
);
handle_exceptions
(
env
,
GETPC
());
return
ret
;
}
/* square root 128-bit */
uint64_t
HELPER
(
sqxb
)(
CPUS390XState
*
env
,
uint64_t
ah
,
uint64_t
al
)
{
float128
ret
=
float128_sqrt
(
make_float128
(
ah
,
al
),
&
env
->
fpu_status
);
handle_exceptions
(
env
,
GETPC
());
return
RET128
(
ret
);
}
}
target-s390x/helper.h
浏览文件 @
16d7b2a4
...
@@ -76,7 +76,9 @@ DEF_HELPER_FLAGS_2(tceb, TCG_CALL_NO_RWG_SE, i32, i64, i64)
...
@@ -76,7 +76,9 @@ DEF_HELPER_FLAGS_2(tceb, TCG_CALL_NO_RWG_SE, i32, i64, i64)
DEF_HELPER_FLAGS_2
(
tcdb
,
TCG_CALL_NO_RWG_SE
,
i32
,
i64
,
i64
)
DEF_HELPER_FLAGS_2
(
tcdb
,
TCG_CALL_NO_RWG_SE
,
i32
,
i64
,
i64
)
DEF_HELPER_FLAGS_3
(
tcxb
,
TCG_CALL_NO_RWG_SE
,
i32
,
i64
,
i64
,
i64
)
DEF_HELPER_FLAGS_3
(
tcxb
,
TCG_CALL_NO_RWG_SE
,
i32
,
i64
,
i64
,
i64
)
DEF_HELPER_3
(
flogr
,
i32
,
env
,
i32
,
i64
)
DEF_HELPER_3
(
flogr
,
i32
,
env
,
i32
,
i64
)
DEF_HELPER_3
(
sqdbr
,
void
,
env
,
i32
,
i32
)
DEF_HELPER_2
(
sqeb
,
i64
,
env
,
i64
)
DEF_HELPER_2
(
sqdb
,
i64
,
env
,
i64
)
DEF_HELPER_3
(
sqxb
,
i64
,
env
,
i64
,
i64
)
DEF_HELPER_FLAGS_1
(
cvd
,
TCG_CALL_NO_RWG_SE
,
i64
,
s32
)
DEF_HELPER_FLAGS_1
(
cvd
,
TCG_CALL_NO_RWG_SE
,
i64
,
s32
)
DEF_HELPER_4
(
unpk
,
void
,
env
,
i32
,
i64
,
i64
)
DEF_HELPER_4
(
unpk
,
void
,
env
,
i32
,
i64
,
i64
)
DEF_HELPER_4
(
tr
,
void
,
env
,
i32
,
i64
,
i64
)
DEF_HELPER_4
(
tr
,
void
,
env
,
i32
,
i64
,
i64
)
...
...
target-s390x/insn-data.def
浏览文件 @
16d7b2a4
...
@@ -459,6 +459,13 @@
...
@@ -459,6 +459,13 @@
/* SHIFT RIGHT DOUBLE LOGICAL */
/* SHIFT RIGHT DOUBLE LOGICAL */
C(0x8c00, SRDL, RS_a, Z, r1_D32, sh64, new, r1_D32, srl, 0)
C(0x8c00, SRDL, RS_a, Z, r1_D32, sh64, new, r1_D32, srl, 0)
/* SQUARE ROOT */
C(0xb314, SQEBR, RRE, Z, 0, e2, new, e1, sqeb, 0)
C(0xb315, SQDBR, RRE, Z, 0, f2_o, f1, 0, sqdb, 0)
C(0xb316, SQXBR, RRE, Z, 0, x2_o, x1, 0, sqxb, 0)
C(0xed14, SQEB, RXE, Z, 0, m2_32u, new, e1, sqeb, 0)
C(0xed15, SQDB, RXE, Z, 0, m2_64, f1, 0, sqdb, 0)
/* STORE */
/* STORE */
C(0x5000, ST, RX_a, Z, r1_o, a2, 0, 0, st32, 0)
C(0x5000, ST, RX_a, Z, r1_o, a2, 0, 0, st32, 0)
C(0xe350, STY, RXY_a, LD, r1_o, a2, 0, 0, st32, 0)
C(0xe350, STY, RXY_a, LD, r1_o, a2, 0, 0, st32, 0)
...
...
target-s390x/translate.c
浏览文件 @
16d7b2a4
...
@@ -1385,9 +1385,6 @@ static void disas_b3(CPUS390XState *env, DisasContext *s, int op, int m3,
...
@@ -1385,9 +1385,6 @@ static void disas_b3(CPUS390XState *env, DisasContext *s, int op, int m3,
tcg_temp_free_i32(tmp32_2);
tcg_temp_free_i32(tmp32_2);
switch
(
op
)
{
switch
(
op
)
{
case
0x15
:
/* SQBDR R1,R2 [RRE] */
FP_HELPER
(
sqdbr
);
break
;
case
0x74
:
/* LZER R1 [RRE] */
case
0x74
:
/* LZER R1 [RRE] */
tmp32_1
=
tcg_const_i32
(
r1
);
tmp32_1
=
tcg_const_i32
(
r1
);
gen_helper_lzer
(
cpu_env
,
tmp32_1
);
gen_helper_lzer
(
cpu_env
,
tmp32_1
);
...
@@ -2936,6 +2933,25 @@ static ExitStatus op_sxb(DisasContext *s, DisasOps *o)
...
@@ -2936,6 +2933,25 @@ static ExitStatus op_sxb(DisasContext *s, DisasOps *o)
return
NO_EXIT
;
return
NO_EXIT
;
}
}
static
ExitStatus
op_sqeb
(
DisasContext
*
s
,
DisasOps
*
o
)
{
gen_helper_sqeb
(
o
->
out
,
cpu_env
,
o
->
in2
);
return
NO_EXIT
;
}
static
ExitStatus
op_sqdb
(
DisasContext
*
s
,
DisasOps
*
o
)
{
gen_helper_sqdb
(
o
->
out
,
cpu_env
,
o
->
in2
);
return
NO_EXIT
;
}
static
ExitStatus
op_sqxb
(
DisasContext
*
s
,
DisasOps
*
o
)
{
gen_helper_sqxb
(
o
->
out
,
cpu_env
,
o
->
in1
,
o
->
in2
);
return_low128
(
o
->
out2
);
return
NO_EXIT
;
}
#ifndef CONFIG_USER_ONLY
#ifndef CONFIG_USER_ONLY
static
ExitStatus
op_sigp
(
DisasContext
*
s
,
DisasOps
*
o
)
static
ExitStatus
op_sigp
(
DisasContext
*
s
,
DisasOps
*
o
)
{
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录