Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
50b9047d
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
50b9047d
编写于
6月 13, 2008
作者:
O
ohair
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
b2252b65
da71dc0c
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
225 addition
and
198 deletion
+225
-198
agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
.../src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
+2
-2
src/cpu/sparc/vm/assembler_sparc.cpp
src/cpu/sparc/vm/assembler_sparc.cpp
+6
-0
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
+2
-1
src/cpu/sparc/vm/sparc.ad
src/cpu/sparc/vm/sparc.ad
+8
-17
src/cpu/x86/vm/assembler_x86_64.cpp
src/cpu/x86/vm/assembler_x86_64.cpp
+15
-6
src/cpu/x86/vm/assembler_x86_64.hpp
src/cpu/x86/vm/assembler_x86_64.hpp
+2
-0
src/cpu/x86/vm/interp_masm_x86_64.cpp
src/cpu/x86/vm/interp_masm_x86_64.cpp
+8
-6
src/cpu/x86/vm/x86_64.ad
src/cpu/x86/vm/x86_64.ad
+5
-3
src/share/vm/ci/ciMethod.cpp
src/share/vm/ci/ciMethod.cpp
+1
-1
src/share/vm/classfile/classFileParser.cpp
src/share/vm/classfile/classFileParser.cpp
+5
-2
src/share/vm/interpreter/bytecodeInterpreterWithChecks.xml
src/share/vm/interpreter/bytecodeInterpreterWithChecks.xml
+16
-16
src/share/vm/interpreter/bytecodeInterpreterWithChecks.xsl
src/share/vm/interpreter/bytecodeInterpreterWithChecks.xsl
+20
-20
src/share/vm/opto/cfgnode.cpp
src/share/vm/opto/cfgnode.cpp
+0
-58
src/share/vm/opto/compile.cpp
src/share/vm/opto/compile.cpp
+39
-1
src/share/vm/opto/type.cpp
src/share/vm/opto/type.cpp
+3
-1
src/share/vm/runtime/arguments.cpp
src/share/vm/runtime/arguments.cpp
+3
-1
src/share/vm/runtime/java.hpp
src/share/vm/runtime/java.hpp
+30
-6
test/compiler/6659207/Test.java
test/compiler/6659207/Test.java
+20
-19
test/compiler/6661247/Test.java
test/compiler/6661247/Test.java
+20
-19
test/compiler/6663621/IVTest.java
test/compiler/6663621/IVTest.java
+20
-19
未找到文件。
agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
浏览文件 @
50b9047d
...
@@ -274,10 +274,10 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
...
@@ -274,10 +274,10 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
// hc_klass is a HotSpot magic field and hence we can't
// hc_klass is a HotSpot magic field and hence we can't
// find it from InstanceKlass for java.lang.Class.
// find it from InstanceKlass for java.lang.Class.
TypeDataBase
db
=
VM
.
getVM
().
getTypeDataBase
();
TypeDataBase
db
=
VM
.
getVM
().
getTypeDataBase
();
int
hcKlassOffset
=
(
int
)
Oop
.
getHeaderSize
();
int
hcKlassOffset
=
(
int
)
Instance
.
getHeaderSize
();
try
{
try
{
hcKlassOffset
+=
(
db
.
lookupIntConstant
(
"java_lang_Class::hc_klass_offset"
).
intValue
()
*
hcKlassOffset
+=
(
db
.
lookupIntConstant
(
"java_lang_Class::hc_klass_offset"
).
intValue
()
*
db
.
getAddress
Size
());
VM
.
getVM
().
getHeapOop
Size
());
}
catch
(
RuntimeException
re
)
{
}
catch
(
RuntimeException
re
)
{
// ignore, currently java_lang_Class::hc_klass_offset is zero
// ignore, currently java_lang_Class::hc_klass_offset is zero
}
}
...
...
src/cpu/sparc/vm/assembler_sparc.cpp
浏览文件 @
50b9047d
...
@@ -3643,6 +3643,7 @@ void MacroAssembler::store_heap_oop(Register d, const Address& a, int offset) {
...
@@ -3643,6 +3643,7 @@ void MacroAssembler::store_heap_oop(Register d, const Address& a, int offset) {
void
MacroAssembler
::
encode_heap_oop
(
Register
src
,
Register
dst
)
{
void
MacroAssembler
::
encode_heap_oop
(
Register
src
,
Register
dst
)
{
assert
(
UseCompressedOops
,
"must be compressed"
);
assert
(
UseCompressedOops
,
"must be compressed"
);
verify_oop
(
src
);
Label
done
;
Label
done
;
if
(
src
==
dst
)
{
if
(
src
==
dst
)
{
// optimize for frequent case src == dst
// optimize for frequent case src == dst
...
@@ -3664,12 +3665,14 @@ void MacroAssembler::encode_heap_oop(Register src, Register dst) {
...
@@ -3664,12 +3665,14 @@ void MacroAssembler::encode_heap_oop(Register src, Register dst) {
void
MacroAssembler
::
encode_heap_oop_not_null
(
Register
r
)
{
void
MacroAssembler
::
encode_heap_oop_not_null
(
Register
r
)
{
assert
(
UseCompressedOops
,
"must be compressed"
);
assert
(
UseCompressedOops
,
"must be compressed"
);
verify_oop
(
r
);
sub
(
r
,
G6_heapbase
,
r
);
sub
(
r
,
G6_heapbase
,
r
);
srlx
(
r
,
LogMinObjAlignmentInBytes
,
r
);
srlx
(
r
,
LogMinObjAlignmentInBytes
,
r
);
}
}
void
MacroAssembler
::
encode_heap_oop_not_null
(
Register
src
,
Register
dst
)
{
void
MacroAssembler
::
encode_heap_oop_not_null
(
Register
src
,
Register
dst
)
{
assert
(
UseCompressedOops
,
"must be compressed"
);
assert
(
UseCompressedOops
,
"must be compressed"
);
verify_oop
(
src
);
sub
(
src
,
G6_heapbase
,
dst
);
sub
(
src
,
G6_heapbase
,
dst
);
srlx
(
dst
,
LogMinObjAlignmentInBytes
,
dst
);
srlx
(
dst
,
LogMinObjAlignmentInBytes
,
dst
);
}
}
...
@@ -3682,11 +3685,13 @@ void MacroAssembler::decode_heap_oop(Register src, Register dst) {
...
@@ -3682,11 +3685,13 @@ void MacroAssembler::decode_heap_oop(Register src, Register dst) {
bpr
(
rc_nz
,
true
,
Assembler
::
pt
,
dst
,
done
);
bpr
(
rc_nz
,
true
,
Assembler
::
pt
,
dst
,
done
);
delayed
()
->
add
(
dst
,
G6_heapbase
,
dst
);
// annuled if not taken
delayed
()
->
add
(
dst
,
G6_heapbase
,
dst
);
// annuled if not taken
bind
(
done
);
bind
(
done
);
verify_oop
(
dst
);
}
}
void
MacroAssembler
::
decode_heap_oop_not_null
(
Register
r
)
{
void
MacroAssembler
::
decode_heap_oop_not_null
(
Register
r
)
{
// Do not add assert code to this unless you change vtableStubs_sparc.cpp
// Do not add assert code to this unless you change vtableStubs_sparc.cpp
// pd_code_size_limit.
// pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
assert
(
UseCompressedOops
,
"must be compressed"
);
assert
(
UseCompressedOops
,
"must be compressed"
);
sllx
(
r
,
LogMinObjAlignmentInBytes
,
r
);
sllx
(
r
,
LogMinObjAlignmentInBytes
,
r
);
add
(
r
,
G6_heapbase
,
r
);
add
(
r
,
G6_heapbase
,
r
);
...
@@ -3695,6 +3700,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) {
...
@@ -3695,6 +3700,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) {
void
MacroAssembler
::
decode_heap_oop_not_null
(
Register
src
,
Register
dst
)
{
void
MacroAssembler
::
decode_heap_oop_not_null
(
Register
src
,
Register
dst
)
{
// Do not add assert code to this unless you change vtableStubs_sparc.cpp
// Do not add assert code to this unless you change vtableStubs_sparc.cpp
// pd_code_size_limit.
// pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
assert
(
UseCompressedOops
,
"must be compressed"
);
assert
(
UseCompressedOops
,
"must be compressed"
);
sllx
(
src
,
LogMinObjAlignmentInBytes
,
dst
);
sllx
(
src
,
LogMinObjAlignmentInBytes
,
dst
);
add
(
dst
,
G6_heapbase
,
dst
);
add
(
dst
,
G6_heapbase
,
dst
);
...
...
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
浏览文件 @
50b9047d
...
@@ -2720,7 +2720,8 @@ nmethod *SharedRuntime::generate_dtrace_nmethod(
...
@@ -2720,7 +2720,8 @@ nmethod *SharedRuntime::generate_dtrace_nmethod(
#endif
/* ASSERT */
#endif
/* ASSERT */
VMRegPair
zero
;
VMRegPair
zero
;
zero
.
set2
(
G0
->
as_VMReg
());
const
Register
g0
=
G0
;
// without this we get a compiler warning (why??)
zero
.
set2
(
g0
->
as_VMReg
());
int
c_arg
,
j_arg
;
int
c_arg
,
j_arg
;
...
...
src/cpu/sparc/vm/sparc.ad
浏览文件 @
50b9047d
...
@@ -5975,7 +5975,8 @@ instruct encodeHeapOop_not_null(iRegN dst, iRegP src) %{
...
@@ -5975,7 +5975,8 @@ instruct encodeHeapOop_not_null(iRegN dst, iRegP src) %{
%}
%}
instruct decodeHeapOop(iRegP dst, iRegN src) %{
instruct decodeHeapOop(iRegP dst, iRegN src) %{
predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull);
predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull &&
n->bottom_type()->is_oopptr()->ptr() != TypePtr::Constant);
match(Set dst (DecodeN src));
match(Set dst (DecodeN src));
format %{ "decode_heap_oop $src, $dst" %}
format %{ "decode_heap_oop $src, $dst" %}
ins_encode %{
ins_encode %{
...
@@ -5985,7 +5986,8 @@ instruct decodeHeapOop(iRegP dst, iRegN src) %{
...
@@ -5985,7 +5986,8 @@ instruct decodeHeapOop(iRegP dst, iRegN src) %{
%}
%}
instruct decodeHeapOop_not_null(iRegP dst, iRegN src) %{
instruct decodeHeapOop_not_null(iRegP dst, iRegN src) %{
predicate(n->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull);
predicate(n->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull ||
n->bottom_type()->is_oopptr()->ptr() == TypePtr::Constant);
match(Set dst (DecodeN src));
match(Set dst (DecodeN src));
format %{ "decode_heap_oop_not_null $src, $dst" %}
format %{ "decode_heap_oop_not_null $src, $dst" %}
ins_encode %{
ins_encode %{
...
@@ -6677,10 +6679,9 @@ instruct compareAndSwapP_bool(iRegP mem_ptr, iRegP oldval, iRegP newval, iRegI r
...
@@ -6677,10 +6679,9 @@ instruct compareAndSwapP_bool(iRegP mem_ptr, iRegP oldval, iRegP newval, iRegI r
ins_pipe( long_memory_op );
ins_pipe( long_memory_op );
%}
%}
instruct compareAndSwapN_bool
_comp(iRegP mem_ptr, iRegN oldval, iRegN newval, iRegI res, o7RegI tmp
, flagsReg ccr ) %{
instruct compareAndSwapN_bool
(iRegP mem_ptr, iRegN oldval, iRegN newval, iRegI res, o7RegI tmp1
, flagsReg ccr ) %{
match(Set res (CompareAndSwapN mem_ptr (Binary oldval newval)));
match(Set res (CompareAndSwapN mem_ptr (Binary oldval newval)));
effect( USE mem_ptr, KILL ccr, KILL tmp);
effect( USE mem_ptr, KILL ccr, KILL tmp1);
format %{
format %{
"MOV $newval,O7\n\t"
"MOV $newval,O7\n\t"
"CASA [$mem_ptr],$oldval,O7\t! If $oldval==[$mem_ptr] Then store O7 into [$mem_ptr], set O7=[$mem_ptr] in any case\n\t"
"CASA [$mem_ptr],$oldval,O7\t! If $oldval==[$mem_ptr] Then store O7 into [$mem_ptr], set O7=[$mem_ptr] in any case\n\t"
...
@@ -6688,18 +6689,8 @@ instruct compareAndSwapN_bool_comp(iRegP mem_ptr, iRegN oldval, iRegN newval, iR
...
@@ -6688,18 +6689,8 @@ instruct compareAndSwapN_bool_comp(iRegP mem_ptr, iRegN oldval, iRegN newval, iR
"MOV 1,$res\n\t"
"MOV 1,$res\n\t"
"MOVne icc,R_G0,$res"
"MOVne icc,R_G0,$res"
%}
%}
ins_encode %{
ins_encode( enc_casi(mem_ptr, oldval, newval),
Register Rmem = reg_to_register_object($mem_ptr$$reg);
enc_iflags_ne_to_boolean(res) );
Register Rold = reg_to_register_object($oldval$$reg);
Register Rnew = reg_to_register_object($newval$$reg);
Register Rres = reg_to_register_object($res$$reg);
__ cas(Rmem, Rold, Rnew);
__ cmp( Rold, Rnew );
__ mov(1, Rres);
__ movcc( Assembler::notEqual, false, Assembler::icc, G0, Rres );
%}
ins_pipe( long_memory_op );
ins_pipe( long_memory_op );
%}
%}
...
...
src/cpu/x86/vm/assembler_x86_64.cpp
浏览文件 @
50b9047d
...
@@ -5007,8 +5007,7 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, Register obj_reg, Re
...
@@ -5007,8 +5007,7 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, Register obj_reg, Re
jcc
(
Assembler
::
notEqual
,
cas_label
);
jcc
(
Assembler
::
notEqual
,
cas_label
);
// The bias pattern is present in the object's header. Need to check
// The bias pattern is present in the object's header. Need to check
// whether the bias owner and the epoch are both still current.
// whether the bias owner and the epoch are both still current.
load_klass
(
tmp_reg
,
obj_reg
);
load_prototype_header
(
tmp_reg
,
obj_reg
);
movq
(
tmp_reg
,
Address
(
tmp_reg
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()));
orq
(
tmp_reg
,
r15_thread
);
orq
(
tmp_reg
,
r15_thread
);
xorq
(
tmp_reg
,
swap_reg
);
xorq
(
tmp_reg
,
swap_reg
);
andq
(
tmp_reg
,
~
((
int
)
markOopDesc
::
age_mask_in_place
));
andq
(
tmp_reg
,
~
((
int
)
markOopDesc
::
age_mask_in_place
));
...
@@ -5082,8 +5081,7 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, Register obj_reg, Re
...
@@ -5082,8 +5081,7 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, Register obj_reg, Re
//
//
// FIXME: due to a lack of registers we currently blow away the age
// FIXME: due to a lack of registers we currently blow away the age
// bits in this situation. Should attempt to preserve them.
// bits in this situation. Should attempt to preserve them.
load_klass
(
tmp_reg
,
obj_reg
);
load_prototype_header
(
tmp_reg
,
obj_reg
);
movq
(
tmp_reg
,
Address
(
tmp_reg
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()));
orq
(
tmp_reg
,
r15_thread
);
orq
(
tmp_reg
,
r15_thread
);
if
(
os
::
is_MP
())
{
if
(
os
::
is_MP
())
{
lock
();
lock
();
...
@@ -5113,8 +5111,7 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, Register obj_reg, Re
...
@@ -5113,8 +5111,7 @@ int MacroAssembler::biased_locking_enter(Register lock_reg, Register obj_reg, Re
//
//
// FIXME: due to a lack of registers we currently blow away the age
// FIXME: due to a lack of registers we currently blow away the age
// bits in this situation. Should attempt to preserve them.
// bits in this situation. Should attempt to preserve them.
load_klass
(
tmp_reg
,
obj_reg
);
load_prototype_header
(
tmp_reg
,
obj_reg
);
movq
(
tmp_reg
,
Address
(
tmp_reg
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()));
if
(
os
::
is_MP
())
{
if
(
os
::
is_MP
())
{
lock
();
lock
();
}
}
...
@@ -5158,6 +5155,16 @@ void MacroAssembler::load_klass(Register dst, Register src) {
...
@@ -5158,6 +5155,16 @@ void MacroAssembler::load_klass(Register dst, Register src) {
}
}
}
}
void
MacroAssembler
::
load_prototype_header
(
Register
dst
,
Register
src
)
{
if
(
UseCompressedOops
)
{
movl
(
dst
,
Address
(
src
,
oopDesc
::
klass_offset_in_bytes
()));
movq
(
dst
,
Address
(
r12_heapbase
,
dst
,
Address
::
times_8
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()));
}
else
{
movq
(
dst
,
Address
(
src
,
oopDesc
::
klass_offset_in_bytes
()));
movq
(
dst
,
Address
(
dst
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()));
}
}
void
MacroAssembler
::
store_klass
(
Register
dst
,
Register
src
)
{
void
MacroAssembler
::
store_klass
(
Register
dst
,
Register
src
)
{
if
(
UseCompressedOops
)
{
if
(
UseCompressedOops
)
{
encode_heap_oop_not_null
(
src
);
encode_heap_oop_not_null
(
src
);
...
@@ -5282,6 +5289,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) {
...
@@ -5282,6 +5289,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) {
assert
(
UseCompressedOops
,
"should only be used for compressed headers"
);
assert
(
UseCompressedOops
,
"should only be used for compressed headers"
);
// Cannot assert, unverified entry point counts instructions (see .ad file)
// Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit.
// vtableStubs also counts instructions in pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
assert
(
Address
::
times_8
==
LogMinObjAlignmentInBytes
,
"decode alg wrong"
);
assert
(
Address
::
times_8
==
LogMinObjAlignmentInBytes
,
"decode alg wrong"
);
leaq
(
r
,
Address
(
r12_heapbase
,
r
,
Address
::
times_8
,
0
));
leaq
(
r
,
Address
(
r12_heapbase
,
r
,
Address
::
times_8
,
0
));
}
}
...
@@ -5290,6 +5298,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) {
...
@@ -5290,6 +5298,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) {
assert
(
UseCompressedOops
,
"should only be used for compressed headers"
);
assert
(
UseCompressedOops
,
"should only be used for compressed headers"
);
// Cannot assert, unverified entry point counts instructions (see .ad file)
// Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit.
// vtableStubs also counts instructions in pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
assert
(
Address
::
times_8
==
LogMinObjAlignmentInBytes
,
"decode alg wrong"
);
assert
(
Address
::
times_8
==
LogMinObjAlignmentInBytes
,
"decode alg wrong"
);
leaq
(
dst
,
Address
(
r12_heapbase
,
src
,
Address
::
times_8
,
0
));
leaq
(
dst
,
Address
(
r12_heapbase
,
src
,
Address
::
times_8
,
0
));
}
}
...
...
src/cpu/x86/vm/assembler_x86_64.hpp
浏览文件 @
50b9047d
...
@@ -1111,6 +1111,8 @@ class MacroAssembler : public Assembler {
...
@@ -1111,6 +1111,8 @@ class MacroAssembler : public Assembler {
void
store_klass
(
Register
dst
,
Register
src
);
void
store_klass
(
Register
dst
,
Register
src
);
void
store_klass_gap
(
Register
dst
,
Register
src
);
void
store_klass_gap
(
Register
dst
,
Register
src
);
void
load_prototype_header
(
Register
dst
,
Register
src
);
void
load_heap_oop
(
Register
dst
,
Address
src
);
void
load_heap_oop
(
Register
dst
,
Address
src
);
void
store_heap_oop
(
Address
dst
,
Register
src
);
void
store_heap_oop
(
Address
dst
,
Register
src
);
void
encode_heap_oop
(
Register
r
);
void
encode_heap_oop
(
Register
r
);
...
...
src/cpu/x86/vm/interp_masm_x86_64.cpp
浏览文件 @
50b9047d
...
@@ -233,7 +233,7 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
...
@@ -233,7 +233,7 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
assert
(
Rsub_klass
!=
rcx
,
"rcx holds 2ndary super array length"
);
assert
(
Rsub_klass
!=
rcx
,
"rcx holds 2ndary super array length"
);
assert
(
Rsub_klass
!=
rdi
,
"rdi holds 2ndary super array scan ptr"
);
assert
(
Rsub_klass
!=
rdi
,
"rdi holds 2ndary super array scan ptr"
);
Label
not_subtype
,
loop
;
Label
not_subtype
,
not_subtype_pop
,
loop
;
// Profile the not-null value's klass.
// Profile the not-null value's klass.
profile_typecheck
(
rcx
,
Rsub_klass
,
rdi
);
// blows rcx, rdi
profile_typecheck
(
rcx
,
Rsub_klass
,
rdi
);
// blows rcx, rdi
...
@@ -272,12 +272,13 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
...
@@ -272,12 +272,13 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
// and we store values in objArrays always encoded, thus we need to encode value
// and we store values in objArrays always encoded, thus we need to encode value
// before repne
// before repne
if
(
UseCompressedOops
)
{
if
(
UseCompressedOops
)
{
pushq
(
rax
);
encode_heap_oop
(
rax
);
encode_heap_oop
(
rax
);
repne_scanl
();
repne_scanl
();
// Not equal?
// Not equal?
jcc
(
Assembler
::
notEqual
,
not_subtype
);
jcc
(
Assembler
::
notEqual
,
not_subtype
_pop
);
//
decod
e heap oop here for movq
//
restor
e heap oop here for movq
decode_heap_oop
(
rax
);
popq
(
rax
);
}
else
{
}
else
{
repne_scanq
();
repne_scanq
();
jcc
(
Assembler
::
notEqual
,
not_subtype
);
jcc
(
Assembler
::
notEqual
,
not_subtype
);
...
@@ -287,9 +288,10 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
...
@@ -287,9 +288,10 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
Klass
::
secondary_super_cache_offset_in_bytes
()),
rax
);
Klass
::
secondary_super_cache_offset_in_bytes
()),
rax
);
jmp
(
ok_is_subtype
);
jmp
(
ok_is_subtype
);
bind
(
not_subtype_pop
);
// restore heap oop here for miss
if
(
UseCompressedOops
)
popq
(
rax
);
bind
(
not_subtype
);
bind
(
not_subtype
);
// decode heap oop here for miss
if
(
UseCompressedOops
)
decode_heap_oop
(
rax
);
profile_typecheck_failed
(
rcx
);
// blows rcx
profile_typecheck_failed
(
rcx
);
// blows rcx
}
}
...
...
src/cpu/x86/vm/x86_64.ad
浏览文件 @
50b9047d
...
@@ -6149,7 +6149,7 @@ instruct loadNKlass(rRegN dst, memory mem)
...
@@ -6149,7 +6149,7 @@ instruct loadNKlass(rRegN dst, memory mem)
match(Set dst (LoadNKlass mem));
match(Set dst (LoadNKlass mem));
ins_cost(125); // XXX
ins_cost(125); // XXX
format %{ "movl $dst, $mem\t# compressed klass ptr
\n\t
" %}
format %{ "movl $dst, $mem\t# compressed klass ptr" %}
ins_encode %{
ins_encode %{
Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp);
Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp);
Register dst = as_Register($dst$$reg);
Register dst = as_Register($dst$$reg);
...
@@ -7089,7 +7089,8 @@ instruct encodeHeapOop_not_null(rRegN dst, rRegP src, rFlagsReg cr) %{
...
@@ -7089,7 +7089,8 @@ instruct encodeHeapOop_not_null(rRegN dst, rRegP src, rFlagsReg cr) %{
%}
%}
instruct decodeHeapOop(rRegP dst, rRegN src, rFlagsReg cr) %{
instruct decodeHeapOop(rRegP dst, rRegN src, rFlagsReg cr) %{
predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull);
predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull &&
n->bottom_type()->is_oopptr()->ptr() != TypePtr::Constant);
match(Set dst (DecodeN src));
match(Set dst (DecodeN src));
effect(KILL cr);
effect(KILL cr);
format %{ "decode_heap_oop $dst,$src" %}
format %{ "decode_heap_oop $dst,$src" %}
...
@@ -7105,7 +7106,8 @@ instruct decodeHeapOop(rRegP dst, rRegN src, rFlagsReg cr) %{
...
@@ -7105,7 +7106,8 @@ instruct decodeHeapOop(rRegP dst, rRegN src, rFlagsReg cr) %{
%}
%}
instruct decodeHeapOop_not_null(rRegP dst, rRegN src) %{
instruct decodeHeapOop_not_null(rRegP dst, rRegN src) %{
predicate(n->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull);
predicate(n->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull ||
n->bottom_type()->is_oopptr()->ptr() == TypePtr::Constant);
match(Set dst (DecodeN src));
match(Set dst (DecodeN src));
format %{ "decode_heap_oop_not_null $dst,$src" %}
format %{ "decode_heap_oop_not_null $dst,$src" %}
ins_encode %{
ins_encode %{
...
...
src/share/vm/ci/ciMethod.cpp
浏览文件 @
50b9047d
...
@@ -878,7 +878,7 @@ int ciMethod::instructions_size() {
...
@@ -878,7 +878,7 @@ int ciMethod::instructions_size() {
(
TieredCompilation
&&
code
->
compiler
()
!=
NULL
&&
code
->
compiler
()
->
is_c1
()))
{
(
TieredCompilation
&&
code
->
compiler
()
!=
NULL
&&
code
->
compiler
()
->
is_c1
()))
{
return
0
;
return
0
;
}
}
return
code
->
code_
size
();
return
code
->
code_
end
()
-
code
->
verified_entry_point
();
)
)
}
}
...
...
src/share/vm/classfile/classFileParser.cpp
浏览文件 @
50b9047d
...
@@ -44,6 +44,7 @@
...
@@ -44,6 +44,7 @@
// Used for backward compatibility reasons:
// Used for backward compatibility reasons:
// - to check for javac bug fixes that happened after 1.5
// - to check for javac bug fixes that happened after 1.5
// - also used as the max version when running in jdk6
#define JAVA_6_VERSION 50
#define JAVA_6_VERSION 50
...
@@ -3507,9 +3508,11 @@ bool ClassFileParser::has_illegal_visibility(jint flags) {
...
@@ -3507,9 +3508,11 @@ bool ClassFileParser::has_illegal_visibility(jint flags) {
}
}
bool
ClassFileParser
::
is_supported_version
(
u2
major
,
u2
minor
)
{
bool
ClassFileParser
::
is_supported_version
(
u2
major
,
u2
minor
)
{
u2
max_version
=
JDK_Version
::
is_gte_jdk17x_version
()
?
JAVA_MAX_SUPPORTED_VERSION
:
JAVA_6_VERSION
;
return
(
major
>=
JAVA_MIN_SUPPORTED_VERSION
)
&&
return
(
major
>=
JAVA_MIN_SUPPORTED_VERSION
)
&&
(
major
<=
JAVA_MAX_SUPPORTED_VERSION
)
&&
(
major
<=
max_version
)
&&
((
major
!=
JAVA_MAX_SUPPORTED_VERSION
)
||
((
major
!=
max_version
)
||
(
minor
<=
JAVA_MAX_SUPPORTED_MINOR_VERSION
));
(
minor
<=
JAVA_MAX_SUPPORTED_MINOR_VERSION
));
}
}
...
...
src/share/vm/interpreter/bytecodeInterpreterWithChecks.xml
浏览文件 @
50b9047d
<?xml version="1.0"?>
<?xml version="1.0"?>
<!--
<!--
6opyright 2006-2008
Sun Microsystems, Inc. All Rights Reserved.
Copyright 1997-2000
Sun Microsystems, Inc. All Rights Reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation.
published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT
This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).
accompanied this code).
You should have received a copy of the GNU General Public License version
You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
CA 95054 USA or visit www.sun.com if you need additional information or
CA 95054 USA or visit www.sun.com if you need additional information or
have any questions.
have any questions.
-->
-->
<!DOCTYPE processcode [
<!DOCTYPE processcode [
<!ELEMENT processcode ANY>
<!ELEMENT processcode ANY>
...
...
src/share/vm/interpreter/bytecodeInterpreterWithChecks.xsl
浏览文件 @
50b9047d
<?xml version="1.0"?>
<?xml version="1.0"?>
<!--
<!--
Copyright 2006-2008
Sun Microsystems, Inc. All Rights Reserved.
Copyright 1997-2000
Sun Microsystems, Inc. All Rights Reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation.
published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT
This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).
accompanied this code).
You should have received a copy of the GNU General Public License version
You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
CA 95054 USA or visit www.sun.com if you need additional information or
CA 95054 USA or visit www.sun.com if you need additional information or
have any questions.
have any questions.
-->
-->
<xsl:stylesheet
xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform"
version=
"1.0"
>
<xsl:stylesheet
xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform"
version=
"1.0"
>
...
...
src/share/vm/opto/cfgnode.cpp
浏览文件 @
50b9047d
...
@@ -1621,64 +1621,6 @@ Node *PhiNode::Ideal(PhaseGVN *phase, bool can_reshape) {
...
@@ -1621,64 +1621,6 @@ Node *PhiNode::Ideal(PhaseGVN *phase, bool can_reshape) {
if
(
opt
!=
NULL
)
return
opt
;
if
(
opt
!=
NULL
)
return
opt
;
}
}
if
(
in
(
1
)
!=
NULL
&&
in
(
1
)
->
Opcode
()
==
Op_AddP
&&
can_reshape
)
{
// Try to undo Phi of AddP:
// (Phi (AddP base base y) (AddP base2 base2 y))
// becomes:
// newbase := (Phi base base2)
// (AddP newbase newbase y)
//
// This occurs as a result of unsuccessful split_thru_phi and
// interferes with taking advantage of addressing modes. See the
// clone_shift_expressions code in matcher.cpp
Node
*
addp
=
in
(
1
);
const
Type
*
type
=
addp
->
in
(
AddPNode
::
Base
)
->
bottom_type
();
Node
*
y
=
addp
->
in
(
AddPNode
::
Offset
);
if
(
y
!=
NULL
&&
addp
->
in
(
AddPNode
::
Base
)
==
addp
->
in
(
AddPNode
::
Address
))
{
// make sure that all the inputs are similar to the first one,
// i.e. AddP with base == address and same offset as first AddP
bool
doit
=
true
;
for
(
uint
i
=
2
;
i
<
req
();
i
++
)
{
if
(
in
(
i
)
==
NULL
||
in
(
i
)
->
Opcode
()
!=
Op_AddP
||
in
(
i
)
->
in
(
AddPNode
::
Base
)
!=
in
(
i
)
->
in
(
AddPNode
::
Address
)
||
in
(
i
)
->
in
(
AddPNode
::
Offset
)
!=
y
)
{
doit
=
false
;
break
;
}
// Accumulate type for resulting Phi
type
=
type
->
meet
(
in
(
i
)
->
in
(
AddPNode
::
Base
)
->
bottom_type
());
}
Node
*
base
=
NULL
;
if
(
doit
)
{
// Check for neighboring AddP nodes in a tree.
// If they have a base, use that it.
for
(
DUIterator_Fast
kmax
,
k
=
this
->
fast_outs
(
kmax
);
k
<
kmax
;
k
++
)
{
Node
*
u
=
this
->
fast_out
(
k
);
if
(
u
->
is_AddP
())
{
Node
*
base2
=
u
->
in
(
AddPNode
::
Base
);
if
(
base2
!=
NULL
&&
!
base2
->
is_top
())
{
if
(
base
==
NULL
)
base
=
base2
;
else
if
(
base
!=
base2
)
{
doit
=
false
;
break
;
}
}
}
}
}
if
(
doit
)
{
if
(
base
==
NULL
)
{
base
=
new
(
phase
->
C
,
in
(
0
)
->
req
())
PhiNode
(
in
(
0
),
type
,
NULL
);
for
(
uint
i
=
1
;
i
<
req
();
i
++
)
{
base
->
init_req
(
i
,
in
(
i
)
->
in
(
AddPNode
::
Base
));
}
phase
->
is_IterGVN
()
->
register_new_node_with_optimizer
(
base
);
}
return
new
(
phase
->
C
,
4
)
AddPNode
(
base
,
base
,
y
);
}
}
}
// Split phis through memory merges, so that the memory merges will go away.
// Split phis through memory merges, so that the memory merges will go away.
// Piggy-back this transformation on the search for a unique input....
// Piggy-back this transformation on the search for a unique input....
// It will be as if the merged memory is the unique value of the phi.
// It will be as if the merged memory is the unique value of the phi.
...
...
src/share/vm/opto/compile.cpp
浏览文件 @
50b9047d
...
@@ -1992,11 +1992,49 @@ static void final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &fpu ) {
...
@@ -1992,11 +1992,49 @@ static void final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &fpu ) {
}
}
case
Op_AddP
:
{
// Assert sane base pointers
case
Op_AddP
:
{
// Assert sane base pointers
const
Node
*
addp
=
n
->
in
(
AddPNode
::
Address
);
Node
*
addp
=
n
->
in
(
AddPNode
::
Address
);
assert
(
!
addp
->
is_AddP
()
||
assert
(
!
addp
->
is_AddP
()
||
addp
->
in
(
AddPNode
::
Base
)
->
is_top
()
||
// Top OK for allocation
addp
->
in
(
AddPNode
::
Base
)
->
is_top
()
||
// Top OK for allocation
addp
->
in
(
AddPNode
::
Base
)
==
n
->
in
(
AddPNode
::
Base
),
addp
->
in
(
AddPNode
::
Base
)
==
n
->
in
(
AddPNode
::
Base
),
"Base pointers must match"
);
"Base pointers must match"
);
#ifdef _LP64
if
(
UseCompressedOops
&&
addp
->
Opcode
()
==
Op_ConP
&&
addp
==
n
->
in
(
AddPNode
::
Base
)
&&
n
->
in
(
AddPNode
::
Offset
)
->
is_Con
())
{
// Use addressing with narrow klass to load with offset on x86.
// On sparc loading 32-bits constant and decoding it have less
// instructions (4) then load 64-bits constant (7).
// Do this transformation here since IGVN will convert ConN back to ConP.
const
Type
*
t
=
addp
->
bottom_type
();
if
(
t
->
isa_oopptr
())
{
Node
*
nn
=
NULL
;
// Look for existing ConN node of the same exact type.
Compile
*
C
=
Compile
::
current
();
Node
*
r
=
C
->
root
();
uint
cnt
=
r
->
outcnt
();
for
(
uint
i
=
0
;
i
<
cnt
;
i
++
)
{
Node
*
m
=
r
->
raw_out
(
i
);
if
(
m
!=
NULL
&&
m
->
Opcode
()
==
Op_ConN
&&
m
->
bottom_type
()
->
is_narrowoop
()
->
make_oopptr
()
==
t
)
{
nn
=
m
;
break
;
}
}
if
(
nn
!=
NULL
)
{
// Decode a narrow oop to match address
// [R12 + narrow_oop_reg<<3 + offset]
nn
=
new
(
C
,
2
)
DecodeNNode
(
nn
,
t
);
n
->
set_req
(
AddPNode
::
Base
,
nn
);
n
->
set_req
(
AddPNode
::
Address
,
nn
);
if
(
addp
->
outcnt
()
==
0
)
{
addp
->
disconnect_inputs
(
NULL
);
}
}
}
}
#endif
break
;
break
;
}
}
...
...
src/share/vm/opto/type.cpp
浏览文件 @
50b9047d
...
@@ -940,6 +940,7 @@ const Type *TypeD::xmeet( const Type *t ) const {
...
@@ -940,6 +940,7 @@ const Type *TypeD::xmeet( const Type *t ) const {
case
InstPtr
:
case
InstPtr
:
case
KlassPtr
:
case
KlassPtr
:
case
AryPtr
:
case
AryPtr
:
case
NarrowOop
:
case
Int
:
case
Int
:
case
Long
:
case
Long
:
case
FloatTop
:
case
FloatTop
:
...
@@ -1086,6 +1087,7 @@ const Type *TypeInt::xmeet( const Type *t ) const {
...
@@ -1086,6 +1087,7 @@ const Type *TypeInt::xmeet( const Type *t ) const {
case
InstPtr
:
case
InstPtr
:
case
KlassPtr
:
case
KlassPtr
:
case
AryPtr
:
case
AryPtr
:
case
NarrowOop
:
case
Long
:
case
Long
:
case
FloatTop
:
case
FloatTop
:
case
FloatCon
:
case
FloatCon
:
...
@@ -1093,7 +1095,6 @@ const Type *TypeInt::xmeet( const Type *t ) const {
...
@@ -1093,7 +1095,6 @@ const Type *TypeInt::xmeet( const Type *t ) const {
case
DoubleTop
:
case
DoubleTop
:
case
DoubleCon
:
case
DoubleCon
:
case
DoubleBot
:
case
DoubleBot
:
case
NarrowOop
:
case
Bottom
:
// Ye Olde Default
case
Bottom
:
// Ye Olde Default
return
Type
::
BOTTOM
;
return
Type
::
BOTTOM
;
default:
// All else is a mistake
default:
// All else is a mistake
...
@@ -1328,6 +1329,7 @@ const Type *TypeLong::xmeet( const Type *t ) const {
...
@@ -1328,6 +1329,7 @@ const Type *TypeLong::xmeet( const Type *t ) const {
case
InstPtr
:
case
InstPtr
:
case
KlassPtr
:
case
KlassPtr
:
case
AryPtr
:
case
AryPtr
:
case
NarrowOop
:
case
Int
:
case
Int
:
case
FloatTop
:
case
FloatTop
:
case
FloatCon
:
case
FloatCon
:
...
...
src/share/vm/runtime/arguments.cpp
浏览文件 @
50b9047d
...
@@ -1176,7 +1176,9 @@ void Arguments::set_ergonomics_flags() {
...
@@ -1176,7 +1176,9 @@ void Arguments::set_ergonomics_flags() {
// by ergonomics.
// by ergonomics.
if
(
!
UseConcMarkSweepGC
&&
MaxHeapSize
<=
max_heap_for_compressed_oops
())
{
if
(
!
UseConcMarkSweepGC
&&
MaxHeapSize
<=
max_heap_for_compressed_oops
())
{
if
(
FLAG_IS_DEFAULT
(
UseCompressedOops
))
{
if
(
FLAG_IS_DEFAULT
(
UseCompressedOops
))
{
FLAG_SET_ERGO
(
bool
,
UseCompressedOops
,
true
);
// Leave compressed oops off by default. Uncomment
// the following line to return it to default status.
// FLAG_SET_ERGO(bool, UseCompressedOops, true);
}
}
}
else
{
}
else
{
if
(
UseCompressedOops
&&
!
FLAG_IS_DEFAULT
(
UseCompressedOops
))
{
if
(
UseCompressedOops
&&
!
FLAG_IS_DEFAULT
(
UseCompressedOops
))
{
...
...
src/share/vm/runtime/java.hpp
浏览文件 @
50b9047d
...
@@ -68,8 +68,24 @@ class JDK_Version : AllStatic {
...
@@ -68,8 +68,24 @@ class JDK_Version : AllStatic {
static
bool
is_jdk13x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
3
;
}
static
bool
is_jdk13x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
3
;
}
static
bool
is_jdk14x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
4
;
}
static
bool
is_jdk14x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
4
;
}
static
bool
is_jdk15x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
5
;
}
static
bool
is_jdk15x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
5
;
}
static
bool
is_jdk16x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
6
;
}
static
bool
is_jdk17x_version
()
{
assert
(
is_jdk_version_initialized
(),
"must have been initialized"
);
return
_jdk_version
==
7
;
}
static
bool
is_jdk16x_version
()
{
if
(
is_jdk_version_initialized
())
{
return
_jdk_version
==
6
;
}
else
{
assert
(
is_pre_jdk16_version
(),
"must have been initialized"
);
return
false
;
}
}
static
bool
is_jdk17x_version
()
{
if
(
is_jdk_version_initialized
())
{
return
_jdk_version
==
7
;
}
else
{
assert
(
is_pre_jdk16_version
(),
"must have been initialized"
);
return
false
;
}
}
static
bool
supports_thread_park_blocker
()
{
return
_version_info
.
thread_park_blocker
;
}
static
bool
supports_thread_park_blocker
()
{
return
_version_info
.
thread_park_blocker
;
}
...
@@ -85,14 +101,22 @@ class JDK_Version : AllStatic {
...
@@ -85,14 +101,22 @@ class JDK_Version : AllStatic {
}
}
static
bool
is_gte_jdk16x_version
()
{
static
bool
is_gte_jdk16x_version
()
{
// Keep the semantics of this that the version number is >= 1.6
// Keep the semantics of this that the version number is >= 1.6
assert
(
is_jdk_version_initialized
(),
"Not initialized"
);
if
(
is_jdk_version_initialized
())
{
return
_jdk_version
>=
6
;
return
_jdk_version
>=
6
;
}
else
{
assert
(
is_pre_jdk16_version
(),
"Not initialized"
);
return
false
;
}
}
}
static
bool
is_gte_jdk17x_version
()
{
static
bool
is_gte_jdk17x_version
()
{
// Keep the semantics of this that the version number is >= 1.7
// Keep the semantics of this that the version number is >= 1.7
assert
(
is_jdk_version_initialized
(),
"Not initialized"
);
if
(
is_jdk_version_initialized
())
{
return
_jdk_version
>=
7
;
return
_jdk_version
>=
7
;
}
else
{
assert
(
is_pre_jdk16_version
(),
"Not initialized"
);
return
false
;
}
}
}
static
bool
is_jdk_version_initialized
()
{
static
bool
is_jdk_version_initialized
()
{
...
...
test/compiler/6659207/Test.java
浏览文件 @
50b9047d
/*
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
*
* This code is free software; you can redistribute it and/or modify it
*
* under the terms of the GNU General Public License version 2 only, as
*
* published by the Free Software Foundation.
*
*
*
* This code is distributed in the hope that it will be useful, but WITHOUT
*
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
*
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
*
* version 2 for more details (a copy is included in the LICENSE file that
*
* accompanied this code).
*
*
*
* You should have received a copy of the GNU General Public License version
*
* 2 along with this work; if not, write to the Free Software Foundation,
*
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
*
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*
*/
*/
...
...
test/compiler/6661247/Test.java
浏览文件 @
50b9047d
/*
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
*
* This code is free software; you can redistribute it and/or modify it
*
* under the terms of the GNU General Public License version 2 only, as
*
* published by the Free Software Foundation.
*
*
*
* This code is distributed in the hope that it will be useful, but WITHOUT
*
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
*
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
*
* version 2 for more details (a copy is included in the LICENSE file that
*
* accompanied this code).
*
*
*
* You should have received a copy of the GNU General Public License version
*
* 2 along with this work; if not, write to the Free Software Foundation,
*
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
*
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*
*/
*/
...
...
test/compiler/6663621/IVTest.java
浏览文件 @
50b9047d
/*
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
*
* This code is free software; you can redistribute it and/or modify it
*
* under the terms of the GNU General Public License version 2 only, as
*
* published by the Free Software Foundation.
*
*
*
* This code is distributed in the hope that it will be useful, but WITHOUT
*
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
*
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
*
* version 2 for more details (a copy is included in the LICENSE file that
*
* accompanied this code).
*
*
*
* You should have received a copy of the GNU General Public License version
*
* 2 along with this work; if not, write to the Free Software Foundation,
*
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
*
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
*
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*
*/
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录