Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
5f1f4b17
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看板
提交
5f1f4b17
编写于
1月 23, 2013
作者:
R
Richard Henderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
target-i386: Implement MULX
Signed-off-by:
N
Richard Henderson
<
rth@twiddle.net
>
上级
02ea1e6b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
47 addition
and
0 deletion
+47
-0
target-i386/helper.h
target-i386/helper.h
+1
-0
target-i386/int_helper.c
target-i386/int_helper.c
+7
-0
target-i386/translate.c
target-i386/translate.c
+39
-0
未找到文件。
target-i386/helper.h
浏览文件 @
5f1f4b17
...
...
@@ -19,6 +19,7 @@ DEF_HELPER_2(imulq_EAX_T0, void, env, tl)
DEF_HELPER_3
(
imulq_T0_T1
,
tl
,
env
,
tl
,
tl
)
DEF_HELPER_2
(
divq_EAX
,
void
,
env
,
tl
)
DEF_HELPER_2
(
idivq_EAX
,
void
,
env
,
tl
)
DEF_HELPER_FLAGS_2
(
umulh
,
TCG_CALL_NO_RWG_SE
,
tl
,
tl
,
tl
)
#endif
DEF_HELPER_2
(
aam
,
void
,
env
,
int
)
...
...
target-i386/int_helper.c
浏览文件 @
5f1f4b17
...
...
@@ -385,6 +385,13 @@ void helper_mulq_EAX_T0(CPUX86State *env, target_ulong t0)
CC_SRC
=
r1
;
}
target_ulong
helper_umulh
(
target_ulong
t0
,
target_ulong
t1
)
{
uint64_t
h
,
l
;
mulu64
(
&
l
,
&
h
,
t0
,
t1
);
return
h
;
}
void
helper_imulq_EAX_T0
(
CPUX86State
*
env
,
target_ulong
t0
)
{
uint64_t
r0
,
r1
;
...
...
target-i386/translate.c
浏览文件 @
5f1f4b17
...
...
@@ -4099,6 +4099,45 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
set_cc_op
(
s
,
CC_OP_BMILGB
+
ot
);
break
;
case
0x3f6
:
/* mulx By, Gy, rdx, Ey */
if
(
!
(
s
->
cpuid_7_0_ebx_features
&
CPUID_7_0_EBX_BMI2
)
||
!
(
s
->
prefix
&
PREFIX_VEX
)
||
s
->
vex_l
!=
0
)
{
goto
illegal_op
;
}
ot
=
s
->
dflag
==
2
?
OT_QUAD
:
OT_LONG
;
gen_ldst_modrm
(
env
,
s
,
modrm
,
ot
,
OR_TMP0
,
0
);
switch
(
ot
)
{
TCGv_i64
t0
,
t1
;
default:
t0
=
tcg_temp_new_i64
();
t1
=
tcg_temp_new_i64
();
#ifdef TARGET_X86_64
tcg_gen_ext32u_i64
(
t0
,
cpu_T
[
0
]);
tcg_gen_ext32u_i64
(
t1
,
cpu_regs
[
R_EDX
]);
#else
tcg_gen_extu_i32_i64
(
t0
,
cpu_T
[
0
]);
tcg_gen_extu_i32_i64
(
t0
,
cpu_regs
[
R_EDX
]);
#endif
tcg_gen_mul_i64
(
t0
,
t0
,
t1
);
tcg_gen_trunc_i64_tl
(
cpu_T
[
0
],
t0
);
tcg_gen_shri_i64
(
t0
,
t0
,
32
);
tcg_gen_trunc_i64_tl
(
cpu_T
[
1
],
t0
);
tcg_temp_free_i64
(
t0
);
tcg_temp_free_i64
(
t1
);
gen_op_mov_reg_T0
(
OT_LONG
,
s
->
vex_v
);
gen_op_mov_reg_T1
(
OT_LONG
,
reg
);
break
;
#ifdef TARGET_X86_64
case
OT_QUAD
:
tcg_gen_mov_tl
(
cpu_T
[
1
],
cpu_regs
[
R_EDX
]);
tcg_gen_mul_tl
(
cpu_regs
[
s
->
vex_v
],
cpu_T
[
0
],
cpu_T
[
1
]);
gen_helper_umulh
(
cpu_regs
[
reg
],
cpu_T
[
0
],
cpu_T
[
1
]);
break
;
#endif
}
break
;
case
0x0f3
:
case
0x1f3
:
case
0x2f3
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录