Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
c7ab7565
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看板
提交
c7ab7565
编写于
1月 23, 2013
作者:
R
Richard Henderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
target-i386: Implement BEXTR
Signed-off-by:
N
Richard Henderson
<
rth@twiddle.net
>
上级
7073fbad
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
40 addition
and
0 deletion
+40
-0
target-i386/translate.c
target-i386/translate.c
+40
-0
未找到文件。
target-i386/translate.c
浏览文件 @
c7ab7565
...
...
@@ -4026,6 +4026,46 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
set_cc_op
(
s
,
CC_OP_LOGICB
+
ot
);
break
;
case
0x0f7
:
/* bextr Gy, Ey, By */
if
(
!
(
s
->
cpuid_7_0_ebx_features
&
CPUID_7_0_EBX_BMI1
)
||
!
(
s
->
prefix
&
PREFIX_VEX
)
||
s
->
vex_l
!=
0
)
{
goto
illegal_op
;
}
ot
=
s
->
dflag
==
2
?
OT_QUAD
:
OT_LONG
;
{
TCGv
bound
,
zero
;
gen_ldst_modrm
(
env
,
s
,
modrm
,
ot
,
OR_TMP0
,
0
);
/* Extract START, and shift the operand.
Shifts larger than operand size get zeros. */
tcg_gen_ext8u_tl
(
cpu_A0
,
cpu_regs
[
s
->
vex_v
]);
tcg_gen_shr_tl
(
cpu_T
[
0
],
cpu_T
[
0
],
cpu_A0
);
bound
=
tcg_const_tl
(
ot
==
OT_QUAD
?
63
:
31
);
zero
=
tcg_const_tl
(
0
);
tcg_gen_movcond_tl
(
TCG_COND_LEU
,
cpu_T
[
0
],
cpu_A0
,
bound
,
cpu_T
[
0
],
zero
);
tcg_temp_free
(
zero
);
/* Extract the LEN into a mask. Lengths larger than
operand size get all ones. */
tcg_gen_shri_tl
(
cpu_A0
,
cpu_regs
[
s
->
vex_v
],
8
);
tcg_gen_ext8u_tl
(
cpu_A0
,
cpu_A0
);
tcg_gen_movcond_tl
(
TCG_COND_LEU
,
cpu_A0
,
cpu_A0
,
bound
,
cpu_A0
,
bound
);
tcg_temp_free
(
bound
);
tcg_gen_movi_tl
(
cpu_T
[
1
],
1
);
tcg_gen_shl_tl
(
cpu_T
[
1
],
cpu_T
[
1
],
cpu_A0
);
tcg_gen_subi_tl
(
cpu_T
[
1
],
cpu_T
[
1
],
1
);
tcg_gen_and_tl
(
cpu_T
[
0
],
cpu_T
[
0
],
cpu_T
[
1
]);
gen_op_mov_reg_T0
(
ot
,
reg
);
gen_op_update1_cc
();
set_cc_op
(
s
,
CC_OP_LOGICB
+
ot
);
}
break
;
default:
goto
illegal_op
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录