Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
3fb53fb4
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看板
提交
3fb53fb4
编写于
6月 05, 2017
作者:
R
Richard Henderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tcg/arm: Use indirect branch for goto_tb
Signed-off-by:
N
Richard Henderson
<
rth@twiddle.net
>
上级
cc74d332
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
3 addition
and
19 deletion
+3
-19
include/exec/exec-all.h
include/exec/exec-all.h
+1
-4
tcg/arm/tcg-target.inc.c
tcg/arm/tcg-target.inc.c
+2
-15
未找到文件。
include/exec/exec-all.h
浏览文件 @
3fb53fb4
...
...
@@ -301,7 +301,7 @@ static inline void tlb_flush_by_mmuidx_all_cpus_synced(CPUState *cpu,
#define CODE_GEN_AVG_BLOCK_SIZE 150
#endif
#if defined(_
_arm__) || defined(_
ARCH_PPC) \
#if defined(_ARCH_PPC) \
|| defined(__x86_64__) || defined(__i386__) \
|| defined(__sparc__) || defined(__aarch64__) \
|| defined(__s390x__) || defined(__mips__) \
...
...
@@ -401,9 +401,6 @@ static inline void tb_set_jmp_target1(uintptr_t jmp_addr, uintptr_t addr)
#elif defined(__aarch64__)
void
aarch64_tb_set_jmp_target
(
uintptr_t
jmp_addr
,
uintptr_t
addr
);
#define tb_set_jmp_target1 aarch64_tb_set_jmp_target
#elif defined(__arm__)
void
arm_tb_set_jmp_target
(
uintptr_t
jmp_addr
,
uintptr_t
addr
);
#define tb_set_jmp_target1 arm_tb_set_jmp_target
#elif defined(__sparc__) || defined(__mips__)
void
tb_set_jmp_target1
(
uintptr_t
jmp_addr
,
uintptr_t
addr
);
#else
...
...
tcg/arm/tcg-target.inc.c
浏览文件 @
3fb53fb4
...
...
@@ -1026,16 +1026,6 @@ static void tcg_out_call(TCGContext *s, tcg_insn_unit *addr)
}
}
void
arm_tb_set_jmp_target
(
uintptr_t
jmp_addr
,
uintptr_t
addr
)
{
tcg_insn_unit
*
code_ptr
=
(
tcg_insn_unit
*
)
jmp_addr
;
tcg_insn_unit
*
target
=
(
tcg_insn_unit
*
)
addr
;
/* we could use a ldr pc, [pc, #-4] kind of branch and avoid the flush */
reloc_pc24_atomic
(
code_ptr
,
target
);
flush_icache_range
(
jmp_addr
,
jmp_addr
+
4
);
}
static
inline
void
tcg_out_goto_label
(
TCGContext
*
s
,
int
cond
,
TCGLabel
*
l
)
{
if
(
l
->
has_value
)
{
...
...
@@ -1665,11 +1655,8 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
}
break
;
case
INDEX_op_goto_tb
:
if
(
s
->
tb_jmp_insn_offset
)
{
/* Direct jump method */
s
->
tb_jmp_insn_offset
[
args
[
0
]]
=
tcg_current_code_size
(
s
);
tcg_out_b_noaddr
(
s
,
COND_AL
);
}
else
{
tcg_debug_assert
(
s
->
tb_jmp_insn_offset
==
0
);
{
/* Indirect jump method */
intptr_t
ptr
=
(
intptr_t
)(
s
->
tb_jmp_target_addr
+
args
[
0
]);
tcg_out_movi32
(
s
,
COND_AL
,
TCG_REG_R0
,
ptr
&
~
0xfff
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录