Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
NEMU
提交
70c3fff1
N
NEMU
项目概览
OpenXiangShan
/
NEMU
10 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
提交
70c3fff1
编写于
11月 15, 2020
作者:
Z
Zhou Yaoyang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Removed and, or, and xor
上级
fcad37c4
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
33 addition
and
33 deletion
+33
-33
include/rtl/pseudo.h
include/rtl/pseudo.h
+3
-3
src/engine/interpreter/c_op.h
src/engine/interpreter/c_op.h
+3
-3
src/isa/riscv64/clint.c
src/isa/riscv64/clint.c
+1
-1
src/isa/riscv64/exec/amo.h
src/isa/riscv64/exec/amo.h
+3
-3
src/isa/riscv64/exec/compute.h
src/isa/riscv64/exec/compute.h
+12
-12
src/isa/riscv64/exec/control.h
src/isa/riscv64/exec/control.h
+1
-1
src/isa/riscv64/exec/exec.c
src/isa/riscv64/exec/exec.c
+4
-4
src/isa/riscv64/exec/muldiv.h
src/isa/riscv64/exec/muldiv.h
+1
-1
src/isa/riscv64/exec/system.h
src/isa/riscv64/exec/system.h
+5
-5
未找到文件。
include/rtl/pseudo.h
浏览文件 @
70c3fff1
...
...
@@ -15,10 +15,10 @@ static inline make_rtl(mv, rtlreg_t* dest, const rtlreg_t *src1) {
if
(
dest
!=
src1
)
rtl_add
(
s
,
dest
,
src1
,
rz
);
}
static
inline
make_rtl
(
not
,
rtlreg_t
*
dest
,
const
rtlreg_t
*
src1
)
{
static
inline
make_rtl
(
n
emun
ot
,
rtlreg_t
*
dest
,
const
rtlreg_t
*
src1
)
{
// dest <- ~src1
// TODO();
rtl_xori
(
s
,
dest
,
src1
,
-
1
);
rtl_
nemu
xori
(
s
,
dest
,
src1
,
-
1
);
}
static
inline
make_rtl
(
neg
,
rtlreg_t
*
dest
,
const
rtlreg_t
*
src1
)
{
...
...
@@ -60,7 +60,7 @@ static inline make_rtl(msb, rtlreg_t* dest, const rtlreg_t* src1, int width) {
// TODO();
rtl_shri
(
s
,
dest
,
src1
,
width
*
8
-
1
);
if
(
width
!=
4
)
{
rtl_andi
(
s
,
dest
,
dest
,
0x1
);
rtl_
nemu
andi
(
s
,
dest
,
dest
,
0x1
);
}
}
...
...
src/engine/interpreter/c_op.h
浏览文件 @
70c3fff1
...
...
@@ -11,9 +11,9 @@
#define c_add(a, b) ((a) + (b))
#define c_sub(a, b) ((a) - (b))
#define c_and(a, b) ((a) & (b))
#define c_or(a, b) ((a) | (b))
#define c_xor(a, b) ((a) ^ (b))
#define c_
nemu
and(a, b) ((a) & (b))
#define c_
nemu
or(a, b) ((a) | (b))
#define c_
nemu
xor(a, b) ((a) ^ (b))
#define c_shl(a, b) ((a) << ((b) & c_shift_mask))
#define c_shr(a, b) ((a) >> ((b) & c_shift_mask))
#define c_sar(a, b) ((sword_t)(a) >> ((b) & c_shift_mask))
...
...
src/isa/riscv64/clint.c
浏览文件 @
70c3fff1
...
...
@@ -25,7 +25,7 @@ static void clint_io_handler(uint32_t offset, int len, nemu_bool is_write) {
}
void
init_clint
(
void
)
{
clint_base
=
(
void
*
)
new_space
(
0x10000
);
clint_base
=
(
uint64_t
*
)
new_space
(
0x10000
);
add_mmio_map
(
"clint"
,
CLINT_MMIO
,
(
uint8_t
*
)
clint_base
,
0x10000
,
clint_io_handler
);
add_alarm_handle
(
clint_intr
);
}
src/isa/riscv64/exec/amo.h
浏览文件 @
70c3fff1
...
...
@@ -70,7 +70,7 @@ static inline make_EHelper(amoadd) {
static
inline
make_EHelper
(
amoor
)
{
amo_load
(
s
);
return_on_mem_ex
();
rtl_or
(
s
,
s1
,
s0
,
dsrc2
);
rtl_
nemu
or
(
s
,
s1
,
s0
,
dsrc2
);
amo_update
(
s
);
return_on_mem_ex
();
print_asm_template3
(
amoor
);
...
...
@@ -79,7 +79,7 @@ static inline make_EHelper(amoor) {
static
inline
make_EHelper
(
amoand
)
{
amo_load
(
s
);
return_on_mem_ex
();
rtl_and
(
s
,
s1
,
s0
,
dsrc2
);
rtl_
nemu
and
(
s
,
s1
,
s0
,
dsrc2
);
amo_update
(
s
);
return_on_mem_ex
();
print_asm_template3
(
amoand
);
...
...
@@ -124,7 +124,7 @@ static inline make_EHelper(amomin) {
static
inline
make_EHelper
(
amoxor
)
{
amo_load
(
s
);
return_on_mem_ex
();
rtl_xor
(
s
,
s1
,
s0
,
dsrc2
);
rtl_
nemu
xor
(
s
,
s1
,
s0
,
dsrc2
);
amo_update
(
s
);
return_on_mem_ex
();
print_asm_template3
(
amoxor
);
...
...
src/isa/riscv64/exec/compute.h
浏览文件 @
70c3fff1
...
...
@@ -39,24 +39,24 @@ static inline make_EHelper(sltu) {
print_asm_template3
(
sltu
);
}
static
inline
make_EHelper
(
xor
)
{
rtl_xor
(
s
,
ddest
,
dsrc1
,
dsrc2
);
static
inline
make_EHelper
(
nemu
xor
)
{
rtl_
nemu
xor
(
s
,
ddest
,
dsrc1
,
dsrc2
);
print_asm_template3
(
xor
);
}
static
inline
make_EHelper
(
or
)
{
rtl_or
(
s
,
ddest
,
dsrc1
,
dsrc2
);
static
inline
make_EHelper
(
nemu
or
)
{
rtl_
nemu
or
(
s
,
ddest
,
dsrc1
,
dsrc2
);
print_asm_template3
(
or
);
}
static
inline
make_EHelper
(
and
)
{
rtl_and
(
s
,
ddest
,
dsrc1
,
dsrc2
);
print_asm_template3
(
and
);
static
inline
make_EHelper
(
nemu
and
)
{
rtl_
nemu
and
(
s
,
ddest
,
dsrc1
,
dsrc2
);
print_asm_template3
(
nemu
and
);
}
static
inline
make_EHelper
(
addi
)
{
rtl_addi
(
s
,
ddest
,
dsrc1
,
id_src2
->
imm
);
print_asm_template3
(
addi
);
print_asm_template3
(
nemu
addi
);
}
static
inline
make_EHelper
(
slli
)
{
...
...
@@ -91,17 +91,17 @@ static inline make_EHelper(sltui) {
}
static
inline
make_EHelper
(
xori
)
{
rtl_xori
(
s
,
ddest
,
dsrc1
,
id_src2
->
imm
);
rtl_
nemu
xori
(
s
,
ddest
,
dsrc1
,
id_src2
->
imm
);
print_asm_template3
(
xori
);
}
static
inline
make_EHelper
(
ori
)
{
rtl_ori
(
s
,
ddest
,
dsrc1
,
id_src2
->
imm
);
rtl_
nemu
ori
(
s
,
ddest
,
dsrc1
,
id_src2
->
imm
);
print_asm_template3
(
ori
);
}
static
inline
make_EHelper
(
andi
)
{
rtl_andi
(
s
,
ddest
,
dsrc1
,
id_src2
->
imm
);
static
inline
make_EHelper
(
nemu
andi
)
{
rtl_
nemu
andi
(
s
,
ddest
,
dsrc1
,
id_src2
->
imm
);
print_asm_template3
(
andi
);
}
...
...
src/isa/riscv64/exec/control.h
浏览文件 @
70c3fff1
...
...
@@ -10,7 +10,7 @@ static inline make_EHelper(jal) {
static
inline
make_EHelper
(
jalr
)
{
rtl_addi
(
s
,
s0
,
dsrc1
,
id_src2
->
imm
);
#ifdef __ENGINE_interpreter__
rtl_andi
(
s
,
s0
,
s0
,
~
0x1lu
);
rtl_
nemu
andi
(
s
,
s0
,
s0
,
~
0x1lu
);
#endif
rtl_jr
(
s
,
s0
);
...
...
src/isa/riscv64/exec/exec.c
浏览文件 @
70c3fff1
...
...
@@ -60,7 +60,7 @@ static inline make_EHelper(op_fp){
static
inline
make_EHelper
(
op_imm
)
{
switch
(
s
->
isa
.
instr
.
i
.
funct3
)
{
EX
(
0
,
addi
)
EX
(
1
,
slli
)
EX
(
2
,
slti
)
EX
(
3
,
sltui
)
EX
(
4
,
xori
)
EX
(
5
,
srli
)
EX
(
6
,
ori
)
EX
(
7
,
andi
)
EX
(
4
,
xori
)
EX
(
5
,
srli
)
EX
(
6
,
ori
)
EX
(
7
,
nemu
andi
)
}
}
...
...
@@ -78,7 +78,7 @@ static inline make_EHelper(op) {
#define pair(x, y) (((x) << 3) | (y))
switch
(
pair
(
idx
,
s
->
isa
.
instr
.
r
.
funct3
))
{
EX
(
pair
(
0
,
0
),
add
)
EX
(
pair
(
0
,
1
),
sll
)
EX
(
pair
(
0
,
2
),
slt
)
EX
(
pair
(
0
,
3
),
sltu
)
EX
(
pair
(
0
,
4
),
xor
)
EX
(
pair
(
0
,
5
),
srl
)
EX
(
pair
(
0
,
6
),
or
)
EX
(
pair
(
0
,
7
),
and
)
EX
(
pair
(
0
,
4
),
nemuxor
)
EX
(
pair
(
0
,
5
),
srl
)
EX
(
pair
(
0
,
6
),
nemuor
)
EX
(
pair
(
0
,
7
),
nemu
and
)
EX
(
pair
(
1
,
0
),
mul
)
EX
(
pair
(
1
,
1
),
mulh
)
EX
(
pair
(
1
,
2
),
mulhsu
)
EX
(
pair
(
1
,
3
),
mulhu
)
EX
(
pair
(
1
,
4
),
div
)
EX
(
pair
(
1
,
5
),
divu
)
EX
(
pair
(
1
,
6
),
rem
)
EX
(
pair
(
1
,
7
),
remu
)
EX
(
pair
(
2
,
0
),
sub
)
EX
(
pair
(
2
,
5
),
sra
)
...
...
@@ -173,14 +173,14 @@ static inline make_EHelper(misc_alu) {
if
(
op
==
3
)
{
uint32_t
op2
=
(
BITS
(
instr
,
12
,
12
)
<<
2
)
|
BITS
(
instr
,
6
,
5
);
switch
(
op2
)
{
IDEX
(
0
,
CS
,
sub
)
IDEX
(
1
,
CS
,
xor
)
IDEX
(
2
,
CS
,
or
)
IDEX
(
3
,
CS
,
and
)
IDEX
(
0
,
CS
,
sub
)
IDEX
(
1
,
CS
,
nemuxor
)
IDEX
(
2
,
CS
,
nemuor
)
IDEX
(
3
,
CS
,
nemu
and
)
IDEX
(
4
,
CS
,
subw
)
IDEX
(
5
,
CS
,
addw
)
EMPTY
(
6
)
EMPTY
(
7
)
}
}
else
{
switch
(
op
)
{
IDEX
(
0
,
CB_shift
,
srli
)
IDEX
(
1
,
CB_shift
,
srai
)
IDEX
(
2
,
CB_andi
,
andi
)
IDEX
(
2
,
CB_andi
,
nemu
andi
)
}
}
}
...
...
src/isa/riscv64/exec/muldiv.h
浏览文件 @
70c3fff1
...
...
@@ -29,7 +29,7 @@ static inline make_EHelper(mulhsu) {
// = mulhu(a, b) - (a < 0 ? b : 0)
rtl_sari
(
s
,
s0
,
dsrc1
,
63
);
rtl_and
(
s
,
s0
,
dsrc2
,
s0
);
// s0 = (id_src1->val < 0 ? id_src2->val : 0)
rtl_
nemu
and
(
s
,
s0
,
dsrc2
,
s0
);
// s0 = (id_src1->val < 0 ? id_src2->val : 0)
rtl_mul_hi
(
s
,
s1
,
dsrc1
,
dsrc2
);
rtl_sub
(
s
,
ddest
,
s1
,
s0
);
...
...
src/isa/riscv64/exec/system.h
浏览文件 @
70c3fff1
...
...
@@ -25,7 +25,7 @@ static inline make_EHelper(csrrs) {
if
(
!
csr_check
(
s
,
addr
))
return
;
csr_read
(
s0
,
addr
);
if
(
id_src1
->
reg
!=
0
)
{
rtl_or
(
s
,
s1
,
s0
,
dsrc1
);
rtl_
nemu
or
(
s
,
s1
,
s0
,
dsrc1
);
csr_write
(
addr
,
s1
);
}
rtl_mv
(
s
,
ddest
,
s0
);
...
...
@@ -38,8 +38,8 @@ static inline make_EHelper(csrrc) {
if
(
!
csr_check
(
s
,
addr
))
return
;
csr_read
(
s0
,
addr
);
if
(
id_src1
->
reg
!=
0
)
{
rtl_not
(
s
,
s1
,
dsrc1
);
rtl_and
(
s
,
s1
,
s0
,
s1
);
rtl_n
emun
ot
(
s
,
s1
,
dsrc1
);
rtl_
nemu
and
(
s
,
s1
,
s0
,
s1
);
csr_write
(
addr
,
s1
);
}
rtl_mv
(
s
,
ddest
,
s0
);
...
...
@@ -63,7 +63,7 @@ static inline make_EHelper(csrrsi) {
if
(
!
csr_check
(
s
,
addr
))
return
;
csr_read
(
s0
,
addr
);
if
(
id_src1
->
reg
!=
0
)
{
rtl_ori
(
s
,
s1
,
s0
,
id_src1
->
imm
);
rtl_
nemu
ori
(
s
,
s1
,
s0
,
id_src1
->
imm
);
csr_write
(
addr
,
s1
);
}
rtl_mv
(
s
,
ddest
,
s0
);
...
...
@@ -76,7 +76,7 @@ static inline make_EHelper(csrrci) {
if
(
!
csr_check
(
s
,
addr
))
return
;
csr_read
(
s0
,
addr
);
if
(
id_src1
->
reg
!=
0
)
{
rtl_andi
(
s
,
s1
,
s0
,
~
id_src1
->
imm
);
rtl_
nemu
andi
(
s
,
s1
,
s0
,
~
id_src1
->
imm
);
csr_write
(
addr
,
s1
);
}
rtl_mv
(
s
,
ddest
,
s0
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录