Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
00d0ced6
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看板
提交
00d0ced6
编写于
10月 16, 2009
作者:
C
cfang
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
bc2275a3
83836ba8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
117 addition
and
11 deletion
+117
-11
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
+9
-11
test/compiler/6891750/Test6891750.java
test/compiler/6891750/Test6891750.java
+108
-0
未找到文件。
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
浏览文件 @
00d0ced6
...
...
@@ -3213,9 +3213,8 @@ void SharedRuntime::generate_deopt_blob() {
Register
Oreturn0
=
O0
;
Register
Oreturn1
=
O1
;
Register
O2UnrollBlock
=
O2
;
Register
O3tmp
=
O3
;
Register
I5exception_tmp
=
I5
;
Register
G4exception_tmp
=
G4_scratch
;
Register
L0deopt_mode
=
L0
;
Register
G4deopt_mode
=
G4_scratch
;
int
frame_size_words
;
Address
saved_Freturn0_addr
(
FP
,
-
sizeof
(
double
)
+
STACK_BIAS
);
#if !defined(_LP64) && defined(COMPILER2)
...
...
@@ -3265,7 +3264,7 @@ void SharedRuntime::generate_deopt_blob() {
map
=
RegisterSaver
::
save_live_registers
(
masm
,
0
,
&
frame_size_words
);
__
ba
(
false
,
cont
);
__
delayed
()
->
mov
(
Deoptimization
::
Unpack_deopt
,
I5exception_tmp
);
__
delayed
()
->
mov
(
Deoptimization
::
Unpack_deopt
,
L0deopt_mode
);
int
exception_offset
=
__
offset
()
-
start
;
...
...
@@ -3316,7 +3315,7 @@ void SharedRuntime::generate_deopt_blob() {
#endif
__
ba
(
false
,
cont
);
__
delayed
()
->
mov
(
Deoptimization
::
Unpack_exception
,
I5exception_tmp
);;
__
delayed
()
->
mov
(
Deoptimization
::
Unpack_exception
,
L0deopt_mode
);;
//
// Reexecute entry, similar to c2 uncommon trap
...
...
@@ -3326,7 +3325,7 @@ void SharedRuntime::generate_deopt_blob() {
// No need to update oop_map as each call to save_live_registers will produce identical oopmap
(
void
)
RegisterSaver
::
save_live_registers
(
masm
,
0
,
&
frame_size_words
);
__
mov
(
Deoptimization
::
Unpack_reexecute
,
I5exception_tmp
);
__
mov
(
Deoptimization
::
Unpack_reexecute
,
L0deopt_mode
);
__
bind
(
cont
);
...
...
@@ -3349,14 +3348,14 @@ void SharedRuntime::generate_deopt_blob() {
// NOTE: we know that only O0/O1 will be reloaded by restore_result_registers
// so this move will survive
__
mov
(
I5exception_tmp
,
G4exception_tmp
);
__
mov
(
L0deopt_mode
,
G4deopt_mode
);
__
mov
(
O0
,
O2UnrollBlock
->
after_save
());
RegisterSaver
::
restore_result_registers
(
masm
);
Label
noException
;
__
cmp
(
G4
exception_tmp
,
Deoptimization
::
Unpack_exception
);
// Was exception pending?
__
cmp
(
G4
deopt_mode
,
Deoptimization
::
Unpack_exception
);
// Was exception pending?
__
br
(
Assembler
::
notEqual
,
false
,
Assembler
::
pt
,
noException
);
__
delayed
()
->
nop
();
...
...
@@ -3390,10 +3389,10 @@ void SharedRuntime::generate_deopt_blob() {
}
#endif
__
set_last_Java_frame
(
SP
,
noreg
);
__
call_VM_leaf
(
L7_thread_cache
,
CAST_FROM_FN_PTR
(
address
,
Deoptimization
::
unpack_frames
),
G2_thread
,
G4
exception_tmp
);
__
call_VM_leaf
(
L7_thread_cache
,
CAST_FROM_FN_PTR
(
address
,
Deoptimization
::
unpack_frames
),
G2_thread
,
G4
deopt_mode
);
#else
// LP64 uses g4 in set_last_Java_frame
__
mov
(
G4
exception_tmp
,
O1
);
__
mov
(
G4
deopt_mode
,
O1
);
__
set_last_Java_frame
(
SP
,
G0
);
__
call_VM_leaf
(
L7_thread_cache
,
CAST_FROM_FN_PTR
(
address
,
Deoptimization
::
unpack_frames
),
G2_thread
,
O1
);
#endif
...
...
@@ -3446,7 +3445,6 @@ void SharedRuntime::generate_uncommon_trap_blob() {
#endif
MacroAssembler
*
masm
=
new
MacroAssembler
(
&
buffer
);
Register
O2UnrollBlock
=
O2
;
Register
O3tmp
=
O3
;
Register
O2klass_index
=
O2
;
//
...
...
test/compiler/6891750/Test6891750.java
0 → 100644
浏览文件 @
00d0ced6
/*
* Copyright 2009 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
* 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
* @bug 6891750
* @summary deopt blob kills values in O5
*
* @run main Test6891750
*/
abstract
class
Base6891750
extends
Thread
{
abstract
public
long
m
();
}
class
Other6891750
extends
Base6891750
{
public
long
m
()
{
return
0
;
}
}
public
class
Test6891750
extends
Base6891750
{
Base6891750
d
;
volatile
long
value
=
9
;
static
int
limit
=
400000
;
Test6891750
()
{
d
=
this
;
}
public
long
m
()
{
return
value
;
}
public
long
test
(
boolean
doit
)
{
if
(
doit
)
{
long
total0
=
0
;
long
total1
=
0
;
long
total2
=
0
;
long
total3
=
0
;
long
total4
=
0
;
long
total5
=
0
;
long
total6
=
0
;
long
total7
=
0
;
long
total8
=
0
;
long
total9
=
0
;
for
(
int
i
=
0
;
i
<
limit
;
i
++)
{
total0
+=
d
.
m
();
total1
+=
d
.
m
();
total2
+=
d
.
m
();
total3
+=
d
.
m
();
total4
+=
d
.
m
();
total5
+=
d
.
m
();
total6
+=
d
.
m
();
total7
+=
d
.
m
();
total8
+=
d
.
m
();
total9
+=
d
.
m
();
}
return
total0
+
total1
+
total2
+
total3
+
total4
+
total5
+
total6
+
total7
+
total8
+
total9
;
}
return
0
;
}
public
void
run
()
{
long
result
=
test
(
true
);
for
(
int
i
=
0
;
i
<
300
;
i
++)
{
long
result2
=
test
(
true
);
if
(
result
!=
result2
)
{
throw
new
InternalError
(
result
+
" != "
+
result2
);
}
}
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Test6891750
Test6891750
=
new
Test6891750
();
// warm it up
for
(
int
i
=
0
;
i
<
200000
;
i
++)
{
Test6891750
.
test
(
false
);
}
// set in off running
Test6891750
.
start
();
Thread
.
sleep
(
2000
);
// Load a class to invalidate CHA
new
Other6891750
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录