Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
NEMU
提交
535b43b0
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,发现更多精彩内容 >>
提交
535b43b0
编写于
3月 24, 2020
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mips32,exec,ldst: fix swl/swr
* can not write ddest, since ddest now is a pointer to GPR
上级
8108aff9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
14 deletion
+20
-14
src/isa/mips32/exec/ldst.h
src/isa/mips32/exec/ldst.h
+20
-14
未找到文件。
src/isa/mips32/exec/ldst.h
浏览文件 @
535b43b0
...
...
@@ -49,8 +49,6 @@ static inline make_EHelper(swl) {
rtl_not
(
s
,
s0
,
t0
);
rtl_andi
(
s
,
s0
,
s0
,
0x3
);
rtl_shli
(
s
,
s0
,
s0
,
3
);
// prepare register data
rtl_shr
(
s
,
ddest
,
ddest
,
s0
);
// int mem_mask [] = {0xffffff00, 0xffff00, 0xff000000, 0x0};
// (0x80000000 >> reg_right_shift_amount[n]) << 1
...
...
@@ -59,16 +57,21 @@ static inline make_EHelper(swl) {
rtl_shli
(
s
,
s1
,
s1
,
1
);
// load the aligned memory word
rtl_andi
(
s
,
t0
,
t0
,
~
0x3u
);
rtl_lm
(
s
,
s
0
,
t0
,
0
,
4
);
rtl_lm
(
s
,
t
0
,
t0
,
0
,
4
);
check_mem_ex
();
// prepare memory data
rtl_and
(
s
,
s0
,
s0
,
s1
);
rtl_and
(
s
,
t0
,
t0
,
s1
);
// prepare register data
rtl_shr
(
s
,
s1
,
ddest
,
s0
);
// merge the word
rtl_or
(
s
,
s0
,
s0
,
ddest
);
rtl_or
(
s
,
s0
,
t0
,
s1
);
// write back
rtl_sm
(
s
,
t0
,
0
,
s0
,
4
);
// write back, should recompute the aligned address
rtl_addi
(
s
,
s1
,
dsrc1
,
id_src2
->
imm
);
// t0 = addr
rtl_andi
(
s
,
s1
,
s1
,
~
0x3u
);
rtl_sm
(
s
,
s1
,
0
,
s0
,
4
);
check_mem_ex
();
print_Dop
(
id_src1
->
str
,
OP_STR_SIZE
,
"%d(%s)"
,
id_src2
->
imm
,
reg_name
(
id_src1
->
reg
,
4
));
...
...
@@ -81,8 +84,6 @@ static inline make_EHelper(swr) {
rtl_addi
(
s
,
t0
,
dsrc1
,
id_src2
->
imm
);
// t0 = addr
rtl_andi
(
s
,
s0
,
t0
,
0x3
);
rtl_shli
(
s
,
s0
,
s0
,
3
);
// prepare register data
rtl_shl
(
s
,
ddest
,
ddest
,
s0
);
// int mem_mask [] = {0x0, 0xff, 0xffff, 0xffffff};
// ~(0xffffffff << reg_left_shift_amount[n])
...
...
@@ -91,16 +92,21 @@ static inline make_EHelper(swr) {
rtl_not
(
s
,
s1
,
s1
);
// load the aligned memory word
rtl_andi
(
s
,
t0
,
t0
,
~
0x3u
);
rtl_lm
(
s
,
s
0
,
t0
,
0
,
4
);
rtl_lm
(
s
,
t
0
,
t0
,
0
,
4
);
check_mem_ex
();
// prepare memory data
rtl_and
(
s
,
s0
,
s0
,
s1
);
rtl_and
(
s
,
t0
,
t0
,
s1
);
// prepare register data
rtl_shl
(
s
,
s1
,
ddest
,
s0
);
// merge the word
rtl_or
(
s
,
s0
,
s0
,
ddest
);
rtl_or
(
s
,
s0
,
t0
,
s1
);
// write back
rtl_sm
(
s
,
t0
,
0
,
s0
,
4
);
// write back, should recompute the aligned address
rtl_addi
(
s
,
s1
,
dsrc1
,
id_src2
->
imm
);
rtl_andi
(
s
,
s1
,
s1
,
~
0x3u
);
rtl_sm
(
s
,
s1
,
0
,
s0
,
4
);
check_mem_ex
();
print_Dop
(
id_src1
->
str
,
OP_STR_SIZE
,
"%d(%s)"
,
id_src2
->
imm
,
reg_name
(
id_src1
->
reg
,
4
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录