Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
NEMU
提交
248a2d10
N
NEMU
项目概览
OpenXiangShan
/
NEMU
11 个月 前同步成功
通知
7
Star
171
Fork
67
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NEMU
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
248a2d10
编写于
4月 16, 2020
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
engine,rv64,spill: better name for some functions
上级
d2607a15
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
25 addition
and
22 deletion
+25
-22
src/engine/rv64/rv64-backend/rtl-basic.c
src/engine/rv64/rv64-backend/rtl-basic.c
+6
-6
src/engine/rv64/spill.c
src/engine/rv64/spill.c
+15
-12
src/engine/rv64/spill.h
src/engine/rv64/spill.h
+3
-3
src/engine/rv64/tran.c
src/engine/rv64/tran.c
+1
-1
未找到文件。
src/engine/rv64/rv64-backend/rtl-basic.c
浏览文件 @
248a2d10
...
...
@@ -382,7 +382,7 @@ make_rtl(host_sm, void *addr, const rtlreg_t *src1, int len) {
// we use tmp0 to store x86.pc of the next basic block
make_rtl
(
j
,
vaddr_t
target
)
{
#ifdef REG_SPILLING
spill_
out
_all
();
spill_
writeback
_all
();
#endif
if
(
!
load_imm_big
(
tmp0
,
target
))
rv64_addiw
(
tmp0
,
tmp0
,
target
&
0xfff
);
tran_next_pc
=
NEXT_PC_JMP
;
...
...
@@ -391,7 +391,7 @@ make_rtl(j, vaddr_t target) {
make_rtl
(
jr
,
rtlreg_t
*
target
)
{
rv64_addi
(
tmp0
,
reg_ptr2idx
(
s
,
target
),
0
);
#ifdef REG_SPILLING
spill_
out
_all
();
spill_
writeback
_all
();
#endif
tran_next_pc
=
NEXT_PC_JMP
;
}
...
...
@@ -427,12 +427,12 @@ make_rtl(jrelop, uint32_t relop, const rtlreg_t *src1, const rtlreg_t *src2, vad
// generate instrutions to load the not-taken target
load_imm_no_opt
(
tmp0
,
s
->
seq_pc
);
// only two instructions
#ifdef REG_SPILLING
spill_
out
_all
();
spill_
writeback
_all
();
#endif
// generate instrutions to load the taken target
load_imm_no_opt
(
tmp0
,
target
);
// only two instructions
#ifdef REG_SPILLING
spill_
out
_all
();
spill_
writeback
_all
();
#endif
tran_next_pc
=
NEXT_PC_BRANCH
;
...
...
@@ -445,6 +445,6 @@ make_rtl(jrelop, uint32_t relop, const rtlreg_t *src1, const rtlreg_t *src2, vad
make_rtl
(
kill
,
const
rtlreg_t
*
src1
)
{
#ifdef REG_SPILLING
uint32_t
tmpidx
=
reg_ptr2tmpidx
(
s
,
src1
);
spill_
clean
(
tmpidx
);
spill_
flush
(
tmpidx
);
#endif
}
\ No newline at end of file
}
src/engine/rv64/spill.c
浏览文件 @
248a2d10
...
...
@@ -90,18 +90,21 @@ void cal_suffix_inst() {
}
}
void
spill_out_all
()
{
// can be 0/3/6 inst
uint32_t
addr
;
for
(
int
i
=
0
;
i
<
TMP_REG_NUM
;
i
++
)
{
if
(
tmp_regs
[
i
].
map_ptr
!=
0
)
{
addr
=
SCRATCHPAD_BASE_ADDR
+
4
*
(
tmp_regs
[
i
].
map_ptr
);
load_imm_no_opt
(
spill_tmp_reg
.
idx
,
addr
);
rv64_sw
(
tmp_regs
[
i
].
idx
,
spill_tmp_reg
.
idx
,
0
);
}
}
void
spill_writeback
(
uint32_t
i
)
{
if
(
tmp_regs
[
i
].
map_ptr
!=
0
)
{
uint32_t
addr
=
SCRATCHPAD_BASE_ADDR
+
4
*
(
tmp_regs
[
i
].
map_ptr
);
load_imm_no_opt
(
spill_tmp_reg
.
idx
,
addr
);
rv64_sw
(
tmp_regs
[
i
].
idx
,
spill_tmp_reg
.
idx
,
0
);
}
}
void
spill_writeback_all
()
{
// can be 0/3/6 inst
for
(
int
i
=
0
;
i
<
TMP_REG_NUM
;
i
++
)
{
spill_writeback
(
i
);
}
}
void
spill_
clean
(
uint32_t
tmp_idx
)
{
void
spill_
flush
(
uint32_t
tmp_idx
)
{
for
(
int
i
=
0
;
i
<
TMP_REG_NUM
;
i
++
)
{
if
(
tmp_regs
[
i
].
map_ptr
==
tmp_idx
)
{
tmp_regs
[
i
].
used
=
0
;
...
...
@@ -110,8 +113,8 @@ void spill_clean(uint32_t tmp_idx) {
}
}
void
spill_
clean
all
()
{
void
spill_
flush_
all
()
{
for
(
int
i
=
0
;
i
<
TMP_REG_NUM
;
i
++
)
{
tmp_regs
[
i
].
used
=
0
;
}
}
\ No newline at end of file
}
src/engine/rv64/spill.h
浏览文件 @
248a2d10
...
...
@@ -29,9 +29,9 @@ void tmp_regs_init();
void
tmp_regs_reset
();
uint32_t
check_tmp_reg
(
uint32_t
);
uint32_t
spill_out_and_remap
(
DecodeExecState
*
,
uint32_t
);
void
spill_
clean
(
uint32_t
);
void
spill_
clean
all
();
void
spill_
flush
(
uint32_t
);
void
spill_
flush_
all
();
void
cal_suffix_inst
();
void
spill_
out
_all
();
void
spill_
writeback
_all
();
#endif
\ No newline at end of file
src/engine/rv64/tran.c
浏览文件 @
248a2d10
...
...
@@ -106,7 +106,7 @@ void mainloop() {
__attribute__
((
unused
))
vaddr_t
seq_pc
=
isa_exec_once
();
guest_nr_instr
++
;
#ifdef REG_SPILLING
spill_
clean
all
();
spill_
flush_
all
();
#endif
if
(
nemu_state
.
state
!=
NEMU_RUNNING
)
tran_next_pc
=
NEXT_PC_END
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录