Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
47ba278e
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看板
提交
47ba278e
编写于
2月 18, 2010
作者:
T
twisti
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
d0522425
824ca713
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
62 addition
and
24 deletion
+62
-24
src/cpu/zero/vm/globals_zero.hpp
src/cpu/zero/vm/globals_zero.hpp
+2
-2
src/os_cpu/linux_zero/vm/os_linux_zero.hpp
src/os_cpu/linux_zero/vm/os_linux_zero.hpp
+8
-2
src/share/vm/opto/callGenerator.cpp
src/share/vm/opto/callGenerator.cpp
+5
-2
src/share/vm/opto/compile.cpp
src/share/vm/opto/compile.cpp
+3
-1
src/share/vm/opto/compile.hpp
src/share/vm/opto/compile.hpp
+8
-1
src/share/vm/opto/output.cpp
src/share/vm/opto/output.cpp
+26
-7
src/share/vm/opto/parse1.cpp
src/share/vm/opto/parse1.cpp
+2
-1
src/share/vm/runtime/sharedRuntime.cpp
src/share/vm/runtime/sharedRuntime.cpp
+8
-8
未找到文件。
src/cpu/zero/vm/globals_zero.hpp
浏览文件 @
47ba278e
/*
* Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2007, 2008, 2009 Red Hat, Inc.
* Copyright 2007, 2008, 2009
, 2010
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
...
...
@@ -40,7 +40,7 @@ define_pd_global(intx, PreInflateSpin, 10);
define_pd_global
(
intx
,
StackYellowPages
,
2
);
define_pd_global
(
intx
,
StackRedPages
,
1
);
define_pd_global
(
intx
,
StackShadowPages
,
3
LP64_ONLY
(
+
3
)
DEBUG_ONLY
(
+
3
));
define_pd_global
(
intx
,
StackShadowPages
,
5
LP64_ONLY
(
+
1
)
DEBUG_ONLY
(
+
3
));
define_pd_global
(
bool
,
RewriteBytecodes
,
true
);
define_pd_global
(
bool
,
RewriteFrequentPairs
,
true
);
src/os_cpu/linux_zero/vm/os_linux_zero.hpp
浏览文件 @
47ba278e
/*
* Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2007, 2008 Red Hat, Inc.
* Copyright 2007, 2008
, 2010
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
...
...
@@ -39,7 +39,13 @@
"stfd %0, 0(%2)
\n
"
:
"=f"
(
tmp
)
:
"b"
(
src
),
"b"
(
dst
));
#elif defined(S390) && !defined(_LP64)
double
tmp
;
asm
volatile
(
"ld %0, 0(%1)
\n
"
"std %0, 0(%2)
\n
"
:
"=r"
(
tmp
)
:
"a"
(
src
),
"a"
(
dst
));
#else
*
(
jlong
*
)
dst
=
*
(
jlong
*
)
src
;
#endif
// PPC && !_LP64
#endif
}
src/share/vm/opto/callGenerator.cpp
浏览文件 @
47ba278e
/*
* Copyright 2000-20
09
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2000-20
10
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -136,8 +136,10 @@ JVMState* DirectCallGenerator::generate(JVMState* jvms) {
}
// Mark the call node as virtual, sort of:
call
->
set_optimized_virtual
(
true
);
if
(
method
()
->
is_method_handle_invoke
())
if
(
method
()
->
is_method_handle_invoke
())
{
call
->
set_method_handle_invoke
(
true
);
kit
.
C
->
set_has_method_handle_invokes
(
true
);
}
}
kit
.
set_arguments_for_java_call
(
call
);
kit
.
set_edges_for_java_call
(
call
,
false
,
_separate_io_proj
);
...
...
@@ -194,6 +196,7 @@ JVMState* DynamicCallGenerator::generate(JVMState* jvms) {
call
->
set_optimized_virtual
(
true
);
// Take extra care (in the presence of argument motion) not to trash the SP:
call
->
set_method_handle_invoke
(
true
);
kit
.
C
->
set_has_method_handle_invokes
(
true
);
// Pass the target MethodHandle as first argument and shift the
// other arguments.
...
...
src/share/vm/opto/compile.cpp
浏览文件 @
47ba278e
/*
* Copyright 1997-20
09
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 1997-20
10
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -465,6 +465,7 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
_code_buffer
(
"Compile::Fill_buffer"
),
_orig_pc_slot
(
0
),
_orig_pc_slot_offset_in_bytes
(
0
),
_has_method_handle_invokes
(
false
),
_node_bundling_limit
(
0
),
_node_bundling_base
(
NULL
),
_java_calls
(
0
),
...
...
@@ -759,6 +760,7 @@ Compile::Compile( ciEnv* ci_env,
_do_escape_analysis
(
false
),
_failure_reason
(
NULL
),
_code_buffer
(
"Compile::Fill_buffer"
),
_has_method_handle_invokes
(
false
),
_node_bundling_limit
(
0
),
_node_bundling_base
(
NULL
),
_java_calls
(
0
),
...
...
src/share/vm/opto/compile.hpp
浏览文件 @
47ba278e
/*
* Copyright 1997-20
09
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 1997-20
10
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -166,6 +166,9 @@ class Compile : public Phase {
bool
_parsed_irreducible_loop
;
// True if ciTypeFlow detected irreducible loops during parsing
#endif
// JSR 292
bool
_has_method_handle_invokes
;
// True if this method has MethodHandle invokes.
// Compilation environment.
Arena
_comp_arena
;
// Arena with lifetime equivalent to Compile
ciEnv
*
_env
;
// CI interface
...
...
@@ -336,6 +339,10 @@ class Compile : public Phase {
void
set_parsed_irreducible_loop
(
bool
z
)
{
_parsed_irreducible_loop
=
z
;
}
#endif
// JSR 292
bool
has_method_handle_invokes
()
const
{
return
_has_method_handle_invokes
;
}
void
set_has_method_handle_invokes
(
bool
z
)
{
_has_method_handle_invokes
=
z
;
}
void
begin_method
()
{
#ifndef PRODUCT
if
(
_printer
)
_printer
->
begin_method
(
this
);
...
...
src/share/vm/opto/output.cpp
浏览文件 @
47ba278e
...
...
@@ -805,8 +805,12 @@ void Compile::Process_OopMap_Node(MachNode *mach, int current_offset) {
mcall
=
mach
->
as_MachCall
();
// Is the call a MethodHandle call?
if
(
mcall
->
is_MachCallJava
())
is_method_handle_invoke
=
mcall
->
as_MachCallJava
()
->
_method_handle_invoke
;
if
(
mcall
->
is_MachCallJava
())
{
if
(
mcall
->
as_MachCallJava
()
->
_method_handle_invoke
)
{
assert
(
has_method_handle_invokes
(),
"must have been set during call generation"
);
is_method_handle_invoke
=
true
;
}
}
// Check if a call returns an object.
if
(
mcall
->
return_value_is_used
()
&&
...
...
@@ -1092,9 +1096,21 @@ void Compile::Fill_buffer() {
deopt_handler_req
+=
MAX_stubs_size
;
// add marginal slop for handler
stub_req
+=
MAX_stubs_size
;
// ensure per-stub margin
code_req
+=
MAX_inst_size
;
// ensure per-instruction margin
if
(
StressCodeBuffers
)
code_req
=
const_req
=
stub_req
=
exception_handler_req
=
deopt_handler_req
=
0x10
;
// force expansion
int
total_req
=
code_req
+
pad_req
+
stub_req
+
exception_handler_req
+
deopt_handler_req
+
const_req
;
int
total_req
=
code_req
+
pad_req
+
stub_req
+
exception_handler_req
+
deopt_handler_req
+
// deopt handler
const_req
;
if
(
has_method_handle_invokes
())
total_req
+=
deopt_handler_req
;
// deopt MH handler
CodeBuffer
*
cb
=
code_buffer
();
cb
->
initialize
(
total_req
,
locs_req
);
...
...
@@ -1436,10 +1452,13 @@ void Compile::Fill_buffer() {
_code_offsets
.
set_value
(
CodeOffsets
::
Exceptions
,
emit_exception_handler
(
*
cb
));
// Emit the deopt handler code.
_code_offsets
.
set_value
(
CodeOffsets
::
Deopt
,
emit_deopt_handler
(
*
cb
));
// Emit the MethodHandle deopt handler code. We can use the same
// code as for the normal deopt handler, we just need a different
// entry point address.
_code_offsets
.
set_value
(
CodeOffsets
::
DeoptMH
,
emit_deopt_handler
(
*
cb
));
// Emit the MethodHandle deopt handler code (if required).
if
(
has_method_handle_invokes
())
{
// We can use the same code as for the normal deopt handler, we
// just need a different entry point address.
_code_offsets
.
set_value
(
CodeOffsets
::
DeoptMH
,
emit_deopt_handler
(
*
cb
));
}
}
// One last check for failed CodeBuffer::expand:
...
...
src/share/vm/opto/parse1.cpp
浏览文件 @
47ba278e
...
...
@@ -824,7 +824,6 @@ bool Parse::can_rerun_bytecode() {
case
Bytecodes
::
_ddiv
:
case
Bytecodes
::
_checkcast
:
case
Bytecodes
::
_instanceof
:
case
Bytecodes
::
_athrow
:
case
Bytecodes
::
_anewarray
:
case
Bytecodes
::
_newarray
:
case
Bytecodes
::
_multianewarray
:
...
...
@@ -834,6 +833,8 @@ bool Parse::can_rerun_bytecode() {
return
true
;
break
;
// Don't rerun athrow since it's part of the exception path.
case
Bytecodes
::
_athrow
:
case
Bytecodes
::
_invokestatic
:
case
Bytecodes
::
_invokedynamic
:
case
Bytecodes
::
_invokespecial
:
...
...
src/share/vm/runtime/sharedRuntime.cpp
浏览文件 @
47ba278e
...
...
@@ -1947,7 +1947,7 @@ class AdapterHandlerTable : public BasicHashtable {
private:
#if
def ASSER
T
#if
ndef PRODUC
T
static
int
_lookups
;
// number of calls to lookup
static
int
_buckets
;
// number of buckets checked
static
int
_equals
;
// number of buckets checked with matching hash
...
...
@@ -1983,16 +1983,16 @@ class AdapterHandlerTable : public BasicHashtable {
// Find a entry with the same fingerprint if it exists
AdapterHandlerEntry
*
lookup
(
int
total_args_passed
,
BasicType
*
sig_bt
)
{
debug_only
(
_lookups
++
);
NOT_PRODUCT
(
_lookups
++
);
AdapterFingerPrint
fp
(
total_args_passed
,
sig_bt
);
unsigned
int
hash
=
fp
.
compute_hash
();
int
index
=
hash_to_index
(
hash
);
for
(
AdapterHandlerEntry
*
e
=
bucket
(
index
);
e
!=
NULL
;
e
=
e
->
next
())
{
debug_only
(
_buckets
++
);
NOT_PRODUCT
(
_buckets
++
);
if
(
e
->
hash
()
==
hash
)
{
debug_only
(
_equals
++
);
NOT_PRODUCT
(
_equals
++
);
if
(
fp
.
equals
(
e
->
fingerprint
()))
{
#if
def ASSER
T
#if
ndef PRODUC
T
if
(
fp
.
is_compact
())
_compact
++
;
_hits
++
;
#endif
...
...
@@ -2003,6 +2003,7 @@ class AdapterHandlerTable : public BasicHashtable {
return
NULL
;
}
#ifndef PRODUCT
void
print_statistics
()
{
ResourceMark
rm
;
int
longest
=
0
;
...
...
@@ -2021,15 +2022,14 @@ class AdapterHandlerTable : public BasicHashtable {
}
tty
->
print_cr
(
"AdapterHandlerTable: empty %d longest %d total %d average %f"
,
empty
,
longest
,
total
,
total
/
(
double
)
nonempty
);
#ifdef ASSERT
tty
->
print_cr
(
"AdapterHandlerTable: lookups %d buckets %d equals %d hits %d compact %d"
,
_lookups
,
_buckets
,
_equals
,
_hits
,
_compact
);
#endif
}
#endif
};
#if
def ASSER
T
#if
ndef PRODUC
T
int
AdapterHandlerTable
::
_lookups
;
int
AdapterHandlerTable
::
_buckets
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录