Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
cb752a60
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,发现更多精彩内容 >>
提交
cb752a60
编写于
1月 07, 2011
作者:
E
Edgar E. Iglesias
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cris: Allow more TB chaning
Signed-off-by:
N
Edgar E. Iglesias
<
edgar@axis.com
>
上级
2a704b13
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
19 deletion
+22
-19
target-cris/translate.c
target-cris/translate.c
+22
-19
未找到文件。
target-cris/translate.c
浏览文件 @
cb752a60
...
...
@@ -1129,7 +1129,7 @@ static void cris_store_direct_jmp(DisasContext *dc)
/* Store the direct jmp state into the cpu-state. */
if
(
dc
->
jmp
==
JMP_DIRECT
)
{
tcg_gen_movi_tl
(
env_btarget
,
dc
->
jmp_pc
);
tcg_gen_movi_tl
(
env_btaken
,
1
)
;
dc
->
jmp
=
JMP_INDIRECT
;
}
}
...
...
@@ -1139,17 +1139,11 @@ static void cris_prepare_cc_branch (DisasContext *dc,
/* This helps us re-schedule the micro-code to insns in delay-slots
before the actual jump. */
dc
->
delayed_branch
=
2
;
dc
->
jmp
=
JMP_DIRECT
;
dc
->
jmp_pc
=
dc
->
pc
+
offset
;
if
(
cond
!=
CC_A
)
{
dc
->
jmp
=
JMP_INDIRECT
;
gen_tst_cc
(
dc
,
env_btaken
,
cond
);
tcg_gen_movi_tl
(
env_btarget
,
dc
->
jmp_pc
);
}
else
{
/* Allow chaining. */
dc
->
jmp
=
JMP_DIRECT
;
}
gen_tst_cc
(
dc
,
env_btaken
,
cond
);
tcg_gen_movi_tl
(
env_btarget
,
dc
->
jmp_pc
);
}
...
...
@@ -1161,8 +1155,7 @@ static inline void cris_prepare_jmp (DisasContext *dc, unsigned int type)
before the actual jump. */
dc
->
delayed_branch
=
2
;
dc
->
jmp
=
type
;
if
(
type
==
JMP_INDIRECT
)
tcg_gen_movi_tl
(
env_btaken
,
1
);
tcg_gen_movi_tl
(
env_btaken
,
1
);
}
static
void
gen_load64
(
DisasContext
*
dc
,
TCGv_i64
dst
,
TCGv
addr
)
...
...
@@ -3315,8 +3308,24 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
if
(
tb
->
flags
&
7
)
t_gen_mov_env_TN
(
dslot
,
tcg_const_tl
(
0
));
if
(
dc
->
cpustate_changed
||
!
dc
->
flagx_known
||
(
dc
->
flags_x
!=
(
tb
->
flags
&
X_FLAG
)))
{
cris_store_direct_jmp
(
dc
);
}
if
(
dc
->
jmp
==
JMP_DIRECT
)
{
dc
->
is_jmp
=
DISAS_NEXT
;
int
l1
;
l1
=
gen_new_label
();
cris_evaluate_flags
(
dc
);
/* Conditional jmp. */
tcg_gen_brcondi_tl
(
TCG_COND_EQ
,
env_btaken
,
0
,
l1
);
gen_goto_tb
(
dc
,
1
,
dc
->
jmp_pc
);
gen_set_label
(
l1
);
gen_goto_tb
(
dc
,
0
,
dc
->
pc
);
dc
->
is_jmp
=
DISAS_TB_JUMP
;
dc
->
jmp
=
JMP_NOJMP
;
}
else
{
t_gen_cc_jmp
(
env_btarget
,
tcg_const_tl
(
dc
->
pc
));
...
...
@@ -3336,16 +3345,10 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
&&
(
dc
->
pc
<
next_page_start
)
&&
num_insns
<
max_insns
);
if
(
dc
->
tb_flags
!=
orig_flags
)
{
dc
->
cpustate_changed
=
1
;
}
if
(
dc
->
clear_locked_irq
)
t_gen_mov_env_TN
(
locked_irq
,
tcg_const_tl
(
0
));
npc
=
dc
->
pc
;
if
(
dc
->
jmp
==
JMP_DIRECT
&&
!
dc
->
delayed_branch
)
npc
=
dc
->
jmp_pc
;
if
(
tb
->
cflags
&
CF_LAST_IO
)
gen_io_end
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录