Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
54c4be2a
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
54c4be2a
编写于
2月 19, 2019
作者:
R
roland
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8211231: BarrierSetC1::generate_referent_check() confuses register allocator
Reviewed-by: iveresov, kvn
上级
360e58f8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
6 addition
and
2 deletion
+6
-2
src/share/vm/c1/c1_LIRGenerator.cpp
src/share/vm/c1/c1_LIRGenerator.cpp
+6
-2
未找到文件。
src/share/vm/c1/c1_LIRGenerator.cpp
浏览文件 @
54c4be2a
...
...
@@ -2305,6 +2305,10 @@ void LIRGenerator::do_UnsafeGetObject(UnsafeGetObject* x) {
// We can have generate one runtime check here. Let's start with
// the offset check.
// Allocate temp register to src and load it here, otherwise
// control flow below may confuse register allocator.
LIR_Opr
src_reg
=
new_register
(
T_OBJECT
);
__
move
(
src
.
result
(),
src_reg
);
if
(
gen_offset_check
)
{
// if (offset != referent_offset) -> continue
// If offset is an int then we can do the comparison with the
...
...
@@ -2327,14 +2331,14 @@ void LIRGenerator::do_UnsafeGetObject(UnsafeGetObject* x) {
if
(
gen_source_check
)
{
// offset is a const and equals referent offset
// if (source == null) -> continue
__
cmp
(
lir_cond_equal
,
src
.
result
()
,
LIR_OprFact
::
oopConst
(
NULL
));
__
cmp
(
lir_cond_equal
,
src
_reg
,
LIR_OprFact
::
oopConst
(
NULL
));
__
branch
(
lir_cond_equal
,
T_OBJECT
,
Lcont
->
label
());
}
LIR_Opr
src_klass
=
new_register
(
T_OBJECT
);
if
(
gen_type_check
)
{
// We have determined that offset == referent_offset && src != null.
// if (src->_klass->_reference_type == REF_NONE) -> continue
__
move
(
new
LIR_Address
(
src
.
result
()
,
oopDesc
::
klass_offset_in_bytes
(),
T_ADDRESS
),
src_klass
);
__
move
(
new
LIR_Address
(
src
_reg
,
oopDesc
::
klass_offset_in_bytes
(),
T_ADDRESS
),
src_klass
);
LIR_Address
*
reference_type_addr
=
new
LIR_Address
(
src_klass
,
in_bytes
(
InstanceKlass
::
reference_type_offset
()),
T_BYTE
);
LIR_Opr
reference_type
=
new_register
(
T_INT
);
__
move
(
reference_type_addr
,
reference_type
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录