Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
ccc4166c
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看板
提交
ccc4166c
编写于
7月 01, 2009
作者:
N
never
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6856025: assert(_base >= OopPtr && _base <= KlassPtr,"Not a Java pointer")
Reviewed-by: kvn
上级
95f21e03
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
35 addition
and
26 deletion
+35
-26
src/share/vm/adlc/output_h.cpp
src/share/vm/adlc/output_h.cpp
+2
-2
src/share/vm/opto/graphKit.cpp
src/share/vm/opto/graphKit.cpp
+1
-1
src/share/vm/opto/library_call.cpp
src/share/vm/opto/library_call.cpp
+1
-1
src/share/vm/opto/parse2.cpp
src/share/vm/opto/parse2.cpp
+1
-1
src/share/vm/opto/parse3.cpp
src/share/vm/opto/parse3.cpp
+1
-1
src/share/vm/opto/type.cpp
src/share/vm/opto/type.cpp
+11
-11
src/share/vm/opto/type.hpp
src/share/vm/opto/type.hpp
+18
-9
未找到文件。
src/share/vm/adlc/output_h.cpp
浏览文件 @
ccc4166c
...
...
@@ -1367,11 +1367,11 @@ void ArchDesc::declareClasses(FILE *fp) {
else
if
(
!
strcmp
(
oper
->
ideal_type
(
_globalNames
),
"ConN"
))
{
// Access the locally stored constant
fprintf
(
fp
,
" virtual intptr_t constant() const {"
);
fprintf
(
fp
,
" return _c0->
make_oopptr
()->get_con();"
);
fprintf
(
fp
,
" return _c0->
get_ptrtype
()->get_con();"
);
fprintf
(
fp
,
" }
\n
"
);
// Generate query to determine if this pointer is an oop
fprintf
(
fp
,
" virtual bool constant_is_oop() const {"
);
fprintf
(
fp
,
" return _c0->
make_oopptr
()->isa_oop_ptr();"
);
fprintf
(
fp
,
" return _c0->
get_ptrtype
()->isa_oop_ptr();"
);
fprintf
(
fp
,
" }
\n
"
);
}
else
if
(
!
strcmp
(
oper
->
ideal_type
(
_globalNames
),
"ConL"
))
{
...
...
src/share/vm/opto/graphKit.cpp
浏览文件 @
ccc4166c
...
...
@@ -1480,7 +1480,7 @@ Node* GraphKit::store_oop_to_unknown(Node* ctl,
}
}
}
else
if
(
adr_type
->
isa_aryptr
())
{
val_type
=
adr_type
->
is_aryptr
()
->
elem
()
->
isa
_oopptr
();
val_type
=
adr_type
->
is_aryptr
()
->
elem
()
->
make
_oopptr
();
}
if
(
val_type
==
NULL
)
{
val_type
=
TypeInstPtr
::
BOTTOM
;
...
...
src/share/vm/opto/library_call.cpp
浏览文件 @
ccc4166c
...
...
@@ -2393,7 +2393,7 @@ bool LibraryCallKit::inline_unsafe_CAS(BasicType type) {
case
T_OBJECT
:
// reference stores need a store barrier.
// (They don't if CAS fails, but it isn't worth checking.)
pre_barrier
(
control
(),
base
,
adr
,
alias_idx
,
newval
,
value_type
->
is
_oopptr
(),
T_OBJECT
);
pre_barrier
(
control
(),
base
,
adr
,
alias_idx
,
newval
,
value_type
->
make
_oopptr
(),
T_OBJECT
);
#ifdef _LP64
if
(
adr
->
bottom_type
()
->
is_ptr_to_narrowoop
())
{
Node
*
newval_enc
=
_gvn
.
transform
(
new
(
C
,
2
)
EncodePNode
(
newval
,
newval
->
bottom_type
()
->
make_narrowoop
()));
...
...
src/share/vm/opto/parse2.cpp
浏览文件 @
ccc4166c
...
...
@@ -1565,7 +1565,7 @@ void Parse::do_one_bytecode() {
c
=
pop
();
// Oop to store
b
=
pop
();
// index (already used)
a
=
pop
();
// the array itself
const
TypeOopPtr
*
elemtype
=
_gvn
.
type
(
a
)
->
is_aryptr
()
->
elem
()
->
is
_oopptr
();
const
TypeOopPtr
*
elemtype
=
_gvn
.
type
(
a
)
->
is_aryptr
()
->
elem
()
->
make
_oopptr
();
const
TypeAryPtr
*
adr_type
=
TypeAryPtr
::
OOPS
;
Node
*
store
=
store_oop_to_array
(
control
(),
a
,
d
,
adr_type
,
c
,
elemtype
,
T_OBJECT
);
break
;
...
...
src/share/vm/opto/parse3.cpp
浏览文件 @
ccc4166c
...
...
@@ -361,7 +361,7 @@ Node* Parse::expand_multianewarray(ciArrayKlass* array_klass, Node* *lengths, in
guarantee
(
length_con
>=
0
,
"non-constant multianewarray"
);
ciArrayKlass
*
array_klass_1
=
array_klass
->
as_obj_array_klass
()
->
element_klass
()
->
as_array_klass
();
const
TypePtr
*
adr_type
=
TypeAryPtr
::
OOPS
;
const
TypeOopPtr
*
elemtype
=
_gvn
.
type
(
array
)
->
is_aryptr
()
->
elem
()
->
is
_oopptr
();
const
TypeOopPtr
*
elemtype
=
_gvn
.
type
(
array
)
->
is_aryptr
()
->
elem
()
->
make
_oopptr
();
const
intptr_t
header
=
arrayOopDesc
::
base_offset_in_bytes
(
T_OBJECT
);
for
(
jint
i
=
0
;
i
<
length_con
;
i
++
)
{
Node
*
elem
=
expand_multianewarray
(
array_klass_1
,
&
lengths
[
1
],
ndimensions
-
1
,
nargs
);
...
...
src/share/vm/opto/type.cpp
浏览文件 @
ccc4166c
...
...
@@ -3484,27 +3484,27 @@ const TypeNarrowOop* TypeNarrowOop::make(const TypePtr* type) {
//------------------------------hash-------------------------------------------
// Type-specific hashing function.
int
TypeNarrowOop
::
hash
(
void
)
const
{
return
_
oop
type
->
hash
()
+
7
;
return
_
ptr
type
->
hash
()
+
7
;
}
bool
TypeNarrowOop
::
eq
(
const
Type
*
t
)
const
{
const
TypeNarrowOop
*
tc
=
t
->
isa_narrowoop
();
if
(
tc
!=
NULL
)
{
if
(
_
ooptype
->
base
()
!=
tc
->
_oop
type
->
base
())
{
if
(
_
ptrtype
->
base
()
!=
tc
->
_ptr
type
->
base
())
{
return
false
;
}
return
tc
->
_
ooptype
->
eq
(
_oop
type
);
return
tc
->
_
ptrtype
->
eq
(
_ptr
type
);
}
return
false
;
}
bool
TypeNarrowOop
::
singleton
(
void
)
const
{
// TRUE if type is a singleton
return
_
oop
type
->
singleton
();
return
_
ptr
type
->
singleton
();
}
bool
TypeNarrowOop
::
empty
(
void
)
const
{
return
_
oop
type
->
empty
();
return
_
ptr
type
->
empty
();
}
//------------------------------xmeet------------------------------------------
...
...
@@ -3538,7 +3538,7 @@ const Type *TypeNarrowOop::xmeet( const Type *t ) const {
return
this
;
case
NarrowOop
:
{
const
Type
*
result
=
_
oop
type
->
xmeet
(
t
->
make_ptr
());
const
Type
*
result
=
_
ptr
type
->
xmeet
(
t
->
make_ptr
());
if
(
result
->
isa_ptr
())
{
return
TypeNarrowOop
::
make
(
result
->
is_ptr
());
}
...
...
@@ -3554,13 +3554,13 @@ const Type *TypeNarrowOop::xmeet( const Type *t ) const {
}
const
Type
*
TypeNarrowOop
::
xdual
()
const
{
// Compute dual right now.
const
TypePtr
*
odual
=
_
oop
type
->
dual
()
->
is_ptr
();
const
TypePtr
*
odual
=
_
ptr
type
->
dual
()
->
is_ptr
();
return
new
TypeNarrowOop
(
odual
);
}
const
Type
*
TypeNarrowOop
::
filter
(
const
Type
*
kills
)
const
{
if
(
kills
->
isa_narrowoop
())
{
const
Type
*
ft
=
_
ooptype
->
filter
(
kills
->
is_narrowoop
()
->
_oop
type
);
const
Type
*
ft
=
_
ptrtype
->
filter
(
kills
->
is_narrowoop
()
->
_ptr
type
);
if
(
ft
->
empty
())
return
Type
::
TOP
;
// Canonical empty value
if
(
ft
->
isa_ptr
())
{
...
...
@@ -3568,7 +3568,7 @@ const Type *TypeNarrowOop::filter( const Type *kills ) const {
}
return
ft
;
}
else
if
(
kills
->
isa_ptr
())
{
const
Type
*
ft
=
_
oop
type
->
join
(
kills
);
const
Type
*
ft
=
_
ptr
type
->
join
(
kills
);
if
(
ft
->
empty
())
return
Type
::
TOP
;
// Canonical empty value
return
ft
;
...
...
@@ -3579,13 +3579,13 @@ const Type *TypeNarrowOop::filter( const Type *kills ) const {
intptr_t
TypeNarrowOop
::
get_con
()
const
{
return
_
oop
type
->
get_con
();
return
_
ptr
type
->
get_con
();
}
#ifndef PRODUCT
void
TypeNarrowOop
::
dump2
(
Dict
&
d
,
uint
depth
,
outputStream
*
st
)
const
{
st
->
print
(
"narrowoop: "
);
_
oop
type
->
dump2
(
d
,
depth
,
st
);
_
ptr
type
->
dump2
(
d
,
depth
,
st
);
}
#endif
...
...
src/share/vm/opto/type.hpp
浏览文件 @
ccc4166c
...
...
@@ -232,6 +232,11 @@ public:
// Returns this ptr type or the equivalent ptr type for this compressed pointer.
const
TypePtr
*
make_ptr
()
const
;
// Returns this oopptr type or the equivalent oopptr type for this compressed pointer.
// Asserts if the underlying type is not an oopptr or narrowoop.
const
TypeOopPtr
*
make_oopptr
()
const
;
// Returns this compressed pointer or the equivalent compressed version
// of this pointer type.
const
TypeNarrowOop
*
make_narrowoop
()
const
;
...
...
@@ -932,13 +937,13 @@ public:
// between the normal and the compressed form.
class
TypeNarrowOop
:
public
Type
{
protected:
const
TypePtr
*
_
oop
type
;
// Could be TypePtr::NULL_PTR
const
TypePtr
*
_
ptr
type
;
// Could be TypePtr::NULL_PTR
TypeNarrowOop
(
const
TypePtr
*
oop
type
)
:
Type
(
NarrowOop
),
_
ooptype
(
oop
type
)
{
assert
(
oop
type
->
offset
()
==
0
||
oop
type
->
offset
()
==
OffsetBot
||
oop
type
->
offset
()
==
OffsetTop
,
"no real offsets"
);
TypeNarrowOop
(
const
TypePtr
*
ptr
type
)
:
Type
(
NarrowOop
),
_
ptrtype
(
ptr
type
)
{
assert
(
ptr
type
->
offset
()
==
0
||
ptr
type
->
offset
()
==
OffsetBot
||
ptr
type
->
offset
()
==
OffsetTop
,
"no real offsets"
);
}
public:
virtual
bool
eq
(
const
Type
*
t
)
const
;
...
...
@@ -962,8 +967,8 @@ public:
}
// returns the equivalent ptr type for this compressed pointer
const
TypePtr
*
make_oopptr
()
const
{
return
_
oop
type
;
const
TypePtr
*
get_ptrtype
()
const
{
return
_
ptr
type
;
}
static
const
TypeNarrowOop
*
BOTTOM
;
...
...
@@ -1150,10 +1155,14 @@ inline const TypeKlassPtr *Type::is_klassptr() const {
}
inline
const
TypePtr
*
Type
::
make_ptr
()
const
{
return
(
_base
==
NarrowOop
)
?
is_narrowoop
()
->
make_oopptr
()
:
return
(
_base
==
NarrowOop
)
?
is_narrowoop
()
->
get_ptrtype
()
:
(
isa_ptr
()
?
is_ptr
()
:
NULL
);
}
inline
const
TypeOopPtr
*
Type
::
make_oopptr
()
const
{
return
(
_base
==
NarrowOop
)
?
is_narrowoop
()
->
get_ptrtype
()
->
is_oopptr
()
:
is_oopptr
();
}
inline
const
TypeNarrowOop
*
Type
::
make_narrowoop
()
const
{
return
(
_base
==
NarrowOop
)
?
is_narrowoop
()
:
(
isa_ptr
()
?
TypeNarrowOop
::
make
(
is_ptr
())
:
NULL
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录