Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
0c2d2919
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,发现更多精彩内容 >>
提交
0c2d2919
编写于
12月 02, 2009
作者:
D
dholmes
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
2bf7be38
8bb1e6f9
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
70 addition
and
59 deletion
+70
-59
src/cpu/zero/vm/cppInterpreter_zero.cpp
src/cpu/zero/vm/cppInterpreter_zero.cpp
+14
-0
src/cpu/zero/vm/frame_zero.cpp
src/cpu/zero/vm/frame_zero.cpp
+7
-24
src/cpu/zero/vm/frame_zero.hpp
src/cpu/zero/vm/frame_zero.hpp
+1
-4
src/cpu/zero/vm/globals_zero.hpp
src/cpu/zero/vm/globals_zero.hpp
+0
-1
src/cpu/zero/vm/sharedRuntime_zero.cpp
src/cpu/zero/vm/sharedRuntime_zero.cpp
+8
-1
src/cpu/zero/vm/sharkFrame_zero.hpp
src/cpu/zero/vm/sharkFrame_zero.hpp
+2
-2
src/share/vm/interpreter/bytecodeInterpreter.cpp
src/share/vm/interpreter/bytecodeInterpreter.cpp
+2
-11
src/share/vm/interpreter/templateInterpreter.cpp
src/share/vm/interpreter/templateInterpreter.cpp
+5
-3
src/share/vm/opto/escape.cpp
src/share/vm/opto/escape.cpp
+0
-1
src/share/vm/opto/parse1.cpp
src/share/vm/opto/parse1.cpp
+6
-1
src/share/vm/prims/jni.cpp
src/share/vm/prims/jni.cpp
+15
-0
src/share/vm/prims/jvmtiManageCapabilities.cpp
src/share/vm/prims/jvmtiManageCapabilities.cpp
+2
-0
src/share/vm/runtime/os.hpp
src/share/vm/runtime/os.hpp
+8
-11
未找到文件。
src/cpu/zero/vm/cppInterpreter_zero.cpp
浏览文件 @
0c2d2919
...
...
@@ -204,6 +204,20 @@ void CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) {
goto
unwind_and_return
;
}
// Update the invocation counter
if
((
UseCompiler
||
CountCompiledCalls
)
&&
!
method
->
is_synchronized
())
{
thread
->
set_do_not_unlock
();
InvocationCounter
*
counter
=
method
->
invocation_counter
();
counter
->
increment
();
if
(
counter
->
reached_InvocationLimit
())
{
CALL_VM_NOCHECK
(
InterpreterRuntime
::
frequency_counter_overflow
(
thread
,
NULL
));
if
(
HAS_PENDING_EXCEPTION
)
goto
unwind_and_return
;
}
thread
->
clr_do_not_unlock
();
}
// Lock if necessary
BasicObjectLock
*
monitor
;
monitor
=
NULL
;
...
...
src/cpu/zero/vm/frame_zero.cpp
浏览文件 @
0c2d2919
...
...
@@ -36,11 +36,8 @@ bool frame::is_interpreted_frame() const {
return
zeroframe
()
->
is_interpreter_frame
();
}
bool
frame
::
is_fake_stub_frame
()
const
{
return
zeroframe
()
->
is_fake_stub_frame
();
}
frame
frame
::
sender_for_entry_frame
(
RegisterMap
*
map
)
const
{
assert
(
zeroframe
()
->
is_entry_frame
(),
"wrong type of frame"
);
assert
(
map
!=
NULL
,
"map must be set"
);
assert
(
!
entry_frame_is_first
(),
"next Java fp must be non zero"
);
assert
(
entry_frame_call_wrapper
()
->
anchor
()
->
last_Java_sp
()
==
sender_sp
(),
...
...
@@ -50,15 +47,10 @@ frame frame::sender_for_entry_frame(RegisterMap *map) const {
return
frame
(
sender_sp
(),
sp
()
+
1
);
}
frame
frame
::
sender_for_interpreter_frame
(
RegisterMap
*
map
)
const
{
return
frame
(
sender_sp
(),
sp
()
+
1
);
}
frame
frame
::
sender_for_compiled_frame
(
RegisterMap
*
map
)
const
{
return
frame
(
sender_sp
(),
sp
()
+
1
);
}
frame
frame
::
sender_for_fake_stub_frame
(
RegisterMap
*
map
)
const
{
frame
frame
::
sender_for_nonentry_frame
(
RegisterMap
*
map
)
const
{
assert
(
zeroframe
()
->
is_interpreter_frame
()
||
zeroframe
()
->
is_shark_frame
()
||
zeroframe
()
->
is_fake_stub_frame
(),
"wrong type of frame"
);
return
frame
(
sender_sp
(),
sp
()
+
1
);
}
...
...
@@ -69,17 +61,8 @@ frame frame::sender(RegisterMap* map) const {
if
(
is_entry_frame
())
return
sender_for_entry_frame
(
map
);
if
(
is_interpreted_frame
())
return
sender_for_interpreter_frame
(
map
);
if
(
is_compiled_frame
())
return
sender_for_compiled_frame
(
map
);
if
(
is_fake_stub_frame
())
return
sender_for_fake_stub_frame
(
map
);
ShouldNotReachHere
();
else
return
sender_for_nonentry_frame
(
map
);
}
#ifdef CC_INTERP
...
...
src/cpu/zero/vm/frame_zero.hpp
浏览文件 @
0c2d2919
...
...
@@ -65,10 +65,7 @@
}
public
:
bool
is_fake_stub_frame
()
const
;
public
:
frame
sender_for_fake_stub_frame
(
RegisterMap
*
map
)
const
;
frame
sender_for_nonentry_frame
(
RegisterMap
*
map
)
const
;
public
:
void
zero_print_on_error
(
int
index
,
...
...
src/cpu/zero/vm/globals_zero.hpp
浏览文件 @
0c2d2919
...
...
@@ -36,7 +36,6 @@ define_pd_global(bool, UncommonNullCast, true);
define_pd_global
(
intx
,
CodeEntryAlignment
,
32
);
define_pd_global
(
intx
,
InlineFrequencyCount
,
100
);
define_pd_global
(
intx
,
InlineSmallCode
,
1000
);
define_pd_global
(
intx
,
PreInflateSpin
,
10
);
define_pd_global
(
intx
,
StackYellowPages
,
2
);
...
...
src/cpu/zero/vm/sharedRuntime_zero.cpp
浏览文件 @
0c2d2919
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2007, 2008 Red Hat, Inc.
* Copyright 2007, 2008
, 2009
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -61,7 +61,14 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm,
BasicType
*
in_sig_bt
,
VMRegPair
*
in_regs
,
BasicType
ret_type
)
{
#ifdef SHARK
return
SharkCompiler
::
compiler
()
->
generate_native_wrapper
(
masm
,
method
,
in_sig_bt
,
ret_type
);
#else
ShouldNotCallThis
();
#endif // SHARK
}
int
Deoptimization
::
last_frame_adjust
(
int
callee_parameters
,
...
...
src/cpu/zero/vm/sharkFrame_zero.hpp
浏览文件 @
0c2d2919
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2008 Red Hat, Inc.
* Copyright 2008
, 2009
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -41,7 +41,7 @@
// | ... |
class
SharkFrame
:
public
ZeroFrame
{
friend
class
Shark
Function
;
friend
class
Shark
Stack
;
private:
SharkFrame
()
:
ZeroFrame
()
{
...
...
src/share/vm/interpreter/bytecodeInterpreter.cpp
浏览文件 @
0c2d2919
...
...
@@ -281,7 +281,7 @@
#define DO_BACKEDGE_CHECKS(skip, branch_pc) \
if ((skip) <= 0) { \
if (Use
Compiler && UseLoopCounter) {
\
if (Use
LoopCounter) {
\
bool do_OSR = UseOnStackReplacement; \
BACKEDGE_COUNT->increment(); \
if (do_OSR) do_OSR = BACKEDGE_COUNT->reached_InvocationLimit(); \
...
...
@@ -289,16 +289,12 @@
nmethod* osr_nmethod; \
OSR_REQUEST(osr_nmethod, branch_pc); \
if (osr_nmethod != NULL && osr_nmethod->osr_entry_bci() != InvalidOSREntryBci) { \
intptr_t* buf; \
CALL_VM(buf=SharedRuntime::OSR_migration_begin(THREAD), handle_exception); \
intptr_t* buf = SharedRuntime::OSR_migration_begin(THREAD); \
istate->set_msg(do_osr); \
istate->set_osr_buf((address)buf); \
istate->set_osr_entry(osr_nmethod->osr_entry()); \
return; \
} \
} else { \
INCR_INVOCATION_COUNT; \
SAFEPOINT; \
} \
}
/* UseCompiler ... */
\
INCR_INVOCATION_COUNT; \
...
...
@@ -1281,12 +1277,7 @@ run:
jfloat
f
;
jdouble
r
;
f
=
STACK_FLOAT
(
-
1
);
#ifdef IA64
// IA64 gcc bug
r
=
(
f
==
0.0
f
)
?
(
jdouble
)
f
:
(
jdouble
)
f
+
ia64_double_zero
;
#else
r
=
(
jdouble
)
f
;
#endif
MORE_STACK
(
-
1
);
// POP
SET_STACK_DOUBLE
(
r
,
1
);
UPDATE_PC_AND_TOS_AND_CONTINUE
(
1
,
2
);
...
...
src/share/vm/interpreter/templateInterpreter.cpp
浏览文件 @
0c2d2919
...
...
@@ -465,9 +465,11 @@ void TemplateInterpreterGenerator::set_wide_entry_point(Template* t, address& we
void
TemplateInterpreterGenerator
::
set_short_entry_points
(
Template
*
t
,
address
&
bep
,
address
&
cep
,
address
&
sep
,
address
&
aep
,
address
&
iep
,
address
&
lep
,
address
&
fep
,
address
&
dep
,
address
&
vep
)
{
assert
(
t
->
is_valid
(),
"template must exist"
);
switch
(
t
->
tos_in
())
{
case
btos
:
vep
=
__
pc
();
__
pop
(
btos
);
bep
=
__
pc
();
generate_and_dispatch
(
t
);
break
;
case
ctos
:
vep
=
__
pc
();
__
pop
(
ctos
);
sep
=
__
pc
();
generate_and_dispatch
(
t
);
break
;
case
stos
:
vep
=
__
pc
();
__
pop
(
stos
);
sep
=
__
pc
();
generate_and_dispatch
(
t
);
break
;
case
btos
:
case
ctos
:
case
stos
:
ShouldNotReachHere
();
// btos/ctos/stos should use itos.
break
;
case
atos
:
vep
=
__
pc
();
__
pop
(
atos
);
aep
=
__
pc
();
generate_and_dispatch
(
t
);
break
;
case
itos
:
vep
=
__
pc
();
__
pop
(
itos
);
iep
=
__
pc
();
generate_and_dispatch
(
t
);
break
;
case
ltos
:
vep
=
__
pc
();
__
pop
(
ltos
);
lep
=
__
pc
();
generate_and_dispatch
(
t
);
break
;
...
...
src/share/vm/opto/escape.cpp
浏览文件 @
0c2d2919
...
...
@@ -1150,7 +1150,6 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist)
}
else
{
assert
(
n
->
is_Mem
(),
"memory node required."
);
Node
*
addr
=
n
->
in
(
MemNode
::
Address
);
assert
(
addr
->
is_AddP
(),
"AddP required"
);
const
Type
*
addr_t
=
igvn
->
type
(
addr
);
if
(
addr_t
==
Type
::
TOP
)
continue
;
...
...
src/share/vm/opto/parse1.cpp
浏览文件 @
0c2d2919
...
...
@@ -231,12 +231,13 @@ void Parse::load_interpreter_state(Node* osr_buf) {
// Use the raw liveness computation to make sure that unexpected
// values don't propagate into the OSR frame.
MethodLivenessResult
live_locals
=
method
()
->
raw_
liveness_at_bci
(
osr_bci
());
MethodLivenessResult
live_locals
=
method
()
->
liveness_at_bci
(
osr_bci
());
if
(
!
live_locals
.
is_valid
())
{
// Degenerate or breakpointed method.
C
->
record_method_not_compilable
(
"OSR in empty or breakpointed method"
);
return
;
}
MethodLivenessResult
raw_live_locals
=
method
()
->
raw_liveness_at_bci
(
osr_bci
());
// Extract the needed locals from the interpreter frame.
Node
*
locals_addr
=
basic_plus_adr
(
osr_buf
,
osr_buf
,
(
max_locals
-
1
)
*
wordSize
);
...
...
@@ -316,6 +317,10 @@ void Parse::load_interpreter_state(Node* osr_buf) {
continue
;
}
}
if
(
type
->
basic_type
()
==
T_ADDRESS
&&
!
raw_live_locals
.
at
(
index
))
{
// Skip type check for dead address locals
continue
;
}
set_local
(
index
,
check_interpreter_type
(
l
,
type
,
bad_type_exit
));
}
...
...
src/share/vm/prims/jni.cpp
浏览文件 @
0c2d2919
...
...
@@ -3231,6 +3231,21 @@ _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, v
jint
result
=
JNI_ERR
;
DT_RETURN_MARK
(
CreateJavaVM
,
jint
,
(
const
jint
&
)
result
);
// We're about to use Atomic::xchg for synchronization. Some Zero
// platforms use the GCC builtin __sync_lock_test_and_set for this,
// but __sync_lock_test_and_set is not guaranteed to do what we want
// on all architectures. So we check it works before relying on it.
#if defined(ZERO) && defined(ASSERT)
{
jint
a
=
0xcafebabe
;
jint
b
=
Atomic
::
xchg
(
0xdeadbeef
,
&
a
);
void
*
c
=
&
a
;
void
*
d
=
Atomic
::
xchg_ptr
(
&
b
,
&
c
);
assert
(
a
==
0xdeadbeef
&&
b
==
(
jint
)
0xcafebabe
,
"Atomic::xchg() works"
);
assert
(
c
==
&
b
&&
d
==
&
a
,
"Atomic::xchg_ptr() works"
);
}
#endif // ZERO && ASSERT
// At the moment it's only possible to have one Java VM,
// since some of the runtime state is in global variables.
...
...
src/share/vm/prims/jvmtiManageCapabilities.cpp
浏览文件 @
0c2d2919
...
...
@@ -115,8 +115,10 @@ jvmtiCapabilities JvmtiManageCapabilities::init_onload_capabilities() {
jvmtiCapabilities
jc
;
memset
(
&
jc
,
0
,
sizeof
(
jc
));
#ifndef CC_INTERP
jc
.
can_pop_frame
=
1
;
jc
.
can_force_early_return
=
1
;
#endif // !CC_INTERP
jc
.
can_get_source_debug_extension
=
1
;
jc
.
can_access_local_variables
=
1
;
jc
.
can_maintain_original_method_order
=
1
;
...
...
src/share/vm/runtime/os.hpp
浏览文件 @
0c2d2919
...
...
@@ -294,19 +294,16 @@ class os: AllStatic {
}
static
bool
is_memory_serialize_page
(
JavaThread
*
thread
,
address
addr
)
{
address
thr_addr
;
if
(
UseMembar
)
return
false
;
// Calculate thread specific address
// Previously this function calculated the exact address of this
// thread's serialize page, and checked if the faulting address
// was equal. However, some platforms mask off faulting addresses
// to the page size, so now we just check that the address is
// within the page. This makes the thread argument unnecessary,
// but we retain the NULL check to preserve existing behaviour.
if
(
thread
==
NULL
)
return
false
;
// TODO-FIXME: some platforms mask off faulting addresses to the base pagesize.
// Instead of using a test for equality we should probably use something
// of the form:
// return ((_mem_serialize_page ^ addr) & -pagesize) == 0
//
thr_addr
=
(
address
)(((
uintptr_t
)
thread
>>
get_serialize_page_shift_count
())
&
get_serialize_page_mask
())
+
(
uintptr_t
)
_mem_serialize_page
;
return
(
thr_addr
==
addr
);
address
page
=
(
address
)
_mem_serialize_page
;
return
addr
>=
page
&&
addr
<
(
page
+
os
::
vm_page_size
());
}
static
void
block_on_serialize_page_trap
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录