Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
23f3ff26
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,发现更多精彩内容 >>
提交
23f3ff26
编写于
9月 22, 2012
作者:
M
malc
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tcg/ppc32: Implement movcond32
Thanks to Richard Henderson Signed-off-by:
N
malc
<
av1474@comtv.ru
>
上级
ad49d1f7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
76 addition
and
1 deletion
+76
-1
tcg/ppc/tcg-target.c
tcg/ppc/tcg-target.c
+75
-0
tcg/ppc/tcg-target.h
tcg/ppc/tcg-target.h
+1
-1
未找到文件。
tcg/ppc/tcg-target.c
浏览文件 @
23f3ff26
...
...
@@ -384,6 +384,7 @@ static int tcg_target_const_match(tcg_target_long val,
#define ORC XO31(412)
#define EQV XO31(284)
#define NAND XO31(476)
#define ISEL XO31( 15)
#define LBZX XO31( 87)
#define LHZX XO31(279)
...
...
@@ -1263,6 +1264,72 @@ static void tcg_out_setcond2 (TCGContext *s, const TCGArg *args,
);
}
static
void
tcg_out_movcond
(
TCGContext
*
s
,
TCGCond
cond
,
TCGArg
dest
,
TCGArg
c1
,
TCGArg
c2
,
TCGArg
v1
,
TCGArg
v2
,
int
const_c2
)
{
tcg_out_cmp
(
s
,
cond
,
c1
,
c2
,
const_c2
,
7
);
if
(
1
)
{
/* At least here on 7747A bit twiddling hacks are outperformed
by jumpy code (the testing was not scientific) */
if
(
dest
==
v2
)
{
cond
=
tcg_invert_cond
(
cond
);
v2
=
v1
;
}
else
{
if
(
dest
!=
v1
)
{
tcg_out_mov
(
s
,
TCG_TYPE_I32
,
dest
,
v1
);
}
}
/* Branch forward over one insn */
tcg_out32
(
s
,
tcg_to_bc
[
cond
]
|
8
);
tcg_out_mov
(
s
,
TCG_TYPE_I32
,
dest
,
v2
);
}
else
{
/* isel version, "if (1)" above should be replaced once a way
to figure out availability of isel on the underlying
hardware is found */
int
tab
,
bc
;
switch
(
cond
)
{
case
TCG_COND_EQ
:
tab
=
TAB
(
dest
,
v1
,
v2
);
bc
=
CR_EQ
;
break
;
case
TCG_COND_NE
:
tab
=
TAB
(
dest
,
v2
,
v1
);
bc
=
CR_EQ
;
break
;
case
TCG_COND_LTU
:
case
TCG_COND_LT
:
tab
=
TAB
(
dest
,
v1
,
v2
);
bc
=
CR_LT
;
break
;
case
TCG_COND_GEU
:
case
TCG_COND_GE
:
tab
=
TAB
(
dest
,
v2
,
v1
);
bc
=
CR_LT
;
break
;
case
TCG_COND_LEU
:
case
TCG_COND_LE
:
tab
=
TAB
(
dest
,
v2
,
v1
);
bc
=
CR_GT
;
break
;
case
TCG_COND_GTU
:
case
TCG_COND_GT
:
tab
=
TAB
(
dest
,
v1
,
v2
);
bc
=
CR_GT
;
break
;
default:
tcg_abort
();
}
tcg_out32
(
s
,
ISEL
|
tab
|
((
bc
+
28
)
<<
6
));
}
}
static
void
tcg_out_brcond
(
TCGContext
*
s
,
TCGCond
cond
,
TCGArg
arg1
,
TCGArg
arg2
,
int
const_arg2
,
int
label_index
)
...
...
@@ -1820,6 +1887,13 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,
);
break
;
case
INDEX_op_movcond_i32
:
tcg_out_movcond
(
s
,
args
[
5
],
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
],
const_args
[
2
]);
break
;
default:
tcg_dump_ops
(
s
);
tcg_abort
();
...
...
@@ -1916,6 +1990,7 @@ static const TCGTargetOpDef ppc_op_defs[] = {
{
INDEX_op_ext16u_i32
,
{
"r"
,
"r"
}
},
{
INDEX_op_deposit_i32
,
{
"r"
,
"0"
,
"r"
}
},
{
INDEX_op_movcond_i32
,
{
"r"
,
"r"
,
"ri"
,
"r"
,
"r"
}
},
{
-
1
},
};
...
...
tcg/ppc/tcg-target.h
浏览文件 @
23f3ff26
...
...
@@ -92,7 +92,7 @@ typedef enum {
#define TCG_TARGET_HAS_nand_i32 1
#define TCG_TARGET_HAS_nor_i32 1
#define TCG_TARGET_HAS_deposit_i32 1
#define TCG_TARGET_HAS_movcond_i32
0
#define TCG_TARGET_HAS_movcond_i32
1
#define TCG_AREG0 TCG_REG_R27
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录