Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
290c90c2
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看板
提交
290c90c2
编写于
3月 02, 2016
作者:
K
kevinw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8146518: Zero interpreter broken with better byte behaviour
Reviewed-by: coleenp
上级
6433561e
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
6 addition
and
50 deletion
+6
-50
src/cpu/zero/vm/cppInterpreter_zero.cpp
src/cpu/zero/vm/cppInterpreter_zero.cpp
+4
-23
src/cpu/zero/vm/cppInterpreter_zero.hpp
src/cpu/zero/vm/cppInterpreter_zero.hpp
+1
-5
src/share/vm/oops/method.cpp
src/share/vm/oops/method.cpp
+0
-9
src/share/vm/oops/method.hpp
src/share/vm/oops/method.hpp
+1
-13
未找到文件。
src/cpu/zero/vm/cppInterpreter_zero.cpp
浏览文件 @
290c90c2
...
...
@@ -93,6 +93,7 @@ intptr_t narrow(BasicType type, intptr_t result) {
case
T_SHORT
:
return
(
intptr_t
)(
jshort
)
result
;
case
T_OBJECT
:
// nothing to do fall through
case
T_ARRAY
:
case
T_LONG
:
case
T_INT
:
case
T_FLOAT
:
...
...
@@ -183,7 +184,7 @@ void CppInterpreter::main_loop(int recurse, TRAPS) {
}
else
if
(
istate
->
msg
()
==
BytecodeInterpreter
::
return_from_method
)
{
// Copy the result into the caller's frame
result_slots
=
type2size
[
result_type_of
(
method
)];
result_slots
=
type2size
[
method
->
result_type
(
)];
assert
(
result_slots
>=
0
&&
result_slots
<=
2
,
"what?"
);
result
=
istate
->
stack
()
+
result_slots
;
break
;
...
...
@@ -221,7 +222,7 @@ void CppInterpreter::main_loop(int recurse, TRAPS) {
// Adjust result to smaller
intptr_t
res
=
result
[
-
i
];
if
(
result_slots
==
1
)
{
res
=
narrow
(
result_type_of
(
method
),
res
);
res
=
narrow
(
method
->
result_type
(
),
res
);
}
stack
->
push
(
res
);
}
...
...
@@ -435,7 +436,7 @@ int CppInterpreter::native_entry(Method* method, intptr_t UNUSED, TRAPS) {
// Push our result
if
(
!
HAS_PENDING_EXCEPTION
)
{
BasicType
type
=
result_type_of
(
method
);
BasicType
type
=
method
->
result_type
(
);
stack
->
set_sp
(
stack
->
sp
()
-
type2size
[
type
]);
switch
(
type
)
{
...
...
@@ -795,26 +796,6 @@ int AbstractInterpreter::BasicType_as_index(BasicType type) {
return
i
;
}
BasicType
CppInterpreter
::
result_type_of
(
Method
*
method
)
{
BasicType
t
;
switch
(
method
->
result_index
())
{
case
0
:
t
=
T_BOOLEAN
;
break
;
case
1
:
t
=
T_CHAR
;
break
;
case
2
:
t
=
T_BYTE
;
break
;
case
3
:
t
=
T_SHORT
;
break
;
case
4
:
t
=
T_INT
;
break
;
case
5
:
t
=
T_LONG
;
break
;
case
6
:
t
=
T_VOID
;
break
;
case
7
:
t
=
T_FLOAT
;
break
;
case
8
:
t
=
T_DOUBLE
;
break
;
case
9
:
t
=
T_OBJECT
;
break
;
default:
ShouldNotReachHere
();
}
assert
(
AbstractInterpreter
::
BasicType_as_index
(
t
)
==
method
->
result_index
(),
"out of step with AbstractInterpreter::BasicType_as_index"
);
return
t
;
}
address
InterpreterGenerator
::
generate_empty_entry
()
{
if
(
!
UseFastEmptyMethods
)
return
NULL
;
...
...
src/cpu/zero/vm/cppInterpreter_zero.hpp
浏览文件 @
290c90c2
/*
* Copyright (c) 1997, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
6
, Oracle and/or its affiliates. All rights reserved.
* Copyright 2007, 2008, 2010, 2011 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
...
...
@@ -49,8 +49,4 @@
static
intptr_t
*
calculate_unwind_sp
(
ZeroStack
*
stack
,
oop
method_handle
);
static
void
throw_exception
(
JavaThread
*
thread
,
Symbol
*
name
,
char
*
msg
=
NULL
);
private
:
// Fast result type determination
static
BasicType
result_type_of
(
Method
*
method
);
#endif // CPU_ZERO_VM_CPPINTERPRETER_ZERO_HPP
src/share/vm/oops/method.cpp
浏览文件 @
290c90c2
...
...
@@ -84,9 +84,6 @@ Method::Method(ConstMethod* xconst, AccessFlags access_flags, int size) {
set_constMethod
(
xconst
);
set_access_flags
(
access_flags
);
set_method_size
(
size
);
#ifdef CC_INTERP
set_result_index
(
T_VOID
);
#endif
set_intrinsic_id
(
vmIntrinsics
::
_none
);
set_jfr_towrite
(
false
);
set_force_inline
(
false
);
...
...
@@ -412,12 +409,6 @@ void Method::compute_size_of_parameters(Thread *thread) {
set_size_of_parameters
(
asc
.
size
()
+
(
is_static
()
?
0
:
1
));
}
#ifdef CC_INTERP
void
Method
::
set_result_index
(
BasicType
type
)
{
_result_index
=
Interpreter
::
BasicType_as_index
(
type
);
}
#endif
BasicType
Method
::
result_type
()
const
{
ResultTypeFinder
rtf
(
signature
());
return
rtf
.
type
();
...
...
src/share/vm/oops/method.hpp
浏览文件 @
290c90c2
/*
* Copyright (c) 1997, 201
5
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
6
, Oracle and/or its affiliates. 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
...
...
@@ -105,9 +105,6 @@ class Method : public Metadata {
AccessFlags
_access_flags
;
// Access flags
int
_vtable_index
;
// vtable index of this method (see VtableIndexFlag)
// note: can have vtables with >2**16 elements (because of inheritance)
#ifdef CC_INTERP
int
_result_index
;
// C++ interpreter needs for converting results to/from stack
#endif
u2
_method_size
;
// size of this object
u1
_intrinsic_id
;
// vmSymbols::intrinsic_id (0 == _none)
u1
_jfr_towrite
:
1
,
// Flags
...
...
@@ -202,11 +199,6 @@ class Method : public Metadata {
return
constMethod
()
->
type_annotations
();
}
#ifdef CC_INTERP
void
set_result_index
(
BasicType
type
);
int
result_index
()
{
return
_result_index
;
}
#endif
// Helper routine: get klass name + "." + method name + signature as
// C string, for the purpose of providing more useful NoSuchMethodErrors
// and fatal error handling. The string is allocated in resource
...
...
@@ -559,7 +551,6 @@ class Method : public Metadata {
void
compute_size_of_parameters
(
Thread
*
thread
);
// word size of parameters (receiver if any + arguments)
Symbol
*
klass_name
()
const
;
// returns the name of the method holder
BasicType
result_type
()
const
;
// type of the method result
int
result_type_index
()
const
;
// type index of the method result
bool
is_returning_oop
()
const
{
BasicType
r
=
result_type
();
return
(
r
==
T_OBJECT
||
r
==
T_ARRAY
);
}
bool
is_returning_fp
()
const
{
BasicType
r
=
result_type
();
return
(
r
==
T_FLOAT
||
r
==
T_DOUBLE
);
}
...
...
@@ -652,9 +643,6 @@ class Method : public Metadata {
// interpreter support
static
ByteSize
const_offset
()
{
return
byte_offset_of
(
Method
,
_constMethod
);
}
static
ByteSize
access_flags_offset
()
{
return
byte_offset_of
(
Method
,
_access_flags
);
}
#ifdef CC_INTERP
static
ByteSize
result_index_offset
()
{
return
byte_offset_of
(
Method
,
_result_index
);
}
#endif
/* CC_INTERP */
static
ByteSize
from_compiled_offset
()
{
return
byte_offset_of
(
Method
,
_from_compiled_entry
);
}
static
ByteSize
code_offset
()
{
return
byte_offset_of
(
Method
,
_code
);
}
static
ByteSize
method_data_offset
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录