Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
e6e40195
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看板
提交
e6e40195
编写于
6月 04, 2014
作者:
R
rbackman
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8031994: java/lang/Character/CheckProp test times out
Reviewed-by: iveresov, roland
上级
b07f5f84
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
32 addition
and
21 deletion
+32
-21
src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp
src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp
+4
-6
src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
+3
-6
src/share/vm/c1/c1_GraphBuilder.cpp
src/share/vm/c1/c1_GraphBuilder.cpp
+1
-1
src/share/vm/c1/c1_Instruction.hpp
src/share/vm/c1/c1_Instruction.hpp
+4
-2
src/share/vm/c1/c1_LIRGenerator.cpp
src/share/vm/c1/c1_LIRGenerator.cpp
+16
-4
src/share/vm/c1/c1_LIRGenerator.hpp
src/share/vm/c1/c1_LIRGenerator.hpp
+4
-2
未找到文件。
src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp
浏览文件 @
e6e40195
...
...
@@ -872,21 +872,19 @@ void LIRGenerator::do_Convert(Convert* x) {
void
LIRGenerator
::
do_NewInstance
(
NewInstance
*
x
)
{
print_if_not_loaded
(
x
);
// This instruction can be deoptimized in the slow path : use
// O0 as result register.
const
LIR_Opr
reg
=
result_register_for
(
x
->
type
());
#ifndef PRODUCT
if
(
PrintNotLoaded
&&
!
x
->
klass
()
->
is_loaded
())
{
tty
->
print_cr
(
" ###class not loaded at new bci %d"
,
x
->
printable_bci
());
}
#endif
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
LIR_Opr
tmp1
=
FrameMap
::
G1_oop_opr
;
LIR_Opr
tmp2
=
FrameMap
::
G3_oop_opr
;
LIR_Opr
tmp3
=
FrameMap
::
G4_oop_opr
;
LIR_Opr
tmp4
=
FrameMap
::
O1_oop_opr
;
LIR_Opr
klass_reg
=
FrameMap
::
G5_metadata_opr
;
new_instance
(
reg
,
x
->
klass
(),
tmp1
,
tmp2
,
tmp3
,
tmp4
,
klass_reg
,
info
);
new_instance
(
reg
,
x
->
klass
(),
x
->
is_unresolved
(),
tmp1
,
tmp2
,
tmp3
,
tmp4
,
klass_reg
,
info
);
LIR_Opr
result
=
rlock_result
(
x
);
__
move
(
reg
,
result
);
}
...
...
src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
浏览文件 @
e6e40195
...
...
@@ -1085,14 +1085,11 @@ void LIRGenerator::do_Convert(Convert* x) {
void
LIRGenerator
::
do_NewInstance
(
NewInstance
*
x
)
{
#ifndef PRODUCT
if
(
PrintNotLoaded
&&
!
x
->
klass
()
->
is_loaded
())
{
tty
->
print_cr
(
" ###class not loaded at new bci %d"
,
x
->
printable_bci
());
}
#endif
print_if_not_loaded
(
x
);
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
LIR_Opr
reg
=
result_register_for
(
x
->
type
());
new_instance
(
reg
,
x
->
klass
(),
new_instance
(
reg
,
x
->
klass
(),
x
->
is_unresolved
(),
FrameMap
::
rcx_oop_opr
,
FrameMap
::
rdi_oop_opr
,
FrameMap
::
rsi_oop_opr
,
...
...
src/share/vm/c1/c1_GraphBuilder.cpp
浏览文件 @
e6e40195
...
...
@@ -2061,7 +2061,7 @@ void GraphBuilder::new_instance(int klass_index) {
bool
will_link
;
ciKlass
*
klass
=
stream
()
->
get_klass
(
will_link
);
assert
(
klass
->
is_instance_klass
(),
"must be an instance klass"
);
NewInstance
*
new_instance
=
new
NewInstance
(
klass
->
as_instance_klass
(),
state_before
);
NewInstance
*
new_instance
=
new
NewInstance
(
klass
->
as_instance_klass
(),
state_before
,
stream
()
->
is_unresolved_klass
()
);
_memory
->
new_instance
(
new_instance
);
apush
(
append_split
(
new_instance
));
}
...
...
src/share/vm/c1/c1_Instruction.hpp
浏览文件 @
e6e40195
...
...
@@ -1291,16 +1291,18 @@ LEAF(Invoke, StateSplit)
LEAF
(
NewInstance
,
StateSplit
)
private
:
ciInstanceKlass
*
_klass
;
bool
_is_unresolved
;
public
:
// creation
NewInstance
(
ciInstanceKlass
*
klass
,
ValueStack
*
state_before
)
NewInstance
(
ciInstanceKlass
*
klass
,
ValueStack
*
state_before
,
bool
is_unresolved
)
:
StateSplit
(
instanceType
,
state_before
)
,
_klass
(
klass
)
,
_klass
(
klass
)
,
_is_unresolved
(
is_unresolved
)
{}
// accessors
ciInstanceKlass
*
klass
()
const
{
return
_klass
;
}
bool
is_unresolved
()
const
{
return
_is_unresolved
;
}
virtual
bool
needs_exception_state
()
const
{
return
false
;
}
...
...
src/share/vm/c1/c1_LIRGenerator.cpp
浏览文件 @
e6e40195
...
...
@@ -466,8 +466,11 @@ CodeEmitInfo* LIRGenerator::state_for(Instruction* x) {
}
void
LIRGenerator
::
klass2reg_with_patching
(
LIR_Opr
r
,
ciMetadata
*
obj
,
CodeEmitInfo
*
info
)
{
if
(
!
obj
->
is_loaded
()
||
PatchALot
)
{
void
LIRGenerator
::
klass2reg_with_patching
(
LIR_Opr
r
,
ciMetadata
*
obj
,
CodeEmitInfo
*
info
,
bool
need_resolve
)
{
/* C2 relies on constant pool entries being resolved (ciTypeFlow), so if TieredCompilation
* is active and the class hasn't yet been resolved we need to emit a patch that resolves
* the class. */
if
((
TieredCompilation
&&
need_resolve
)
||
!
obj
->
is_loaded
()
||
PatchALot
)
{
assert
(
info
!=
NULL
,
"info must be set if class is not loaded"
);
__
klass2reg_patch
(
NULL
,
r
,
info
);
}
else
{
...
...
@@ -660,9 +663,18 @@ void LIRGenerator::monitor_exit(LIR_Opr object, LIR_Opr lock, LIR_Opr new_hdr, L
__
unlock_object
(
hdr
,
object
,
lock
,
scratch
,
slow_path
);
}
#ifndef PRODUCT
void
LIRGenerator
::
print_if_not_loaded
(
const
NewInstance
*
new_instance
)
{
if
(
PrintNotLoaded
&&
!
new_instance
->
klass
()
->
is_loaded
())
{
tty
->
print_cr
(
" ###class not loaded at new bci %d"
,
new_instance
->
printable_bci
());
}
else
if
(
PrintNotLoaded
&&
(
TieredCompilation
&&
new_instance
->
is_unresolved
()))
{
tty
->
print_cr
(
" ###class not resolved at new bci %d"
,
new_instance
->
printable_bci
());
}
}
#endif
void
LIRGenerator
::
new_instance
(
LIR_Opr
dst
,
ciInstanceKlass
*
klass
,
LIR_Opr
scratch1
,
LIR_Opr
scratch2
,
LIR_Opr
scratch3
,
LIR_Opr
scratch4
,
LIR_Opr
klass_reg
,
CodeEmitInfo
*
info
)
{
klass2reg_with_patching
(
klass_reg
,
klass
,
info
);
void
LIRGenerator
::
new_instance
(
LIR_Opr
dst
,
ciInstanceKlass
*
klass
,
bool
is_unresolved
,
LIR_Opr
scratch1
,
LIR_Opr
scratch2
,
LIR_Opr
scratch3
,
LIR_Opr
scratch4
,
LIR_Opr
klass_reg
,
CodeEmitInfo
*
info
)
{
klass2reg_with_patching
(
klass_reg
,
klass
,
info
,
is_unresolved
);
// If klass is not loaded we do not know if the klass has finalizers:
if
(
UseFastNewInstance
&&
klass
->
is_loaded
()
&&
!
Klass
::
layout_helper_needs_slow_path
(
klass
->
layout_helper
()))
{
...
...
src/share/vm/c1/c1_LIRGenerator.hpp
浏览文件 @
e6e40195
...
...
@@ -169,6 +169,8 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure {
return
this
;
}
void
print_if_not_loaded
(
const
NewInstance
*
new_instance
)
PRODUCT_RETURN
;
#ifdef ASSERT
LIR_List
*
lir
(
const
char
*
file
,
int
line
)
const
{
_lir
->
set_file_and_line
(
file
,
line
);
...
...
@@ -307,7 +309,7 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure {
void
store_stack_parameter
(
LIR_Opr
opr
,
ByteSize
offset_from_sp_in_bytes
);
void
klass2reg_with_patching
(
LIR_Opr
r
,
ciMetadata
*
obj
,
CodeEmitInfo
*
info
);
void
klass2reg_with_patching
(
LIR_Opr
r
,
ciMetadata
*
obj
,
CodeEmitInfo
*
info
,
bool
need_resolve
=
false
);
// this loads the length and compares against the index
void
array_range_check
(
LIR_Opr
array
,
LIR_Opr
index
,
CodeEmitInfo
*
null_check_info
,
CodeEmitInfo
*
range_check_info
);
...
...
@@ -325,7 +327,7 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure {
void
monitor_enter
(
LIR_Opr
object
,
LIR_Opr
lock
,
LIR_Opr
hdr
,
LIR_Opr
scratch
,
int
monitor_no
,
CodeEmitInfo
*
info_for_exception
,
CodeEmitInfo
*
info
);
void
monitor_exit
(
LIR_Opr
object
,
LIR_Opr
lock
,
LIR_Opr
hdr
,
LIR_Opr
scratch
,
int
monitor_no
);
void
new_instance
(
LIR_Opr
dst
,
ciInstanceKlass
*
klass
,
LIR_Opr
scratch1
,
LIR_Opr
scratch2
,
LIR_Opr
scratch3
,
LIR_Opr
scratch4
,
LIR_Opr
klass_reg
,
CodeEmitInfo
*
info
);
void
new_instance
(
LIR_Opr
dst
,
ciInstanceKlass
*
klass
,
bool
is_unresolved
,
LIR_Opr
scratch1
,
LIR_Opr
scratch2
,
LIR_Opr
scratch3
,
LIR_Opr
scratch4
,
LIR_Opr
klass_reg
,
CodeEmitInfo
*
info
);
// machine dependent
void
cmp_mem_int
(
LIR_Condition
condition
,
LIR_Opr
base
,
int
disp
,
int
c
,
CodeEmitInfo
*
info
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录