Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
NEMU
提交
c6a99a41
N
NEMU
项目概览
OpenXiangShan
/
NEMU
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
c6a99a41
编写于
4月 05, 2020
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
x86,exec,arith: fix CF and OF for adc/sbb
* pass eflagstest
上级
7c324489
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
19 addition
and
9 deletion
+19
-9
src/isa/x86/exec/arith.h
src/isa/x86/exec/arith.h
+16
-6
src/isa/x86/exec/exec.c
src/isa/x86/exec/exec.c
+3
-3
未找到文件。
src/isa/x86/exec/arith.h
浏览文件 @
c6a99a41
...
...
@@ -112,10 +112,15 @@ static inline make_EHelper(adc) {
rtl_andi
(
s
,
s1
,
s1
,
0xffffffffu
>>
((
4
-
id_dest
->
width
)
*
8
));
}
rtl_update_ZFSF
(
s
,
s1
,
id_dest
->
width
);
rtl_is_add_overflow
(
s
,
s0
,
s1
,
ddest
,
s0
,
id_dest
->
width
);
rtl_set_OF
(
s
,
s0
);
rtl_is_add_carry
(
s
,
s0
,
s1
,
ddest
);
// s1 = ddest + (dsrc1 + CF)
// new_CF = (CF ? s1 <= dsrc1 : s1 < dsrc1);
// = (CF ? s1 < dsrc1 + 1 : s1 < dsrc1);
// = s1 < dsrc1 + CF;
// = s1 < s0;
rtl_setrelop
(
s
,
RELOP_LTU
,
s0
,
s1
,
s0
);
rtl_set_CF
(
s
,
s0
);
rtl_is_add_overflow
(
s
,
s0
,
s1
,
ddest
,
dsrc1
,
id_dest
->
width
);
rtl_set_OF
(
s
,
s0
);
#endif
operand_write
(
s
,
id_dest
,
s1
);
print_asm_template2
(
adc
);
...
...
@@ -137,10 +142,15 @@ static inline make_EHelper(sbb) {
rtl_andi
(
s
,
s1
,
s1
,
0xffffffffu
>>
((
4
-
id_dest
->
width
)
*
8
));
}
rtl_update_ZFSF
(
s
,
s1
,
id_dest
->
width
);
rtl_is_sub_overflow
(
s
,
s0
,
s1
,
ddest
,
s0
,
id_dest
->
width
);
rtl_set_OF
(
s
,
s0
);
rtl_is_sub_carry
(
s
,
s0
,
s1
,
ddest
);
// s1 = ddest - (dsrc1 + CF)
// new_CF = (CF ? ddest <= dsrc1 : ddest < dsrc1);
// = (CF ? ddest < dsrc1 + 1 : ddest < dsrc1);
// = ddest < dsrc1 + CF;
// = ddest < s0;
rtl_setrelop
(
s
,
RELOP_LTU
,
s0
,
ddest
,
s0
);
rtl_set_CF
(
s
,
s0
);
rtl_is_sub_overflow
(
s
,
s0
,
s1
,
ddest
,
dsrc1
,
id_dest
->
width
);
rtl_set_OF
(
s
,
s0
);
#endif
operand_write
(
s
,
id_dest
,
s1
);
print_asm_template2
(
sbb
);
...
...
src/isa/x86/exec/exec.c
浏览文件 @
c6a99a41
...
...
@@ -110,13 +110,13 @@ IDEXW(0x00, G2E, add, 1) IDEX (0x01, G2E, add) IDEXW(0x02, E2G, add, 1)
EMPTY
(
0x04
)
IDEX
(
0x05
,
I2a
,
add
)
IDEXW
(
0x08
,
G2E
,
or
,
1
)
IDEX
(
0x09
,
G2E
,
or
)
IDEXW
(
0x0a
,
E2G
,
or
,
1
)
IDEX
(
0x0b
,
E2G
,
or
)
IDEXW
(
0x0c
,
I2a
,
or
,
1
)
IDEX
(
0x0d
,
I2a
,
or
)
EMPTY
(
0x0e
)
EX
(
0x0f
,
2
byte_esc
)
EMPTY
(
0x10
)
IDEX
(
0x11
,
G2E
,
adc
)
EMPTY
(
0x12
)
IDEX
(
0x13
,
E2G
,
adc
)
IDEXW
(
0x10
,
G2E
,
adc
,
1
)
IDEX
(
0x11
,
G2E
,
adc
)
EMPTY
(
0x12
)
IDEX
(
0x13
,
E2G
,
adc
)
EMPTY
(
0x18
)
IDEX
(
0x19
,
G2E
,
sbb
)
EMPTY
(
0x1a
)
IDEX
(
0x1b
,
E2G
,
sbb
)
IDEXW
(
0x18
,
G2E
,
sbb
,
1
)
IDEX
(
0x19
,
G2E
,
sbb
)
EMPTY
(
0x1a
)
IDEX
(
0x1b
,
E2G
,
sbb
)
IDEXW
(
0x20
,
G2E
,
and
,
1
)
IDEX
(
0x21
,
G2E
,
and
)
IDEXW
(
0x22
,
E2G
,
and
,
1
)
IDEX
(
0x23
,
E2G
,
and
)
IDEXW
(
0x24
,
I2a
,
and
,
1
)
IDEX
(
0x25
,
I2a
,
and
)
EMPTY
(
0x28
)
IDEX
(
0x29
,
G2E
,
sub
)
EMPTY
(
0x2a
)
IDEX
(
0x2b
,
E2G
,
sub
)
IDEXW
(
0x28
,
G2E
,
sub
,
1
)
IDEX
(
0x29
,
G2E
,
sub
)
EMPTY
(
0x2a
)
IDEX
(
0x2b
,
E2G
,
sub
)
EMPTY
(
0x2c
)
IDEX
(
0x2d
,
I2a
,
sub
)
IDEXW
(
0x30
,
G2E
,
xor
,
1
)
IDEX
(
0x31
,
G2E
,
xor
)
IDEXW
(
0x32
,
E2G
,
xor
,
1
)
IDEX
(
0x33
,
E2G
,
xor
)
EMPTY
(
0x34
)
IDEX
(
0x35
,
I2a
,
xor
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录