Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
be97cc90
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看板
提交
be97cc90
编写于
1月 22, 2018
作者:
A
aph
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8194739: Zero port of 8174962: Better interface invocations
Reviewed-by: adinn, coleenp
上级
289741c2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
32 addition
and
3 deletion
+32
-3
src/cpu/zero/vm/methodHandles_zero.cpp
src/cpu/zero/vm/methodHandles_zero.cpp
+6
-0
src/share/vm/interpreter/bytecodeInterpreter.cpp
src/share/vm/interpreter/bytecodeInterpreter.cpp
+26
-3
未找到文件。
src/cpu/zero/vm/methodHandles_zero.cpp
浏览文件 @
be97cc90
...
...
@@ -180,3 +180,9 @@ address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler*
return
NULL
;
}
}
#ifndef PRODUCT
void
MethodHandles
::
trace_method_handle
(
MacroAssembler
*
_masm
,
const
char
*
adaptername
)
{
// This is just a stub.
}
#endif //PRODUCT
src/share/vm/interpreter/bytecodeInterpreter.cpp
浏览文件 @
be97cc90
...
...
@@ -2569,13 +2569,35 @@ run:
// this could definitely be cleaned up QQQ
Method
*
callee
;
Klass
*
iclass
=
cache
->
f1_as_klass
();
// InstanceKlass* interface = (InstanceKlass*) iclass;
Method
*
interface_method
=
cache
->
f2_as_interface_method
();
InstanceKlass
*
iclass
=
interface_method
->
method_holder
();
// get receiver
int
parms
=
cache
->
parameter_size
();
oop
rcvr
=
STACK_OBJECT
(
-
parms
);
CHECK_NULL
(
rcvr
);
InstanceKlass
*
int2
=
(
InstanceKlass
*
)
rcvr
->
klass
();
// Receiver subtype check against resolved interface klass (REFC).
{
Klass
*
refc
=
cache
->
f1_as_klass
();
itableOffsetEntry
*
scan
;
for
(
scan
=
(
itableOffsetEntry
*
)
int2
->
start_of_itable
();
scan
->
interface_klass
()
!=
NULL
;
scan
++
)
{
if
(
scan
->
interface_klass
()
==
refc
)
{
break
;
}
}
// Check that the entry is non-null. A null entry means
// that the receiver class doesn't implement the
// interface, and wasn't the same as when the caller was
// compiled.
if
(
scan
->
interface_klass
()
==
NULL
)
{
VM_JAVA_ERROR
(
vmSymbols
::
java_lang_IncompatibleClassChangeError
(),
""
,
note_no_trap
);
}
}
itableOffsetEntry
*
ki
=
(
itableOffsetEntry
*
)
int2
->
start_of_itable
();
int
i
;
for
(
i
=
0
;
i
<
int2
->
itable_length
()
;
i
++
,
ki
++
)
{
...
...
@@ -2587,7 +2609,8 @@ run:
if
(
i
==
int2
->
itable_length
())
{
VM_JAVA_ERROR
(
vmSymbols
::
java_lang_IncompatibleClassChangeError
(),
""
,
note_no_trap
);
}
int
mindex
=
cache
->
f2_as_index
();
int
mindex
=
interface_method
->
itable_index
();
itableMethodEntry
*
im
=
ki
->
first_method_entry
(
rcvr
->
klass
());
callee
=
im
[
mindex
].
method
();
if
(
callee
==
NULL
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录