Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
42108633
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看板
提交
42108633
编写于
11月 07, 2008
作者:
N
never
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
98b4cb87
96695dfb
变更
78
展开全部
显示空白变更内容
内联
并排
Showing
78 changed file
with
2930 addition
and
740 deletion
+2930
-740
src/cpu/sparc/vm/assembler_sparc.cpp
src/cpu/sparc/vm/assembler_sparc.cpp
+17
-15
src/cpu/sparc/vm/assembler_sparc.hpp
src/cpu/sparc/vm/assembler_sparc.hpp
+7
-3
src/cpu/sparc/vm/sparc.ad
src/cpu/sparc/vm/sparc.ad
+133
-101
src/cpu/x86/vm/assembler_x86.cpp
src/cpu/x86/vm/assembler_x86.cpp
+4
-0
src/cpu/x86/vm/assembler_x86.hpp
src/cpu/x86/vm/assembler_x86.hpp
+2
-1
src/cpu/x86/vm/x86_32.ad
src/cpu/x86/vm/x86_32.ad
+423
-103
src/cpu/x86/vm/x86_64.ad
src/cpu/x86/vm/x86_64.ad
+371
-73
src/os_cpu/linux_x86/vm/linux_x86_32.ad
src/os_cpu/linux_x86/vm/linux_x86_32.ad
+3
-3
src/os_cpu/solaris_x86/vm/solaris_x86_32.ad
src/os_cpu/solaris_x86/vm/solaris_x86_32.ad
+3
-3
src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java
...m/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java
+6
-1
src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java
...src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java
+3
-4
src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java
.../sun/hotspot/igv/controlflow/ControlFlowTopComponent.java
+6
-1
src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java
...nator/src/com/sun/hotspot/igv/coordinator/FolderNode.java
+17
-1
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java
...izer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java
+1
-1
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java
...phVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java
+1
-1
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java
...ualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java
+13
-14
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java
...alizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java
+1
-1
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java
...sualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java
+1
-1
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java
...ualizer/Data/src/com/sun/hotspot/igv/data/Properties.java
+98
-50
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Property.java
...isualizer/Data/src/com/sun/hotspot/igv/data/Property.java
+14
-10
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java
...ta/src/com/sun/hotspot/igv/data/serialization/Parser.java
+25
-14
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Printer.java
...a/src/com/sun/hotspot/igv/data/serialization/Printer.java
+1
-1
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java
...src/com/sun/hotspot/igv/data/serialization/XMLParser.java
+4
-4
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLWriter.java
...src/com/sun/hotspot/igv/data/serialization/XMLWriter.java
+4
-4
src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java
...erence/src/com/sun/hotspot/igv/difference/Difference.java
+14
-13
src/share/tools/IdealGraphVisualizer/Filter/manifest.mf
src/share/tools/IdealGraphVisualizer/Filter/manifest.mf
+6
-6
src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java
...r/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java
+1
-2
src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java
...er/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java
+2
-2
src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java
...sualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java
+2
-2
src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java
...isualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java
+1
-1
src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java
...out/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java
+5
-5
src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalClusterLayoutManager.java
.../hierarchicallayout/HierarchicalClusterLayoutManager.java
+13
-13
src/share/tools/IdealGraphVisualizer/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java
...er/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java
+7
-7
src/share/tools/IdealGraphVisualizer/README
src/share/tools/IdealGraphVisualizer/README
+7
-12
src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java
...er/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java
+3
-3
src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java
...r/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java
+7
-1
src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java
...lizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java
+9
-9
src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java
...r/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java
+38
-1
src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java
...sualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java
+1
-1
src/share/tools/IdealGraphVisualizer/nbproject/platform.properties
.../tools/IdealGraphVisualizer/nbproject/platform.properties
+6
-6
src/share/tools/IdealGraphVisualizer/nbproject/project.properties
...e/tools/IdealGraphVisualizer/nbproject/project.properties
+2
-3
src/share/vm/adlc/adlparse.cpp
src/share/vm/adlc/adlparse.cpp
+189
-23
src/share/vm/adlc/adlparse.hpp
src/share/vm/adlc/adlparse.hpp
+3
-3
src/share/vm/adlc/filebuff.cpp
src/share/vm/adlc/filebuff.cpp
+2
-0
src/share/vm/adlc/filebuff.hpp
src/share/vm/adlc/filebuff.hpp
+2
-0
src/share/vm/adlc/forms.cpp
src/share/vm/adlc/forms.cpp
+2
-0
src/share/vm/adlc/forms.hpp
src/share/vm/adlc/forms.hpp
+2
-0
src/share/vm/adlc/formssel.cpp
src/share/vm/adlc/formssel.cpp
+20
-12
src/share/vm/adlc/formssel.hpp
src/share/vm/adlc/formssel.hpp
+13
-3
src/share/vm/adlc/output_c.cpp
src/share/vm/adlc/output_c.cpp
+26
-2
src/share/vm/adlc/output_h.cpp
src/share/vm/adlc/output_h.cpp
+62
-17
src/share/vm/opto/block.cpp
src/share/vm/opto/block.cpp
+566
-44
src/share/vm/opto/block.hpp
src/share/vm/opto/block.hpp
+211
-11
src/share/vm/opto/c2_globals.hpp
src/share/vm/opto/c2_globals.hpp
+13
-0
src/share/vm/opto/callnode.cpp
src/share/vm/opto/callnode.cpp
+1
-0
src/share/vm/opto/callnode.hpp
src/share/vm/opto/callnode.hpp
+4
-0
src/share/vm/opto/chaitin.cpp
src/share/vm/opto/chaitin.cpp
+1
-3
src/share/vm/opto/classes.hpp
src/share/vm/opto/classes.hpp
+1
-0
src/share/vm/opto/compile.cpp
src/share/vm/opto/compile.cpp
+11
-3
src/share/vm/opto/compile.hpp
src/share/vm/opto/compile.hpp
+3
-0
src/share/vm/opto/gcm.cpp
src/share/vm/opto/gcm.cpp
+180
-38
src/share/vm/opto/library_call.cpp
src/share/vm/opto/library_call.cpp
+24
-3
src/share/vm/opto/loopTransform.cpp
src/share/vm/opto/loopTransform.cpp
+1
-0
src/share/vm/opto/macro.cpp
src/share/vm/opto/macro.cpp
+234
-29
src/share/vm/opto/macro.hpp
src/share/vm/opto/macro.hpp
+1
-1
src/share/vm/opto/matcher.cpp
src/share/vm/opto/matcher.cpp
+1
-0
src/share/vm/opto/matcher.hpp
src/share/vm/opto/matcher.hpp
+1
-1
src/share/vm/opto/memnode.cpp
src/share/vm/opto/memnode.cpp
+8
-0
src/share/vm/opto/memnode.hpp
src/share/vm/opto/memnode.hpp
+13
-0
src/share/vm/opto/output.cpp
src/share/vm/opto/output.cpp
+26
-35
src/share/vm/opto/phase.cpp
src/share/vm/opto/phase.cpp
+3
-3
src/share/vm/opto/phase.hpp
src/share/vm/opto/phase.hpp
+2
-6
src/share/vm/opto/reg_split.cpp
src/share/vm/opto/reg_split.cpp
+1
-0
src/share/vm/opto/type.cpp
src/share/vm/opto/type.cpp
+1
-1
src/share/vm/opto/type.hpp
src/share/vm/opto/type.hpp
+6
-0
src/share/vm/runtime/arguments.cpp
src/share/vm/runtime/arguments.cpp
+9
-0
src/share/vm/runtime/frame.cpp
src/share/vm/runtime/frame.cpp
+4
-4
src/share/vm/utilities/vmError.cpp
src/share/vm/utilities/vmError.cpp
+1
-1
未找到文件。
src/cpu/sparc/vm/assembler_sparc.cpp
浏览文件 @
42108633
...
@@ -2615,7 +2615,8 @@ void MacroAssembler::cas_under_lock(Register top_ptr_reg, Register top_reg, Regi
...
@@ -2615,7 +2615,8 @@ void MacroAssembler::cas_under_lock(Register top_ptr_reg, Register top_reg, Regi
}
}
}
}
void
MacroAssembler
::
biased_locking_enter
(
Register
obj_reg
,
Register
mark_reg
,
Register
temp_reg
,
void
MacroAssembler
::
biased_locking_enter
(
Register
obj_reg
,
Register
mark_reg
,
Register
temp_reg
,
Label
&
done
,
Label
*
slow_case
,
Label
&
done
,
Label
*
slow_case
,
BiasedLockingCounters
*
counters
)
{
BiasedLockingCounters
*
counters
)
{
assert
(
UseBiasedLocking
,
"why call this otherwise?"
);
assert
(
UseBiasedLocking
,
"why call this otherwise?"
);
...
@@ -2691,8 +2692,7 @@ void MacroAssembler::biased_locking_enter(Register obj_reg, Register mark_reg, R
...
@@ -2691,8 +2692,7 @@ void MacroAssembler::biased_locking_enter(Register obj_reg, Register mark_reg, R
markOopDesc
::
biased_lock_mask_in_place
|
markOopDesc
::
age_mask_in_place
|
markOopDesc
::
epoch_mask_in_place
,
markOopDesc
::
biased_lock_mask_in_place
|
markOopDesc
::
age_mask_in_place
|
markOopDesc
::
epoch_mask_in_place
,
mark_reg
);
mark_reg
);
or3
(
G2_thread
,
mark_reg
,
temp_reg
);
or3
(
G2_thread
,
mark_reg
,
temp_reg
);
casx_under_lock
(
mark_addr
.
base
(),
mark_reg
,
temp_reg
,
casn
(
mark_addr
.
base
(),
mark_reg
,
temp_reg
);
(
address
)
StubRoutines
::
Sparc
::
atomic_memory_operation_lock_addr
());
// If the biasing toward our thread failed, this means that
// If the biasing toward our thread failed, this means that
// another thread succeeded in biasing it toward itself and we
// another thread succeeded in biasing it toward itself and we
// need to revoke that bias. The revocation will occur in the
// need to revoke that bias. The revocation will occur in the
...
@@ -2721,8 +2721,7 @@ void MacroAssembler::biased_locking_enter(Register obj_reg, Register mark_reg, R
...
@@ -2721,8 +2721,7 @@ void MacroAssembler::biased_locking_enter(Register obj_reg, Register mark_reg, R
load_klass
(
obj_reg
,
temp_reg
);
load_klass
(
obj_reg
,
temp_reg
);
ld_ptr
(
Address
(
temp_reg
,
0
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()),
temp_reg
);
ld_ptr
(
Address
(
temp_reg
,
0
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()),
temp_reg
);
or3
(
G2_thread
,
temp_reg
,
temp_reg
);
or3
(
G2_thread
,
temp_reg
,
temp_reg
);
casx_under_lock
(
mark_addr
.
base
(),
mark_reg
,
temp_reg
,
casn
(
mark_addr
.
base
(),
mark_reg
,
temp_reg
);
(
address
)
StubRoutines
::
Sparc
::
atomic_memory_operation_lock_addr
());
// If the biasing toward our thread failed, this means that
// If the biasing toward our thread failed, this means that
// another thread succeeded in biasing it toward itself and we
// another thread succeeded in biasing it toward itself and we
// need to revoke that bias. The revocation will occur in the
// need to revoke that bias. The revocation will occur in the
...
@@ -2752,8 +2751,7 @@ void MacroAssembler::biased_locking_enter(Register obj_reg, Register mark_reg, R
...
@@ -2752,8 +2751,7 @@ void MacroAssembler::biased_locking_enter(Register obj_reg, Register mark_reg, R
// bits in this situation. Should attempt to preserve them.
// bits in this situation. Should attempt to preserve them.
load_klass
(
obj_reg
,
temp_reg
);
load_klass
(
obj_reg
,
temp_reg
);
ld_ptr
(
Address
(
temp_reg
,
0
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()),
temp_reg
);
ld_ptr
(
Address
(
temp_reg
,
0
,
Klass
::
prototype_header_offset_in_bytes
()
+
klassOopDesc
::
klass_part_offset_in_bytes
()),
temp_reg
);
casx_under_lock
(
mark_addr
.
base
(),
mark_reg
,
temp_reg
,
casn
(
mark_addr
.
base
(),
mark_reg
,
temp_reg
);
(
address
)
StubRoutines
::
Sparc
::
atomic_memory_operation_lock_addr
());
// Fall through to the normal CAS-based lock, because no matter what
// Fall through to the normal CAS-based lock, because no matter what
// the result of the above CAS, some thread must have succeeded in
// the result of the above CAS, some thread must have succeeded in
// removing the bias bit from the object's header.
// removing the bias bit from the object's header.
...
@@ -2815,8 +2813,10 @@ void MacroAssembler::casn (Register addr_reg, Register cmp_reg, Register set_reg
...
@@ -2815,8 +2813,10 @@ void MacroAssembler::casn (Register addr_reg, Register cmp_reg, Register set_reg
// effect).
// effect).
void
MacroAssembler
::
compiler_lock_object
(
Register
Roop
,
Register
Rmark
,
Register
Rbox
,
Register
Rscratch
,
void
MacroAssembler
::
compiler_lock_object
(
Register
Roop
,
Register
Rmark
,
BiasedLockingCounters
*
counters
)
{
Register
Rbox
,
Register
Rscratch
,
BiasedLockingCounters
*
counters
,
bool
try_bias
)
{
Address
mark_addr
(
Roop
,
0
,
oopDesc
::
mark_offset_in_bytes
());
Address
mark_addr
(
Roop
,
0
,
oopDesc
::
mark_offset_in_bytes
());
verify_oop
(
Roop
);
verify_oop
(
Roop
);
...
@@ -2838,7 +2838,7 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
...
@@ -2838,7 +2838,7 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
// Fetch object's markword
// Fetch object's markword
ld_ptr
(
mark_addr
,
Rmark
);
ld_ptr
(
mark_addr
,
Rmark
);
if
(
UseBiasedLocking
)
{
if
(
try_bias
)
{
biased_locking_enter
(
Roop
,
Rmark
,
Rscratch
,
done
,
NULL
,
counters
);
biased_locking_enter
(
Roop
,
Rmark
,
Rscratch
,
done
,
NULL
,
counters
);
}
}
...
@@ -2881,7 +2881,7 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
...
@@ -2881,7 +2881,7 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
ld_ptr
(
mark_addr
,
Rmark
);
// fetch obj->mark
ld_ptr
(
mark_addr
,
Rmark
);
// fetch obj->mark
// Triage: biased, stack-locked, neutral, inflated
// Triage: biased, stack-locked, neutral, inflated
if
(
UseBiasedLocking
)
{
if
(
try_bias
)
{
biased_locking_enter
(
Roop
,
Rmark
,
Rscratch
,
done
,
NULL
,
counters
);
biased_locking_enter
(
Roop
,
Rmark
,
Rscratch
,
done
,
NULL
,
counters
);
// Invariant: if control reaches this point in the emitted stream
// Invariant: if control reaches this point in the emitted stream
// then Rmark has not been modified.
// then Rmark has not been modified.
...
@@ -2945,7 +2945,7 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
...
@@ -2945,7 +2945,7 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
ld_ptr
(
mark_addr
,
Rmark
);
// fetch obj->mark
ld_ptr
(
mark_addr
,
Rmark
);
// fetch obj->mark
// Triage: biased, stack-locked, neutral, inflated
// Triage: biased, stack-locked, neutral, inflated
if
(
UseBiasedLocking
)
{
if
(
try_bias
)
{
biased_locking_enter
(
Roop
,
Rmark
,
Rscratch
,
done
,
NULL
,
counters
);
biased_locking_enter
(
Roop
,
Rmark
,
Rscratch
,
done
,
NULL
,
counters
);
// Invariant: if control reaches this point in the emitted stream
// Invariant: if control reaches this point in the emitted stream
// then Rmark has not been modified.
// then Rmark has not been modified.
...
@@ -3039,7 +3039,9 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
...
@@ -3039,7 +3039,9 @@ void MacroAssembler::compiler_lock_object(Register Roop, Register Rmark, Registe
bind
(
done
)
;
bind
(
done
)
;
}
}
void
MacroAssembler
::
compiler_unlock_object
(
Register
Roop
,
Register
Rmark
,
Register
Rbox
,
Register
Rscratch
)
{
void
MacroAssembler
::
compiler_unlock_object
(
Register
Roop
,
Register
Rmark
,
Register
Rbox
,
Register
Rscratch
,
bool
try_bias
)
{
Address
mark_addr
(
Roop
,
0
,
oopDesc
::
mark_offset_in_bytes
());
Address
mark_addr
(
Roop
,
0
,
oopDesc
::
mark_offset_in_bytes
());
Label
done
;
Label
done
;
...
@@ -3050,7 +3052,7 @@ void MacroAssembler::compiler_unlock_object(Register Roop, Register Rmark, Regis
...
@@ -3050,7 +3052,7 @@ void MacroAssembler::compiler_unlock_object(Register Roop, Register Rmark, Regis
}
}
if
(
EmitSync
&
8
)
{
if
(
EmitSync
&
8
)
{
if
(
UseBiasedLocking
)
{
if
(
try_bias
)
{
biased_locking_exit
(
mark_addr
,
Rscratch
,
done
);
biased_locking_exit
(
mark_addr
,
Rscratch
,
done
);
}
}
...
@@ -3077,7 +3079,7 @@ void MacroAssembler::compiler_unlock_object(Register Roop, Register Rmark, Regis
...
@@ -3077,7 +3079,7 @@ void MacroAssembler::compiler_unlock_object(Register Roop, Register Rmark, Regis
// I$ effects.
// I$ effects.
Label
LStacked
;
Label
LStacked
;
if
(
UseBiasedLocking
)
{
if
(
try_bias
)
{
// TODO: eliminate redundant LDs of obj->mark
// TODO: eliminate redundant LDs of obj->mark
biased_locking_exit
(
mark_addr
,
Rscratch
,
done
);
biased_locking_exit
(
mark_addr
,
Rscratch
,
done
);
}
}
...
...
src/cpu/sparc/vm/assembler_sparc.hpp
浏览文件 @
42108633
...
@@ -2220,9 +2220,13 @@ class MacroAssembler: public Assembler {
...
@@ -2220,9 +2220,13 @@ class MacroAssembler: public Assembler {
// These set the icc condition code to equal if the lock succeeded
// These set the icc condition code to equal if the lock succeeded
// and notEqual if it failed and requires a slow case
// and notEqual if it failed and requires a slow case
void
compiler_lock_object
(
Register
Roop
,
Register
Rmark
,
Register
Rbox
,
Register
Rscratch
,
void
compiler_lock_object
(
Register
Roop
,
Register
Rmark
,
Register
Rbox
,
BiasedLockingCounters
*
counters
=
NULL
);
Register
Rscratch
,
void
compiler_unlock_object
(
Register
Roop
,
Register
Rmark
,
Register
Rbox
,
Register
Rscratch
);
BiasedLockingCounters
*
counters
=
NULL
,
bool
try_bias
=
UseBiasedLocking
);
void
compiler_unlock_object
(
Register
Roop
,
Register
Rmark
,
Register
Rbox
,
Register
Rscratch
,
bool
try_bias
=
UseBiasedLocking
);
// Biased locking support
// Biased locking support
// Upon entry, lock_reg must point to the lock record on the stack,
// Upon entry, lock_reg must point to the lock record on the stack,
...
...
src/cpu/sparc/vm/sparc.ad
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/cpu/x86/vm/assembler_x86.cpp
浏览文件 @
42108633
...
@@ -621,6 +621,10 @@ address Assembler::locate_operand(address inst, WhichOperand which) {
...
@@ -621,6 +621,10 @@ address Assembler::locate_operand(address inst, WhichOperand which) {
debug_only
(
has_disp32
=
true
);
debug_only
(
has_disp32
=
true
);
break
;
break
;
case
0xF0
:
// Lock
assert
(
os
::
is_MP
(),
"only on MP"
);
goto
again_after_prefix
;
case
0xF3
:
// For SSE
case
0xF3
:
// For SSE
case
0xF2
:
// For SSE2
case
0xF2
:
// For SSE2
switch
(
0xFF
&
*
ip
++
)
{
switch
(
0xFF
&
*
ip
++
)
{
...
...
src/cpu/x86/vm/assembler_x86.hpp
浏览文件 @
42108633
...
@@ -1780,7 +1780,8 @@ class MacroAssembler: public Assembler {
...
@@ -1780,7 +1780,8 @@ class MacroAssembler: public Assembler {
// check info (currently consumed only by C1). If
// check info (currently consumed only by C1). If
// swap_reg_contains_mark is true then returns -1 as it is assumed
// swap_reg_contains_mark is true then returns -1 as it is assumed
// the calling code has already passed any potential faults.
// the calling code has already passed any potential faults.
int
biased_locking_enter
(
Register
lock_reg
,
Register
obj_reg
,
Register
swap_reg
,
Register
tmp_reg
,
int
biased_locking_enter
(
Register
lock_reg
,
Register
obj_reg
,
Register
swap_reg
,
Register
tmp_reg
,
bool
swap_reg_contains_mark
,
bool
swap_reg_contains_mark
,
Label
&
done
,
Label
*
slow_case
=
NULL
,
Label
&
done
,
Label
*
slow_case
=
NULL
,
BiasedLockingCounters
*
counters
=
NULL
);
BiasedLockingCounters
*
counters
=
NULL
);
...
...
src/cpu/x86/vm/x86_32.ad
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/cpu/x86/vm/x86_64.ad
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/os_cpu/linux_x86/vm/linux_x86_32.ad
浏览文件 @
42108633
...
@@ -103,16 +103,16 @@ encode %{
...
@@ -103,16 +103,16 @@ encode %{
// This name is KNOWN by the ADLC and cannot be changed.
// This name is KNOWN by the ADLC and cannot be changed.
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
// for this guy.
// for this guy.
instruct tlsLoadP(e
AX
RegP dst, eFlagsReg cr) %{
instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{
match(Set dst (ThreadLocal));
match(Set dst (ThreadLocal));
effect(DEF dst, KILL cr);
effect(DEF dst, KILL cr);
format %{ "MOV
EAX
, Thread::current()" %}
format %{ "MOV
$dst
, Thread::current()" %}
ins_encode( linux_tlsencode(dst) );
ins_encode( linux_tlsencode(dst) );
ins_pipe( ialu_reg_fat );
ins_pipe( ialu_reg_fat );
%}
%}
instruct TLS(e
AX
RegP dst) %{
instruct TLS(eRegP dst) %{
match(Set dst (ThreadLocal));
match(Set dst (ThreadLocal));
expand %{
expand %{
...
...
src/os_cpu/solaris_x86/vm/solaris_x86_32.ad
浏览文件 @
42108633
...
@@ -110,16 +110,16 @@ encode %{
...
@@ -110,16 +110,16 @@ encode %{
// This name is KNOWN by the ADLC and cannot be changed.
// This name is KNOWN by the ADLC and cannot be changed.
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
// for this guy.
// for this guy.
instruct tlsLoadP(e
AX
RegP dst, eFlagsReg cr) %{
instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{
match(Set dst (ThreadLocal));
match(Set dst (ThreadLocal));
effect(DEF dst, KILL cr);
effect(DEF dst, KILL cr);
format %{ "MOV
EAX
, Thread::current()" %}
format %{ "MOV
$dst
, Thread::current()" %}
ins_encode( solaris_tlsencode(dst) );
ins_encode( solaris_tlsencode(dst) );
ins_pipe( ialu_reg_fat );
ins_pipe( ialu_reg_fat );
%}
%}
instruct TLS(e
AX
RegP dst) %{
instruct TLS(eRegP dst) %{
match(Set dst (ThreadLocal));
match(Set dst (ThreadLocal));
expand %{
expand %{
...
...
src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java
浏览文件 @
42108633
...
@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.InputGraph;
...
@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.InputGraph;
import
com.sun.hotspot.igv.data.services.InputGraphProvider
;
import
com.sun.hotspot.igv.data.services.InputGraphProvider
;
import
java.awt.BorderLayout
;
import
java.awt.BorderLayout
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
javax.swing.SwingUtilities
;
import
org.openide.ErrorManager
;
import
org.openide.ErrorManager
;
import
org.openide.explorer.ExplorerManager
;
import
org.openide.explorer.ExplorerManager
;
import
org.openide.explorer.ExplorerUtils
;
import
org.openide.explorer.ExplorerUtils
;
...
@@ -151,14 +152,18 @@ final class BytecodeViewTopComponent extends TopComponent implements ExplorerMan
...
@@ -151,14 +152,18 @@ final class BytecodeViewTopComponent extends TopComponent implements ExplorerMan
}
}
public
void
resultChanged
(
LookupEvent
lookupEvent
)
{
public
void
resultChanged
(
LookupEvent
lookupEvent
)
{
InputGraphProvider
p
=
Lookup
.
getDefault
().
lookup
(
InputGraphProvider
.
class
);
final
InputGraphProvider
p
=
Lookup
.
getDefault
().
lookup
(
InputGraphProvider
.
class
);
if
(
p
!=
null
)
{
if
(
p
!=
null
)
{
SwingUtilities
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
InputGraph
graph
=
p
.
getGraph
();
InputGraph
graph
=
p
.
getGraph
();
if
(
graph
!=
null
)
{
if
(
graph
!=
null
)
{
Group
g
=
graph
.
getGroup
();
Group
g
=
graph
.
getGroup
();
rootNode
.
update
(
graph
,
g
.
getMethod
());
rootNode
.
update
(
graph
,
g
.
getMethod
());
}
}
}
}
});
}
}
}
final
static
class
ResolvableHelper
implements
Serializable
{
final
static
class
ResolvableHelper
implements
Serializable
{
...
...
src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java
浏览文件 @
42108633
...
@@ -33,7 +33,7 @@ import java.awt.Point;
...
@@ -33,7 +33,7 @@ import java.awt.Point;
import
java.awt.Rectangle
;
import
java.awt.Rectangle
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.Set
;
import
java.util.Set
;
import
javax.swing.BorderFactory
;
import
javax.swing.BorderFactory
;
import
org.netbeans.api.visual.action.ActionFactory
;
import
org.netbeans.api.visual.action.ActionFactory
;
...
@@ -44,7 +44,6 @@ import org.netbeans.api.visual.action.SelectProvider;
...
@@ -44,7 +44,6 @@ import org.netbeans.api.visual.action.SelectProvider;
import
org.netbeans.api.visual.action.WidgetAction
;
import
org.netbeans.api.visual.action.WidgetAction
;
import
org.netbeans.api.visual.anchor.AnchorFactory
;
import
org.netbeans.api.visual.anchor.AnchorFactory
;
import
org.netbeans.api.visual.anchor.AnchorShape
;
import
org.netbeans.api.visual.anchor.AnchorShape
;
import
com.sun.hotspot.igv.controlflow.HierarchicalGraphLayout
;
import
org.netbeans.api.visual.layout.LayoutFactory
;
import
org.netbeans.api.visual.layout.LayoutFactory
;
import
org.netbeans.api.visual.router.RouterFactory
;
import
org.netbeans.api.visual.router.RouterFactory
;
import
org.netbeans.api.visual.widget.LayerWidget
;
import
org.netbeans.api.visual.widget.LayerWidget
;
...
@@ -61,8 +60,8 @@ import org.openide.util.Lookup;
...
@@ -61,8 +60,8 @@ import org.openide.util.Lookup;
*/
*/
public
class
ControlFlowScene
extends
GraphScene
<
InputBlock
,
InputBlockEdge
>
implements
SelectProvider
,
MoveProvider
,
RectangularSelectDecorator
,
RectangularSelectProvider
{
public
class
ControlFlowScene
extends
GraphScene
<
InputBlock
,
InputBlockEdge
>
implements
SelectProvider
,
MoveProvider
,
RectangularSelectDecorator
,
RectangularSelectProvider
{
private
Set
<
BlockWidget
>
selection
;
private
Hash
Set
<
BlockWidget
>
selection
;
private
Hash
table
<
InputBlock
,
BlockWidget
>
blockMap
;
private
Hash
Map
<
InputBlock
,
BlockWidget
>
blockMap
;
private
InputGraph
oldGraph
;
private
InputGraph
oldGraph
;
private
LayerWidget
edgeLayer
;
private
LayerWidget
edgeLayer
;
private
LayerWidget
mainLayer
;
private
LayerWidget
mainLayer
;
...
...
src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java
浏览文件 @
42108633
...
@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.services.InputGraphProvider;
...
@@ -28,6 +28,7 @@ import com.sun.hotspot.igv.data.services.InputGraphProvider;
import
java.awt.BorderLayout
;
import
java.awt.BorderLayout
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
javax.swing.JScrollPane
;
import
javax.swing.JScrollPane
;
import
javax.swing.SwingUtilities
;
import
org.openide.ErrorManager
;
import
org.openide.ErrorManager
;
import
org.openide.util.Lookup
;
import
org.openide.util.Lookup
;
import
org.openide.util.LookupEvent
;
import
org.openide.util.LookupEvent
;
...
@@ -143,13 +144,17 @@ final class ControlFlowTopComponent extends TopComponent implements LookupListen
...
@@ -143,13 +144,17 @@ final class ControlFlowTopComponent extends TopComponent implements LookupListen
public
void
resultChanged
(
LookupEvent
lookupEvent
)
{
public
void
resultChanged
(
LookupEvent
lookupEvent
)
{
InputGraphProvider
p
=
Lookup
.
getDefault
().
lookup
(
InputGraphProvider
.
class
);
final
InputGraphProvider
p
=
Lookup
.
getDefault
().
lookup
(
InputGraphProvider
.
class
);
if
(
p
!=
null
)
{
if
(
p
!=
null
)
{
SwingUtilities
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
InputGraph
g
=
p
.
getGraph
();
InputGraph
g
=
p
.
getGraph
();
if
(
g
!=
null
)
{
if
(
g
!=
null
)
{
scene
.
setGraph
(
g
);
scene
.
setGraph
(
g
);
}
}
}
}
});
}
}
}
@Override
@Override
...
...
src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java
浏览文件 @
42108633
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
package
com.sun.hotspot.igv.coordinator
;
package
com.sun.hotspot.igv.coordinator
;
import
com.sun.hotspot.igv.coordinator.actions.RemoveCookie
;
import
com.sun.hotspot.igv.coordinator.actions.RemoveCookie
;
import
com.sun.hotspot.igv.data.ChangedListener
;
import
com.sun.hotspot.igv.data.Group
;
import
com.sun.hotspot.igv.data.Group
;
import
com.sun.hotspot.igv.data.services.GroupOrganizer
;
import
com.sun.hotspot.igv.data.services.GroupOrganizer
;
import
com.sun.hotspot.igv.data.InputGraph
;
import
com.sun.hotspot.igv.data.InputGraph
;
...
@@ -50,17 +51,24 @@ public class FolderNode extends AbstractNode {
...
@@ -50,17 +51,24 @@ public class FolderNode extends AbstractNode {
private
List
<
String
>
subFolders
;
private
List
<
String
>
subFolders
;
private
FolderChildren
children
;
private
FolderChildren
children
;
private
static
class
FolderChildren
extends
Children
.
Keys
{
private
static
class
FolderChildren
extends
Children
.
Keys
implements
ChangedListener
<
Group
>
{
private
FolderNode
parent
;
private
FolderNode
parent
;
private
List
<
Group
>
registeredGroups
;
public
void
setParent
(
FolderNode
parent
)
{
public
void
setParent
(
FolderNode
parent
)
{
this
.
parent
=
parent
;
this
.
parent
=
parent
;
this
.
registeredGroups
=
new
ArrayList
<
Group
>();
}
}
@Override
@Override
protected
Node
[]
createNodes
(
Object
arg0
)
{
protected
Node
[]
createNodes
(
Object
arg0
)
{
for
(
Group
g
:
registeredGroups
)
{
g
.
getChangedEvent
().
removeListener
(
this
);
}
registeredGroups
.
clear
();
Pair
<
String
,
List
<
Group
>>
p
=
(
Pair
<
String
,
List
<
Group
>>)
arg0
;
Pair
<
String
,
List
<
Group
>>
p
=
(
Pair
<
String
,
List
<
Group
>>)
arg0
;
if
(
p
.
getLeft
().
length
()
==
0
)
{
if
(
p
.
getLeft
().
length
()
==
0
)
{
...
@@ -69,6 +77,8 @@ public class FolderNode extends AbstractNode {
...
@@ -69,6 +77,8 @@ public class FolderNode extends AbstractNode {
for
(
InputGraph
graph
:
g
.
getGraphs
())
{
for
(
InputGraph
graph
:
g
.
getGraphs
())
{
curNodes
.
add
(
new
GraphNode
(
graph
));
curNodes
.
add
(
new
GraphNode
(
graph
));
}
}
g
.
getChangedEvent
().
addListener
(
this
);
registeredGroups
.
add
(
g
);
}
}
Node
[]
result
=
new
Node
[
curNodes
.
size
()];
Node
[]
result
=
new
Node
[
curNodes
.
size
()];
...
@@ -85,7 +95,13 @@ public class FolderNode extends AbstractNode {
...
@@ -85,7 +95,13 @@ public class FolderNode extends AbstractNode {
@Override
@Override
public
void
addNotify
()
{
public
void
addNotify
()
{
this
.
setKeys
(
parent
.
structure
);
this
.
setKeys
(
parent
.
structure
);
}
public
void
changed
(
Group
source
)
{
List
<
Pair
<
String
,
List
<
Group
>>>
newStructure
=
new
ArrayList
<
Pair
<
String
,
List
<
Group
>>>();
for
(
Pair
<
String
,
List
<
Group
>>
p
:
parent
.
structure
)
{
refreshKey
(
p
);
}
}
}
}
}
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/GraphDocument.java
浏览文件 @
42108633
...
@@ -31,7 +31,7 @@ import java.util.List;
...
@@ -31,7 +31,7 @@ import java.util.List;
*
*
* @author Thomas Wuerthinger
* @author Thomas Wuerthinger
*/
*/
public
class
GraphDocument
extends
Properties
.
Object
implements
ChangedEventProvider
<
GraphDocument
>
{
public
class
GraphDocument
extends
Properties
.
Entity
implements
ChangedEventProvider
<
GraphDocument
>
{
private
List
<
Group
>
groups
;
private
List
<
Group
>
groups
;
private
ChangedEvent
<
GraphDocument
>
changedEvent
;
private
ChangedEvent
<
GraphDocument
>
changedEvent
;
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Group.java
浏览文件 @
42108633
...
@@ -37,7 +37,7 @@ import java.util.Set;
...
@@ -37,7 +37,7 @@ import java.util.Set;
*
*
* @author Thomas Wuerthinger
* @author Thomas Wuerthinger
*/
*/
public
class
Group
extends
Properties
.
Object
implements
ChangedEventProvider
<
Group
>
{
public
class
Group
extends
Properties
.
Entity
implements
ChangedEventProvider
<
Group
>
{
private
List
<
InputGraph
>
graphs
;
private
List
<
InputGraph
>
graphs
;
private
transient
ChangedEvent
<
Group
>
changedEvent
;
private
transient
ChangedEvent
<
Group
>
changedEvent
;
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java
浏览文件 @
42108633
...
@@ -23,26 +23,25 @@
...
@@ -23,26 +23,25 @@
*/
*/
package
com.sun.hotspot.igv.data
;
package
com.sun.hotspot.igv.data
;
import
com.sun.hotspot.igv.data.Properties
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.Set
;
/**
/**
*
*
* @author Thomas Wuerthinger
* @author Thomas Wuerthinger
*/
*/
public
class
InputGraph
extends
Properties
.
Object
{
public
class
InputGraph
extends
Properties
.
Entity
{
private
Map
<
Integer
,
InputNode
>
nodes
;
private
Hash
Map
<
Integer
,
InputNode
>
nodes
;
private
Se
t
<
InputEdge
>
edges
;
private
ArrayLis
t
<
InputEdge
>
edges
;
private
Group
parent
;
private
Group
parent
;
private
Map
<
String
,
InputBlock
>
blocks
;
private
Hash
Map
<
String
,
InputBlock
>
blocks
;
private
Map
<
Integer
,
InputBlock
>
nodeToBlock
;
private
Hash
Map
<
Integer
,
InputBlock
>
nodeToBlock
;
private
boolean
isDifferenceGraph
;
private
boolean
isDifferenceGraph
;
public
InputGraph
(
Group
parent
)
{
public
InputGraph
(
Group
parent
)
{
...
@@ -61,10 +60,10 @@ public class InputGraph extends Properties.Object {
...
@@ -61,10 +60,10 @@ public class InputGraph extends Properties.Object {
public
InputGraph
(
Group
parent
,
InputGraph
last
,
String
name
)
{
public
InputGraph
(
Group
parent
,
InputGraph
last
,
String
name
)
{
this
.
parent
=
parent
;
this
.
parent
=
parent
;
setName
(
name
);
setName
(
name
);
nodes
=
new
Hash
table
<
Integer
,
InputNode
>();
nodes
=
new
Hash
Map
<
Integer
,
InputNode
>();
edges
=
new
HashSe
t
<
InputEdge
>();
edges
=
new
ArrayLis
t
<
InputEdge
>();
blocks
=
new
Hash
table
<
String
,
InputBlock
>();
blocks
=
new
Hash
Map
<
String
,
InputBlock
>();
nodeToBlock
=
new
Hash
table
<
Integer
,
InputBlock
>();
nodeToBlock
=
new
Hash
Map
<
Integer
,
InputBlock
>();
if
(
last
!=
null
)
{
if
(
last
!=
null
)
{
for
(
InputNode
n
:
last
.
getNodes
())
{
for
(
InputNode
n
:
last
.
getNodes
())
{
...
@@ -182,8 +181,8 @@ public class InputGraph extends Properties.Object {
...
@@ -182,8 +181,8 @@ public class InputGraph extends Properties.Object {
return
nodes
.
remove
(
index
);
return
nodes
.
remove
(
index
);
}
}
public
Set
<
InputEdge
>
getEdges
()
{
public
Collection
<
InputEdge
>
getEdges
()
{
return
Collections
.
unmodifiable
Se
t
(
edges
);
return
Collections
.
unmodifiable
Lis
t
(
edges
);
}
}
public
void
removeEdge
(
InputEdge
c
)
{
public
void
removeEdge
(
InputEdge
c
)
{
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputMethod.java
浏览文件 @
42108633
...
@@ -32,7 +32,7 @@ import java.util.List;
...
@@ -32,7 +32,7 @@ import java.util.List;
*
*
* @author Thomas Wuerthinger
* @author Thomas Wuerthinger
*/
*/
public
class
InputMethod
extends
Properties
.
Object
{
public
class
InputMethod
extends
Properties
.
Entity
{
private
String
name
;
private
String
name
;
private
int
bci
;
private
int
bci
;
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputNode.java
浏览文件 @
42108633
...
@@ -27,7 +27,7 @@ package com.sun.hotspot.igv.data;
...
@@ -27,7 +27,7 @@ package com.sun.hotspot.igv.data;
*
*
* @author Thomas Wuerthinger
* @author Thomas Wuerthinger
*/
*/
public
class
InputNode
extends
Properties
.
Object
{
public
class
InputNode
extends
Properties
.
Entity
{
private
int
id
;
private
int
id
;
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java
浏览文件 @
42108633
...
@@ -26,24 +26,22 @@ package com.sun.hotspot.igv.data;
...
@@ -26,24 +26,22 @@ package com.sun.hotspot.igv.data;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.Iterator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Matcher
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
java.util.regex.Pattern
;
/**
/**
*
*
* @author Thomas Wuerthinger
* @author Thomas Wuerthinger
*/
*/
public
class
Properties
implements
Serializable
{
public
class
Properties
implements
Serializable
,
Iterable
<
Property
>
{
public
static
final
long
serialVersionUID
=
1L
;
public
static
final
long
serialVersionUID
=
1L
;
private
Map
<
String
,
Property
>
map
;
private
String
[]
map
=
new
String
[
4
]
;
public
Properties
()
{
public
Properties
()
{
map
=
new
HashMap
<
String
,
Property
>(
5
);
}
}
@Override
@Override
...
@@ -54,10 +52,7 @@ public class Properties implements Serializable {
...
@@ -54,10 +52,7 @@ public class Properties implements Serializable {
Properties
p
=
(
Properties
)
o
;
Properties
p
=
(
Properties
)
o
;
if
(
getProperties
().
size
()
!=
p
.
getProperties
().
size
())
{
for
(
Property
prop
:
this
)
{
return
false
;
}
for
(
Property
prop
:
getProperties
())
{
String
value
=
p
.
get
(
prop
.
getName
());
String
value
=
p
.
get
(
prop
.
getName
());
if
(
value
==
null
||
!
value
.
equals
(
prop
.
getValue
()))
{
if
(
value
==
null
||
!
value
.
equals
(
prop
.
getValue
()))
{
return
false
;
return
false
;
...
@@ -75,32 +70,33 @@ public class Properties implements Serializable {
...
@@ -75,32 +70,33 @@ public class Properties implements Serializable {
public
Properties
(
String
name
,
String
value
)
{
public
Properties
(
String
name
,
String
value
)
{
this
();
this
();
this
.
add
(
new
Property
(
name
,
value
)
);
this
.
setProperty
(
name
,
value
);
}
}
public
Properties
(
String
name
,
String
value
,
String
name1
,
String
value1
)
{
public
Properties
(
String
name
,
String
value
,
String
name1
,
String
value1
)
{
this
(
name
,
value
);
this
(
name
,
value
);
this
.
add
(
new
Property
(
name1
,
value1
)
);
this
.
setProperty
(
name1
,
value1
);
}
}
public
Properties
(
String
name
,
String
value
,
String
name1
,
String
value1
,
String
name2
,
String
value2
)
{
public
Properties
(
String
name
,
String
value
,
String
name1
,
String
value1
,
String
name2
,
String
value2
)
{
this
(
name
,
value
,
name1
,
value1
);
this
(
name
,
value
,
name1
,
value1
);
this
.
add
(
new
Property
(
name2
,
value2
)
);
this
.
setProperty
(
name2
,
value2
);
}
}
public
Properties
(
Properties
p
)
{
public
Properties
(
Properties
p
)
{
map
=
new
HashMap
<
String
,
Property
>(
p
.
map
);
map
=
new
String
[
p
.
map
.
length
];
System
.
arraycopy
(
map
,
0
,
p
.
map
,
0
,
p
.
map
.
length
);
}
}
public
static
class
Object
implements
Provider
{
public
static
class
Entity
implements
Provider
{
private
Properties
properties
;
private
Properties
properties
;
public
Object
()
{
public
Entity
()
{
properties
=
new
Properties
();
properties
=
new
Properties
();
}
}
public
Object
(
Properties
.
Object
object
)
{
public
Entity
(
Properties
.
Entity
object
)
{
properties
=
new
Properties
(
object
.
getProperties
());
properties
=
new
Properties
(
object
.
getProperties
());
}
}
...
@@ -109,6 +105,14 @@ public class Properties implements Serializable {
...
@@ -109,6 +105,14 @@ public class Properties implements Serializable {
}
}
}
}
private
String
getProperty
(
String
key
)
{
for
(
int
i
=
0
;
i
<
map
.
length
;
i
+=
2
)
if
(
map
[
i
]
!=
null
&&
map
[
i
].
equals
(
key
))
{
return
map
[
i
+
1
];
}
return
null
;
}
public
interface
PropertyMatcher
{
public
interface
PropertyMatcher
{
String
getName
();
String
getName
();
...
@@ -173,13 +177,15 @@ public class Properties implements Serializable {
...
@@ -173,13 +177,15 @@ public class Properties implements Serializable {
}
}
public
Property
selectSingle
(
PropertyMatcher
matcher
)
{
public
Property
selectSingle
(
PropertyMatcher
matcher
)
{
String
value
=
null
;
Property
p
=
this
.
map
.
get
(
matcher
.
getName
());
for
(
int
i
=
0
;
i
<
map
.
length
;
i
+=
2
)
{
if
(
p
==
null
)
{
if
(
map
[
i
]
!=
null
&&
matcher
.
getName
().
equals
(
map
[
i
]))
{
return
null
;
value
=
map
[
i
+
1
];
break
;
}
}
if
(
matcher
.
match
(
p
.
getValue
()))
{
}
return
p
;
if
(
value
!=
null
&&
matcher
.
match
(
value
))
{
return
new
Property
(
matcher
.
getName
(),
value
);
}
else
{
}
else
{
return
null
;
return
null
;
}
}
...
@@ -194,8 +200,11 @@ public class Properties implements Serializable {
...
@@ -194,8 +200,11 @@ public class Properties implements Serializable {
public
String
toString
()
{
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"["
);
sb
.
append
(
"["
);
for
(
Property
p
:
map
.
values
())
{
for
(
int
i
=
0
;
i
<
map
.
length
;
i
+=
2
)
{
sb
.
append
(
p
.
toString
());
if
(
map
[
i
+
1
]
!=
null
)
{
String
p
=
map
[
i
+
1
];
sb
.
append
(
map
[
i
]
+
" = "
+
map
[
i
+
1
]
+
"; "
);
}
}
}
return
sb
.
append
(
"]"
).
toString
();
return
sb
.
append
(
"]"
).
toString
();
}
}
...
@@ -241,41 +250,51 @@ public class Properties implements Serializable {
...
@@ -241,41 +250,51 @@ public class Properties implements Serializable {
}
}
public
String
get
(
String
key
)
{
public
String
get
(
String
key
)
{
Property
p
=
map
.
get
(
key
);
for
(
int
i
=
0
;
i
<
map
.
length
;
i
+=
2
)
{
if
(
p
==
null
)
{
if
(
map
[
i
]
!=
null
&&
map
[
i
].
equals
(
key
))
{
return
null
;
return
map
[
i
+
1
];
}
else
{
return
p
.
getValue
();
}
}
}
}
return
null
;
public
String
getProperty
(
String
string
)
{
return
get
(
string
);
}
}
public
Property
setProperty
(
String
name
,
String
value
)
{
public
void
setProperty
(
String
name
,
String
value
)
{
for
(
int
i
=
0
;
i
<
map
.
length
;
i
+=
2
)
{
if
(
map
[
i
]
!=
null
&&
map
[
i
].
equals
(
name
))
{
String
p
=
map
[
i
+
1
];
if
(
value
==
null
)
{
if
(
value
==
null
)
{
// remove this property
// remove this property
return
map
.
remove
(
name
);
map
[
i
]
=
null
;
map
[
i
+
1
]
=
null
;
}
else
{
}
else
{
Property
p
=
map
.
get
(
name
);
map
[
i
+
1
]
=
value
;
if
(
p
==
null
)
{
p
=
new
Property
(
name
,
value
);
map
.
put
(
name
,
p
);
}
else
{
p
.
setValue
(
value
);
}
}
return
p
;
return
;
}
}
}
}
if
(
value
==
null
)
{
return
;
}
for
(
int
i
=
0
;
i
<
map
.
length
;
i
+=
2
)
{
if
(
map
[
i
]
==
null
)
{
map
[
i
]
=
name
;
map
[
i
+
1
]
=
value
;
return
;
}
}
String
[]
newMap
=
new
String
[
map
.
length
+
4
];
System
.
arraycopy
(
map
,
0
,
newMap
,
0
,
map
.
length
);
newMap
[
map
.
length
]
=
name
;
newMap
[
map
.
length
+
1
]
=
value
;
map
=
newMap
;
}
public
Collection
<
Property
>
getProperties
()
{
public
Iterator
<
Property
>
getProperties
()
{
return
Collections
.
unmodifiableCollection
(
map
.
values
()
);
return
iterator
(
);
}
}
public
void
add
(
Properties
properties
)
{
public
void
add
(
Properties
properties
)
{
for
(
Property
p
:
properties
.
getProperties
()
)
{
for
(
Property
p
:
properties
)
{
add
(
p
);
add
(
p
);
}
}
}
}
...
@@ -283,6 +302,35 @@ public class Properties implements Serializable {
...
@@ -283,6 +302,35 @@ public class Properties implements Serializable {
public
void
add
(
Property
property
)
{
public
void
add
(
Property
property
)
{
assert
property
.
getName
()
!=
null
;
assert
property
.
getName
()
!=
null
;
assert
property
.
getValue
()
!=
null
;
assert
property
.
getValue
()
!=
null
;
map
.
put
(
property
.
getName
(),
property
);
setProperty
(
property
.
getName
(),
property
.
getValue
());
}
class
PropertiesIterator
implements
Iterator
<
Property
>,
Iterable
<
Property
>
{
public
Iterator
<
Property
>
iterator
()
{
return
this
;
}
int
index
;
public
boolean
hasNext
()
{
while
(
index
<
map
.
length
&&
map
[
index
+
1
]
==
null
)
index
+=
2
;
return
index
<
map
.
length
;
}
public
Property
next
()
{
if
(
index
<
map
.
length
)
{
index
+=
2
;
return
new
Property
(
map
[
index
-
2
],
map
[
index
-
1
]);
}
return
null
;
}
public
void
remove
()
{
throw
new
UnsupportedOperationException
(
"Not supported yet."
);
}
}
public
Iterator
<
Property
>
iterator
()
{
return
new
PropertiesIterator
();
}
}
}
}
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Property.java
浏览文件 @
42108633
...
@@ -32,18 +32,19 @@ import java.io.Serializable;
...
@@ -32,18 +32,19 @@ import java.io.Serializable;
public
class
Property
implements
Serializable
{
public
class
Property
implements
Serializable
{
public
static
final
long
serialVersionUID
=
1L
;
public
static
final
long
serialVersionUID
=
1L
;
private
String
name
;
private
String
name
;
private
String
value
;
private
String
value
;
p
ublic
Property
()
{
p
rivate
Property
()
{
this
(
null
,
null
);
this
(
null
,
null
);
}
}
p
ublic
Property
(
Property
p
)
{
p
rivate
Property
(
Property
p
)
{
this
(
p
.
getName
(),
p
.
getValue
());
this
(
p
.
getName
(),
p
.
getValue
());
}
}
p
ublic
Property
(
String
name
)
{
p
rivate
Property
(
String
name
)
{
this
(
name
,
null
);
this
(
name
,
null
);
}
}
...
@@ -60,16 +61,19 @@ public class Property implements Serializable {
...
@@ -60,16 +61,19 @@ public class Property implements Serializable {
return
value
;
return
value
;
}
}
public
void
setName
(
String
s
)
{
@Override
this
.
name
=
s
;
public
String
toString
()
{
return
name
+
" = "
+
value
+
"; "
;
}
}
public
void
setValue
(
String
s
)
{
@Override
this
.
value
=
s
;
public
boolean
equals
(
Object
o
)
{
if
(!(
o
instanceof
Property
))
return
false
;
Property
p2
=
(
Property
)
o
;
return
name
.
equals
(
p2
.
name
)
&&
value
.
equals
(
p2
.
value
);
}
}
@Override
@Override
public
String
toString
()
{
public
int
hashCode
()
{
return
name
+
" = "
+
value
+
"; "
;
return
name
.
hashCode
()
+
value
==
null
?
0
:
value
.
hashCode
()
;
}
}
}
}
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java
浏览文件 @
42108633
...
@@ -38,6 +38,7 @@ import com.sun.hotspot.igv.data.serialization.XMLParser.HandoverElementHandler;
...
@@ -38,6 +38,7 @@ import com.sun.hotspot.igv.data.serialization.XMLParser.HandoverElementHandler;
import
com.sun.hotspot.igv.data.serialization.XMLParser.ParseMonitor
;
import
com.sun.hotspot.igv.data.serialization.XMLParser.ParseMonitor
;
import
com.sun.hotspot.igv.data.serialization.XMLParser.TopElementHandler
;
import
com.sun.hotspot.igv.data.serialization.XMLParser.TopElementHandler
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
org.xml.sax.InputSource
;
import
org.xml.sax.InputSource
;
import
org.xml.sax.SAXException
;
import
org.xml.sax.SAXException
;
import
org.xml.sax.XMLReader
;
import
org.xml.sax.XMLReader
;
...
@@ -88,6 +89,18 @@ public class Parser {
...
@@ -88,6 +89,18 @@ public class Parser {
private
TopElementHandler
xmlDocument
=
new
TopElementHandler
();
private
TopElementHandler
xmlDocument
=
new
TopElementHandler
();
private
boolean
difference
;
private
boolean
difference
;
private
GroupCallback
groupCallback
;
private
GroupCallback
groupCallback
;
private
HashMap
<
String
,
Integer
>
idCache
=
new
HashMap
<
String
,
Integer
>();
private
int
maxId
=
0
;
private
int
lookupID
(
String
i
)
{
Integer
id
=
idCache
.
get
(
i
);
if
(
id
==
null
)
{
id
=
maxId
++;
idCache
.
put
(
i
,
id
);
}
return
id
.
intValue
();
}
// <graphDocument>
// <graphDocument>
private
ElementHandler
<
GraphDocument
,
Object
>
topHandler
=
new
ElementHandler
<
GraphDocument
,
Object
>(
TOP_ELEMENT
)
{
private
ElementHandler
<
GraphDocument
,
Object
>
topHandler
=
new
ElementHandler
<
GraphDocument
,
Object
>(
TOP_ELEMENT
)
{
...
@@ -187,13 +200,13 @@ public class Parser {
...
@@ -187,13 +200,13 @@ public class Parser {
previous
=
null
;
previous
=
null
;
}
}
InputGraph
curGraph
=
new
InputGraph
(
getParentObject
(),
previous
,
name
);
InputGraph
curGraph
=
new
InputGraph
(
getParentObject
(),
previous
,
name
);
getParentObject
().
addGraph
(
curGraph
);
this
.
graph
=
curGraph
;
this
.
graph
=
curGraph
;
return
curGraph
;
return
curGraph
;
}
}
@Override
@Override
protected
void
end
(
String
text
)
throws
SAXException
{
protected
void
end
(
String
text
)
throws
SAXException
{
getParentObject
().
addGraph
(
graph
);
graph
.
resolveBlockLinks
();
graph
.
resolveBlockLinks
();
}
}
};
};
...
@@ -207,7 +220,7 @@ public class Parser {
...
@@ -207,7 +220,7 @@ public class Parser {
@Override
@Override
protected
InputBlock
start
()
throws
SAXException
{
protected
InputBlock
start
()
throws
SAXException
{
InputGraph
graph
=
getParentObject
();
InputGraph
graph
=
getParentObject
();
String
name
=
readRequiredAttribute
(
BLOCK_NAME_PROPERTY
);
String
name
=
readRequiredAttribute
(
BLOCK_NAME_PROPERTY
)
.
intern
()
;
InputBlock
b
=
new
InputBlock
(
getParentObject
(),
name
);
InputBlock
b
=
new
InputBlock
(
getParentObject
(),
name
);
graph
.
addBlock
(
b
);
graph
.
addBlock
(
b
);
return
b
;
return
b
;
...
@@ -224,7 +237,7 @@ public class Parser {
...
@@ -224,7 +237,7 @@ public class Parser {
int
id
=
0
;
int
id
=
0
;
try
{
try
{
id
=
Integer
.
parseInt
(
s
);
id
=
lookupID
(
s
);
}
catch
(
NumberFormatException
e
)
{
}
catch
(
NumberFormatException
e
)
{
throw
new
SAXException
(
e
);
throw
new
SAXException
(
e
);
}
}
...
@@ -252,7 +265,7 @@ public class Parser {
...
@@ -252,7 +265,7 @@ public class Parser {
String
s
=
readRequiredAttribute
(
NODE_ID_PROPERTY
);
String
s
=
readRequiredAttribute
(
NODE_ID_PROPERTY
);
int
id
=
0
;
int
id
=
0
;
try
{
try
{
id
=
Integer
.
parseInt
(
s
);
id
=
lookupID
(
s
);
}
catch
(
NumberFormatException
e
)
{
}
catch
(
NumberFormatException
e
)
{
throw
new
SAXException
(
e
);
throw
new
SAXException
(
e
);
}
}
...
@@ -269,7 +282,7 @@ public class Parser {
...
@@ -269,7 +282,7 @@ public class Parser {
String
s
=
readRequiredAttribute
(
NODE_ID_PROPERTY
);
String
s
=
readRequiredAttribute
(
NODE_ID_PROPERTY
);
int
id
=
0
;
int
id
=
0
;
try
{
try
{
id
=
Integer
.
parseInt
(
s
);
id
=
lookupID
(
s
);
}
catch
(
NumberFormatException
e
)
{
}
catch
(
NumberFormatException
e
)
{
throw
new
SAXException
(
e
);
throw
new
SAXException
(
e
);
}
}
...
@@ -280,7 +293,7 @@ public class Parser {
...
@@ -280,7 +293,7 @@ public class Parser {
private
HandoverElementHandler
<
InputGraph
>
edgesHandler
=
new
HandoverElementHandler
<
InputGraph
>(
EDGES_ELEMENT
);
private
HandoverElementHandler
<
InputGraph
>
edgesHandler
=
new
HandoverElementHandler
<
InputGraph
>(
EDGES_ELEMENT
);
// Local class for edge elements
// Local class for edge elements
private
static
class
EdgeElementHandler
extends
ElementHandler
<
InputEdge
,
InputGraph
>
{
private
class
EdgeElementHandler
extends
ElementHandler
<
InputEdge
,
InputGraph
>
{
public
EdgeElementHandler
(
String
name
)
{
public
EdgeElementHandler
(
String
name
)
{
super
(
name
);
super
(
name
);
...
@@ -298,8 +311,8 @@ public class Parser {
...
@@ -298,8 +311,8 @@ public class Parser {
toIndex
=
Integer
.
parseInt
(
toIndexString
);
toIndex
=
Integer
.
parseInt
(
toIndexString
);
}
}
from
=
Integer
.
parseInt
(
readRequiredAttribute
(
FROM_PROPERTY
));
from
=
lookupID
(
readRequiredAttribute
(
FROM_PROPERTY
));
to
=
Integer
.
parseInt
(
readRequiredAttribute
(
TO_PROPERTY
));
to
=
lookupID
(
readRequiredAttribute
(
TO_PROPERTY
));
}
catch
(
NumberFormatException
e
)
{
}
catch
(
NumberFormatException
e
)
{
throw
new
SAXException
(
e
);
throw
new
SAXException
(
e
);
}
}
...
@@ -344,18 +357,16 @@ public class Parser {
...
@@ -344,18 +357,16 @@ public class Parser {
}
}
};
};
// <property>
// <property>
private
ElementHandler
<
Property
,
Properties
.
Provider
>
propertyHandler
=
new
XMLParser
.
ElementHandler
<
Property
,
Properties
.
Provider
>(
PROPERTY_ELEMENT
,
true
)
{
private
ElementHandler
<
String
,
Properties
.
Provider
>
propertyHandler
=
new
XMLParser
.
ElementHandler
<
String
,
Properties
.
Provider
>(
PROPERTY_ELEMENT
,
true
)
{
@Override
@Override
public
Property
start
()
throws
SAXException
{
public
String
start
()
throws
SAXException
{
String
value
=
""
;
return
readRequiredAttribute
(
PROPERTY_NAME_PROPERTY
).
intern
();
String
name
=
readRequiredAttribute
(
PROPERTY_NAME_PROPERTY
).
intern
();
return
getParentObject
().
getProperties
().
setProperty
(
name
,
value
);
}
}
@Override
@Override
public
void
end
(
String
text
)
{
public
void
end
(
String
text
)
{
get
Object
().
setValue
(
text
.
trim
().
intern
());
get
ParentObject
().
getProperties
().
setProperty
(
getObject
(),
text
.
trim
().
intern
());
}
}
};
};
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Printer.java
浏览文件 @
42108633
...
@@ -67,7 +67,7 @@ public class Printer {
...
@@ -67,7 +67,7 @@ public class Printer {
private
void
export
(
XMLWriter
writer
,
Group
g
)
throws
IOException
{
private
void
export
(
XMLWriter
writer
,
Group
g
)
throws
IOException
{
Properties
attributes
=
new
Properties
();
Properties
attributes
=
new
Properties
();
attributes
.
add
(
new
Property
(
"difference"
,
Boolean
.
toString
(
true
)
));
attributes
.
setProperty
(
"difference"
,
Boolean
.
toString
(
true
));
writer
.
startTag
(
Parser
.
GROUP_ELEMENT
,
attributes
);
writer
.
startTag
(
Parser
.
GROUP_ELEMENT
,
attributes
);
writer
.
writeProperties
(
g
.
getProperties
());
writer
.
writeProperties
(
g
.
getProperties
());
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java
浏览文件 @
42108633
...
@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.data.serialization;
...
@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.data.serialization;
import
com.sun.hotspot.igv.data.Property
;
import
com.sun.hotspot.igv.data.Property
;
import
com.sun.hotspot.igv.data.Properties
;
import
com.sun.hotspot.igv.data.Properties
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.Stack
;
import
java.util.Stack
;
import
org.xml.sax.Attributes
;
import
org.xml.sax.Attributes
;
import
org.xml.sax.ContentHandler
;
import
org.xml.sax.ContentHandler
;
...
@@ -89,7 +89,7 @@ public class XMLParser implements ContentHandler {
...
@@ -89,7 +89,7 @@ public class XMLParser implements ContentHandler {
private
Attributes
attr
;
private
Attributes
attr
;
private
StringBuilder
currentText
;
private
StringBuilder
currentText
;
private
ParseMonitor
monitor
;
private
ParseMonitor
monitor
;
private
Hash
table
<
String
,
ElementHandler
<?,
?
super
T
>>
hashtable
;
private
Hash
Map
<
String
,
ElementHandler
<?,
?
super
T
>>
hashtable
;
private
boolean
needsText
;
private
boolean
needsText
;
private
ElementHandler
<
P
,
?>
parentElement
;
private
ElementHandler
<
P
,
?>
parentElement
;
...
@@ -110,7 +110,7 @@ public class XMLParser implements ContentHandler {
...
@@ -110,7 +110,7 @@ public class XMLParser implements ContentHandler {
}
}
public
ElementHandler
(
String
name
,
boolean
needsText
)
{
public
ElementHandler
(
String
name
,
boolean
needsText
)
{
this
.
hashtable
=
new
Hash
table
<
String
,
ElementHandler
<?,
?
super
T
>>();
this
.
hashtable
=
new
Hash
Map
<
String
,
ElementHandler
<?,
?
super
T
>>();
this
.
name
=
name
;
this
.
name
=
name
;
this
.
needsText
=
needsText
;
this
.
needsText
=
needsText
;
}
}
...
@@ -153,7 +153,7 @@ public class XMLParser implements ContentHandler {
...
@@ -153,7 +153,7 @@ public class XMLParser implements ContentHandler {
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
String
val
=
attr
.
getValue
(
i
).
intern
();
String
val
=
attr
.
getValue
(
i
).
intern
();
String
localName
=
attr
.
getLocalName
(
i
).
intern
();
String
localName
=
attr
.
getLocalName
(
i
).
intern
();
p
.
add
(
new
Property
(
val
,
localName
)
);
p
.
setProperty
(
val
,
localName
);
}
}
}
}
...
...
src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLWriter.java
浏览文件 @
42108633
...
@@ -89,7 +89,7 @@ public class XMLWriter extends Writer {
...
@@ -89,7 +89,7 @@ public class XMLWriter extends Writer {
inner
.
write
(
"<"
+
name
);
inner
.
write
(
"<"
+
name
);
elementStack
.
push
(
name
);
elementStack
.
push
(
name
);
for
(
Property
p
:
attributes
.
getProperties
()
)
{
for
(
Property
p
:
attributes
)
{
inner
.
write
(
" "
+
p
.
getName
()
+
"=\""
);
inner
.
write
(
" "
+
p
.
getName
()
+
"=\""
);
write
(
p
.
getValue
().
toCharArray
());
write
(
p
.
getValue
().
toCharArray
());
inner
.
write
(
"\""
);
inner
.
write
(
"\""
);
...
@@ -101,7 +101,7 @@ public class XMLWriter extends Writer {
...
@@ -101,7 +101,7 @@ public class XMLWriter extends Writer {
public
void
simpleTag
(
String
name
,
Properties
attributes
)
throws
IOException
{
public
void
simpleTag
(
String
name
,
Properties
attributes
)
throws
IOException
{
inner
.
write
(
"<"
+
name
);
inner
.
write
(
"<"
+
name
);
for
(
Property
p
:
attributes
.
getProperties
()
)
{
for
(
Property
p
:
attributes
)
{
inner
.
write
(
" "
+
p
.
getName
()
+
"=\""
);
inner
.
write
(
" "
+
p
.
getName
()
+
"=\""
);
write
(
p
.
getValue
().
toCharArray
());
write
(
p
.
getValue
().
toCharArray
());
inner
.
write
(
"\""
);
inner
.
write
(
"\""
);
...
@@ -111,13 +111,13 @@ public class XMLWriter extends Writer {
...
@@ -111,13 +111,13 @@ public class XMLWriter extends Writer {
}
}
public
void
writeProperties
(
Properties
props
)
throws
IOException
{
public
void
writeProperties
(
Properties
props
)
throws
IOException
{
if
(
props
.
getProperties
().
size
()
==
0
)
{
if
(
props
.
getProperties
().
hasNext
()
==
false
)
{
return
;
return
;
}
}
startTag
(
Parser
.
PROPERTIES_ELEMENT
);
startTag
(
Parser
.
PROPERTIES_ELEMENT
);
for
(
Property
p
:
props
.
getProperties
()
)
{
for
(
Property
p
:
props
)
{
startTag
(
Parser
.
PROPERTY_ELEMENT
,
new
Properties
(
Parser
.
PROPERTY_NAME_PROPERTY
,
p
.
getName
()));
startTag
(
Parser
.
PROPERTY_ELEMENT
,
new
Properties
(
Parser
.
PROPERTY_NAME_PROPERTY
,
p
.
getName
()));
this
.
write
(
p
.
getValue
().
toCharArray
());
this
.
write
(
p
.
getValue
().
toCharArray
());
endTag
();
endTag
();
...
...
src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java
浏览文件 @
42108633
...
@@ -29,6 +29,7 @@ import com.sun.hotspot.igv.data.InputEdge;
...
@@ -29,6 +29,7 @@ import com.sun.hotspot.igv.data.InputEdge;
import
com.sun.hotspot.igv.data.InputGraph
;
import
com.sun.hotspot.igv.data.InputGraph
;
import
com.sun.hotspot.igv.data.InputNode
;
import
com.sun.hotspot.igv.data.InputNode
;
import
com.sun.hotspot.igv.data.Property
;
import
com.sun.hotspot.igv.data.Property
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -124,8 +125,8 @@ public class Difference {
...
@@ -124,8 +125,8 @@ public class Difference {
inputNodeMap
.
put
(
n
,
n2
);
inputNodeMap
.
put
(
n
,
n2
);
}
}
Set
<
InputEdge
>
edgesA
=
a
.
getEdges
();
Collection
<
InputEdge
>
edgesA
=
a
.
getEdges
();
Set
<
InputEdge
>
edgesB
=
b
.
getEdges
();
Collection
<
InputEdge
>
edgesB
=
b
.
getEdges
();
Set
<
InputEdge
>
newEdges
=
new
HashSet
<
InputEdge
>();
Set
<
InputEdge
>
newEdges
=
new
HashSet
<
InputEdge
>();
...
@@ -182,7 +183,7 @@ public class Difference {
...
@@ -182,7 +183,7 @@ public class Difference {
public
double
getValue
()
{
public
double
getValue
()
{
double
result
=
0.0
;
double
result
=
0.0
;
for
(
Property
p
:
n1
.
getProperties
()
.
getProperties
()
)
{
for
(
Property
p
:
n1
.
getProperties
())
{
double
faktor
=
1.0
;
double
faktor
=
1.0
;
for
(
String
forbidden
:
IGNORE_PROPERTIES
)
{
for
(
String
forbidden
:
IGNORE_PROPERTIES
)
{
if
(
p
.
getName
().
equals
(
forbidden
))
{
if
(
p
.
getName
().
equals
(
forbidden
))
{
...
@@ -287,34 +288,34 @@ public class Difference {
...
@@ -287,34 +288,34 @@ public class Difference {
private
static
void
markAsChanged
(
InputNode
n
,
InputNode
firstNode
,
InputNode
otherNode
)
{
private
static
void
markAsChanged
(
InputNode
n
,
InputNode
firstNode
,
InputNode
otherNode
)
{
boolean
difference
=
false
;
boolean
difference
=
false
;
for
(
Property
p
:
otherNode
.
getProperties
()
.
getProperties
()
)
{
for
(
Property
p
:
otherNode
.
getProperties
())
{
String
s
=
firstNode
.
getProperties
().
get
Property
(
p
.
getName
());
String
s
=
firstNode
.
getProperties
().
get
(
p
.
getName
());
if
(!
p
.
getValue
().
equals
(
s
))
{
if
(!
p
.
getValue
().
equals
(
s
))
{
difference
=
true
;
difference
=
true
;
n
.
getProperties
().
add
(
new
Property
(
OLD_PREFIX
+
p
.
getName
(),
p
.
getValue
()
));
n
.
getProperties
().
setProperty
(
OLD_PREFIX
+
p
.
getName
(),
p
.
getValue
(
));
}
}
}
}
for
(
Property
p
:
firstNode
.
getProperties
()
.
getProperties
()
)
{
for
(
Property
p
:
firstNode
.
getProperties
())
{
String
s
=
otherNode
.
getProperties
().
get
Property
(
p
.
getName
());
String
s
=
otherNode
.
getProperties
().
get
(
p
.
getName
());
if
(
s
==
null
&&
p
.
getValue
().
length
()
>
0
)
{
if
(
s
==
null
&&
p
.
getValue
().
length
()
>
0
)
{
difference
=
true
;
difference
=
true
;
n
.
getProperties
().
add
(
new
Property
(
OLD_PREFIX
+
p
.
getName
(),
""
)
);
n
.
getProperties
().
setProperty
(
OLD_PREFIX
+
p
.
getName
(),
""
);
}
}
}
}
if
(
difference
)
{
if
(
difference
)
{
n
.
getProperties
().
add
(
new
Property
(
PROPERTY_STATE
,
VALUE_CHANGED
)
);
n
.
getProperties
().
setProperty
(
PROPERTY_STATE
,
VALUE_CHANGED
);
}
else
{
}
else
{
n
.
getProperties
().
add
(
new
Property
(
PROPERTY_STATE
,
VALUE_SAME
)
);
n
.
getProperties
().
setProperty
(
PROPERTY_STATE
,
VALUE_SAME
);
}
}
}
}
private
static
void
markAsDeleted
(
InputNode
n
)
{
private
static
void
markAsDeleted
(
InputNode
n
)
{
n
.
getProperties
().
add
(
new
Property
(
PROPERTY_STATE
,
VALUE_DELETED
)
);
n
.
getProperties
().
setProperty
(
PROPERTY_STATE
,
VALUE_DELETED
);
}
}
private
static
void
markAsNew
(
InputNode
n
)
{
private
static
void
markAsNew
(
InputNode
n
)
{
n
.
getProperties
().
add
(
new
Property
(
PROPERTY_STATE
,
VALUE_NEW
)
);
n
.
getProperties
().
setProperty
(
PROPERTY_STATE
,
VALUE_NEW
);
}
}
}
}
src/share/tools/IdealGraphVisualizer/Filter/manifest.mf
浏览文件 @
42108633
src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java
浏览文件 @
42108633
...
@@ -25,7 +25,6 @@
...
@@ -25,7 +25,6 @@
package
com.sun.hotspot.igv.filter
;
package
com.sun.hotspot.igv.filter
;
import
com.sun.hotspot.igv.graph.Diagram
;
import
com.sun.hotspot.igv.graph.Diagram
;
import
com.sun.hotspot.igv.data.Property
;
import
java.io.BufferedReader
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
...
@@ -56,7 +55,7 @@ public class CustomFilter extends AbstractFilter {
...
@@ -56,7 +55,7 @@ public class CustomFilter extends AbstractFilter {
public
CustomFilter
(
String
name
,
String
code
)
{
public
CustomFilter
(
String
name
,
String
code
)
{
this
.
name
=
name
;
this
.
name
=
name
;
this
.
code
=
code
;
this
.
code
=
code
;
getProperties
().
add
(
new
Property
(
"name"
,
name
)
);
getProperties
().
setProperty
(
"name"
,
name
);
}
}
public
String
getName
()
{
public
String
getName
()
{
...
...
src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/SplitFilter.java
浏览文件 @
42108633
...
@@ -56,8 +56,8 @@ public class SplitFilter extends AbstractFilter {
...
@@ -56,8 +56,8 @@ public class SplitFilter extends AbstractFilter {
for
(
OutputSlot
os
:
f
.
getOutputSlots
())
{
for
(
OutputSlot
os
:
f
.
getOutputSlots
())
{
for
(
Connection
c
:
os
.
getConnections
())
{
for
(
Connection
c
:
os
.
getConnections
())
{
InputSlot
is
=
c
.
getInputSlot
();
InputSlot
is
=
c
.
getInputSlot
();
is
.
setName
(
f
.
getProperties
().
get
Property
(
"dump_spec"
));
is
.
setName
(
f
.
getProperties
().
get
(
"dump_spec"
));
String
s
=
f
.
getProperties
().
get
Property
(
"short_name"
);
String
s
=
f
.
getProperties
().
get
(
"short_name"
);
if
(
s
!=
null
)
{
if
(
s
!=
null
)
{
is
.
setShortName
(
s
);
is
.
setShortName
(
s
);
}
}
...
...
src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Diagram.java
浏览文件 @
42108633
...
@@ -35,7 +35,7 @@ import java.util.Collections;
...
@@ -35,7 +35,7 @@ import java.util.Collections;
import
java.util.Comparator
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.Set
;
...
@@ -126,7 +126,7 @@ public class Diagram {
...
@@ -126,7 +126,7 @@ public class Diagram {
d
.
updateBlocks
();
d
.
updateBlocks
();
Collection
<
InputNode
>
nodes
=
graph
.
getNodes
();
Collection
<
InputNode
>
nodes
=
graph
.
getNodes
();
Hash
table
<
Integer
,
Figure
>
figureHash
=
new
Hashtable
<
Integer
,
Figure
>();
Hash
Map
<
Integer
,
Figure
>
figureHash
=
new
HashMap
<
Integer
,
Figure
>();
for
(
InputNode
n
:
nodes
)
{
for
(
InputNode
n
:
nodes
)
{
Figure
f
=
d
.
createFigure
();
Figure
f
=
d
.
createFigure
();
f
.
getSource
().
addSourceNode
(
n
);
f
.
getSource
().
addSourceNode
(
n
);
...
...
src/share/tools/IdealGraphVisualizer/Graph/src/com/sun/hotspot/igv/graph/Figure.java
浏览文件 @
42108633
...
@@ -42,7 +42,7 @@ import java.util.Set;
...
@@ -42,7 +42,7 @@ import java.util.Set;
*
*
* @author Thomas Wuerthinger
* @author Thomas Wuerthinger
*/
*/
public
class
Figure
extends
Properties
.
Object
implements
Source
.
Provider
,
Vertex
{
public
class
Figure
extends
Properties
.
Entity
implements
Source
.
Provider
,
Vertex
{
public
static
final
int
INSET
=
6
;
public
static
final
int
INSET
=
6
;
public
static
final
int
SLOT_WIDTH
=
10
;
public
static
final
int
SLOT_WIDTH
=
10
;
...
...
src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/Graph.java
浏览文件 @
42108633
...
@@ -26,7 +26,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
...
@@ -26,7 +26,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.LinkedList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Queue
;
import
java.util.Queue
;
...
@@ -37,13 +37,13 @@ import java.util.Queue;
...
@@ -37,13 +37,13 @@ import java.util.Queue;
*/
*/
public
class
Graph
<
N
,
E
>
{
public
class
Graph
<
N
,
E
>
{
private
Hash
table
<
Object
,
Node
<
N
,
E
>>
nodes
;
private
Hash
Map
<
Object
,
Node
<
N
,
E
>>
nodes
;
private
Hash
table
<
Object
,
Edge
<
N
,
E
>>
edges
;
private
Hash
Map
<
Object
,
Edge
<
N
,
E
>>
edges
;
private
List
<
Node
<
N
,
E
>>
nodeList
;
private
List
<
Node
<
N
,
E
>>
nodeList
;
public
Graph
()
{
public
Graph
()
{
nodes
=
new
Hash
table
<
Object
,
Node
<
N
,
E
>>();
nodes
=
new
Hash
Map
<
Object
,
Node
<
N
,
E
>>();
edges
=
new
Hash
table
<
Object
,
Edge
<
N
,
E
>>();
edges
=
new
Hash
Map
<
Object
,
Edge
<
N
,
E
>>();
nodeList
=
new
ArrayList
<
Node
<
N
,
E
>>();
nodeList
=
new
ArrayList
<
Node
<
N
,
E
>>();
}
}
...
...
src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalClusterLayoutManager.java
浏览文件 @
42108633
...
@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
...
@@ -25,7 +25,7 @@ package com.sun.hotspot.igv.hierarchicallayout;
import
java.awt.Point
;
import
java.awt.Point
;
import
java.awt.Rectangle
;
import
java.awt.Rectangle
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -69,19 +69,19 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
...
@@ -69,19 +69,19 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
assert
graph
.
verify
();
assert
graph
.
verify
();
Hash
table
<
Cluster
,
List
<
Vertex
>>
lists
=
new
Hashtable
<
Cluster
,
List
<
Vertex
>>();
Hash
Map
<
Cluster
,
List
<
Vertex
>>
lists
=
new
HashMap
<
Cluster
,
List
<
Vertex
>>();
Hash
table
<
Cluster
,
List
<
Link
>>
listsConnection
=
new
Hashtable
<
Cluster
,
List
<
Link
>>();
Hash
Map
<
Cluster
,
List
<
Link
>>
listsConnection
=
new
HashMap
<
Cluster
,
List
<
Link
>>();
Hash
table
<
Cluster
,
Hashtable
<
Port
,
ClusterInputSlotNode
>>
clusterInputSlotHash
=
new
Hashtable
<
Cluster
,
Hashtable
<
Port
,
ClusterInputSlotNode
>>();
Hash
Map
<
Cluster
,
HashMap
<
Port
,
ClusterInputSlotNode
>>
clusterInputSlotHash
=
new
HashMap
<
Cluster
,
HashMap
<
Port
,
ClusterInputSlotNode
>>();
Hash
table
<
Cluster
,
Hashtable
<
Port
,
ClusterOutputSlotNode
>>
clusterOutputSlotHash
=
new
Hashtable
<
Cluster
,
Hashtable
<
Port
,
ClusterOutputSlotNode
>>();
Hash
Map
<
Cluster
,
HashMap
<
Port
,
ClusterOutputSlotNode
>>
clusterOutputSlotHash
=
new
HashMap
<
Cluster
,
HashMap
<
Port
,
ClusterOutputSlotNode
>>();
Hash
table
<
Cluster
,
ClusterNode
>
clusterNodes
=
new
Hashtable
<
Cluster
,
ClusterNode
>();
Hash
Map
<
Cluster
,
ClusterNode
>
clusterNodes
=
new
HashMap
<
Cluster
,
ClusterNode
>();
Hash
table
<
Cluster
,
Set
<
ClusterInputSlotNode
>>
clusterInputSlotSet
=
new
Hashtable
<
Cluster
,
Set
<
ClusterInputSlotNode
>>();
Hash
Map
<
Cluster
,
Set
<
ClusterInputSlotNode
>>
clusterInputSlotSet
=
new
HashMap
<
Cluster
,
Set
<
ClusterInputSlotNode
>>();
Hash
table
<
Cluster
,
Set
<
ClusterOutputSlotNode
>>
clusterOutputSlotSet
=
new
Hashtable
<
Cluster
,
Set
<
ClusterOutputSlotNode
>>();
Hash
Map
<
Cluster
,
Set
<
ClusterOutputSlotNode
>>
clusterOutputSlotSet
=
new
HashMap
<
Cluster
,
Set
<
ClusterOutputSlotNode
>>();
Set
<
Link
>
clusterEdges
=
new
HashSet
<
Link
>();
Set
<
Link
>
clusterEdges
=
new
HashSet
<
Link
>();
Set
<
Link
>
interClusterEdges
=
new
HashSet
<
Link
>();
Set
<
Link
>
interClusterEdges
=
new
HashSet
<
Link
>();
Hash
table
<
Link
,
ClusterOutgoingConnection
>
linkClusterOutgoingConnection
=
new
Hashtable
<
Link
,
ClusterOutgoingConnection
>();
Hash
Map
<
Link
,
ClusterOutgoingConnection
>
linkClusterOutgoingConnection
=
new
HashMap
<
Link
,
ClusterOutgoingConnection
>();
Hash
table
<
Link
,
InterClusterConnection
>
linkInterClusterConnection
=
new
Hashtable
<
Link
,
InterClusterConnection
>();
Hash
Map
<
Link
,
InterClusterConnection
>
linkInterClusterConnection
=
new
HashMap
<
Link
,
InterClusterConnection
>();
Hash
table
<
Link
,
ClusterIngoingConnection
>
linkClusterIngoingConnection
=
new
Hashtable
<
Link
,
ClusterIngoingConnection
>();
Hash
Map
<
Link
,
ClusterIngoingConnection
>
linkClusterIngoingConnection
=
new
HashMap
<
Link
,
ClusterIngoingConnection
>();
Set
<
ClusterNode
>
clusterNodeSet
=
new
HashSet
<
ClusterNode
>();
Set
<
ClusterNode
>
clusterNodeSet
=
new
HashSet
<
ClusterNode
>();
Set
<
Cluster
>
cluster
=
graph
.
getClusters
();
Set
<
Cluster
>
cluster
=
graph
.
getClusters
();
...
@@ -89,8 +89,8 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
...
@@ -89,8 +89,8 @@ public class HierarchicalClusterLayoutManager implements LayoutManager {
for
(
Cluster
c
:
cluster
)
{
for
(
Cluster
c
:
cluster
)
{
lists
.
put
(
c
,
new
ArrayList
<
Vertex
>());
lists
.
put
(
c
,
new
ArrayList
<
Vertex
>());
listsConnection
.
put
(
c
,
new
ArrayList
<
Link
>());
listsConnection
.
put
(
c
,
new
ArrayList
<
Link
>());
clusterInputSlotHash
.
put
(
c
,
new
Hash
table
<
Port
,
ClusterInputSlotNode
>());
clusterInputSlotHash
.
put
(
c
,
new
Hash
Map
<
Port
,
ClusterInputSlotNode
>());
clusterOutputSlotHash
.
put
(
c
,
new
Hash
table
<
Port
,
ClusterOutputSlotNode
>());
clusterOutputSlotHash
.
put
(
c
,
new
Hash
Map
<
Port
,
ClusterOutputSlotNode
>());
clusterOutputSlotSet
.
put
(
c
,
new
TreeSet
<
ClusterOutputSlotNode
>());
clusterOutputSlotSet
.
put
(
c
,
new
TreeSet
<
ClusterOutputSlotNode
>());
clusterInputSlotSet
.
put
(
c
,
new
TreeSet
<
ClusterInputSlotNode
>());
clusterInputSlotSet
.
put
(
c
,
new
TreeSet
<
ClusterInputSlotNode
>());
ClusterNode
cn
=
new
ClusterNode
(
c
,
""
+
z
);
ClusterNode
cn
=
new
ClusterNode
(
c
,
""
+
z
);
...
...
src/share/tools/IdealGraphVisualizer/Layout/src/com/sun/hotspot/igv/layout/LayoutGraph.java
浏览文件 @
42108633
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
package
com.sun.hotspot.igv.layout
;
package
com.sun.hotspot.igv.layout
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.SortedSet
;
import
java.util.SortedSet
;
import
java.util.TreeSet
;
import
java.util.TreeSet
;
...
@@ -37,9 +37,9 @@ public class LayoutGraph {
...
@@ -37,9 +37,9 @@ public class LayoutGraph {
private
Set
<?
extends
Link
>
links
;
private
Set
<?
extends
Link
>
links
;
private
SortedSet
<
Vertex
>
vertices
;
private
SortedSet
<
Vertex
>
vertices
;
private
Hash
table
<
Vertex
,
Set
<
Port
>>
inputPorts
;
private
Hash
Map
<
Vertex
,
Set
<
Port
>>
inputPorts
;
private
Hash
table
<
Vertex
,
Set
<
Port
>>
outputPorts
;
private
Hash
Map
<
Vertex
,
Set
<
Port
>>
outputPorts
;
private
Hash
table
<
Port
,
Set
<
Link
>>
portLinks
;
private
Hash
Map
<
Port
,
Set
<
Link
>>
portLinks
;
public
LayoutGraph
(
Set
<?
extends
Link
>
links
)
{
public
LayoutGraph
(
Set
<?
extends
Link
>
links
)
{
this
(
links
,
new
HashSet
<
Vertex
>());
this
(
links
,
new
HashSet
<
Vertex
>());
...
@@ -50,9 +50,9 @@ public class LayoutGraph {
...
@@ -50,9 +50,9 @@ public class LayoutGraph {
assert
verify
();
assert
verify
();
vertices
=
new
TreeSet
<
Vertex
>();
vertices
=
new
TreeSet
<
Vertex
>();
portLinks
=
new
Hash
table
<
Port
,
Set
<
Link
>>();
portLinks
=
new
Hash
Map
<
Port
,
Set
<
Link
>>();
inputPorts
=
new
Hash
table
<
Vertex
,
Set
<
Port
>>();
inputPorts
=
new
Hash
Map
<
Vertex
,
Set
<
Port
>>();
outputPorts
=
new
Hash
table
<
Vertex
,
Set
<
Port
>>();
outputPorts
=
new
Hash
Map
<
Vertex
,
Set
<
Port
>>();
for
(
Link
l
:
links
)
{
for
(
Link
l
:
links
)
{
Port
p
=
l
.
getFrom
();
Port
p
=
l
.
getFrom
();
...
...
src/share/tools/IdealGraphVisualizer/README
浏览文件 @
42108633
...
@@ -5,21 +5,16 @@ of Linz in Austria and has been included as part of hotspot since that
...
@@ -5,21 +5,16 @@ of Linz in Austria and has been included as part of hotspot since that
was the primary target of the tool. The tool itself is fairly general
was the primary target of the tool. The tool itself is fairly general
with only a few modules that contain C2 specific elements.
with only a few modules that contain C2 specific elements.
The tool is built on top of the NetBeans 6.
0
rich client
The tool is built on top of the NetBeans 6.
1
rich client
infrastructure and so requires NetBeans to build. It currently
infrastructure and so requires NetBeans to build. It currently
requires Java 6 to run as it needs support for JavaScript for its
requires Java 6 to run as it needs support for JavaScript for its
filtering mechanism and assumes it's built into the platform. It
filtering mechanism and assumes it's built into the platform. It
should build out of the box whit NetBeans 6 and Java 6 or later. It's
should build out of the box with NetBeans 6.1 and Java 6 or later.
possible to run it on 1.5 by including Rhino on the classpath though
It's possible to run it on 1.5 by including Rhino on the classpath
that currently isn't working correctly. Support for exporting graphs
though that currently isn't working correctly. Support for exporting
as SVG can be enabled by adding batik to the classpath which isn't
graphs as SVG can be enabled by adding batik to the classpath which
included by default.
isn't included by default. It can be built on top of NetBeans 6.0 if
you change the required modules to be platform7 instead of platform8.
It can be built on top of NetBeans 6.1 if you change the required
modules to be platform8 instead of platform7. The tool could run on
JDK 1.5 with some reworking of the how the JavaScript support is
enabled but currently it requires some tweaking of the setup. This
will be fixed in a later setup.
The JVM support is controlled by the flag -XX:PrintIdealGraphLevel=#
The JVM support is controlled by the flag -XX:PrintIdealGraphLevel=#
where # is:
where # is:
...
...
src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/PropertiesSheet.java
浏览文件 @
42108633
...
@@ -36,11 +36,11 @@ import org.openide.nodes.Sheet;
...
@@ -36,11 +36,11 @@ import org.openide.nodes.Sheet;
*/
*/
public
class
PropertiesSheet
{
public
class
PropertiesSheet
{
public
static
void
initializeSheet
(
Properties
properties
,
Sheet
s
)
{
public
static
void
initializeSheet
(
final
Properties
properties
,
Sheet
s
)
{
Sheet
.
Set
set1
=
Sheet
.
createPropertiesSet
();
Sheet
.
Set
set1
=
Sheet
.
createPropertiesSet
();
set1
.
setDisplayName
(
"Properties"
);
set1
.
setDisplayName
(
"Properties"
);
for
(
final
Property
p
:
properties
.
getProperties
()
)
{
for
(
final
Property
p
:
properties
)
{
Node
.
Property
<
String
>
prop
=
new
Node
.
Property
<
String
>(
String
.
class
)
{
Node
.
Property
<
String
>
prop
=
new
Node
.
Property
<
String
>(
String
.
class
)
{
@Override
@Override
...
@@ -60,7 +60,7 @@ public class PropertiesSheet {
...
@@ -60,7 +60,7 @@ public class PropertiesSheet {
@Override
@Override
public
void
setValue
(
String
arg0
)
throws
IllegalAccessException
,
IllegalArgumentException
,
InvocationTargetException
{
public
void
setValue
(
String
arg0
)
throws
IllegalAccessException
,
IllegalArgumentException
,
InvocationTargetException
{
p
.
setValue
(
arg0
);
p
roperties
.
setProperty
(
p
.
getName
(),
arg0
);
}
}
};
};
prop
.
setName
(
p
.
getName
());
prop
.
setName
(
p
.
getName
());
...
...
src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/RangeSliderModel.java
浏览文件 @
42108633
...
@@ -65,13 +65,19 @@ public class RangeSliderModel implements ChangedEventProvider<RangeSliderModel>
...
@@ -65,13 +65,19 @@ public class RangeSliderModel implements ChangedEventProvider<RangeSliderModel>
public
RangeSliderModel
(
List
<
String
>
positions
)
{
public
RangeSliderModel
(
List
<
String
>
positions
)
{
assert
positions
.
size
()
>
0
;
assert
positions
.
size
()
>
0
;
this
.
positions
=
positions
;
this
.
changedEvent
=
new
ChangedEvent
<
RangeSliderModel
>(
this
);
this
.
changedEvent
=
new
ChangedEvent
<
RangeSliderModel
>(
this
);
this
.
colorChangedEvent
=
new
ChangedEvent
<
RangeSliderModel
>(
this
);
this
.
colorChangedEvent
=
new
ChangedEvent
<
RangeSliderModel
>(
this
);
setPositions
(
positions
);
}
protected
void
setPositions
(
List
<
String
>
positions
)
{
this
.
positions
=
positions
;
colors
=
new
ArrayList
<
Color
>();
colors
=
new
ArrayList
<
Color
>();
for
(
int
i
=
0
;
i
<
positions
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
positions
.
size
();
i
++)
{
colors
.
add
(
Color
.
black
);
colors
.
add
(
Color
.
black
);
}
}
changedEvent
.
fire
();
colorChangedEvent
.
fire
();
}
}
public
void
setColors
(
List
<
Color
>
colors
)
{
public
void
setColors
(
List
<
Color
>
colors
)
{
...
...
src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java
浏览文件 @
42108633
...
@@ -63,7 +63,7 @@ import java.util.ArrayList;
...
@@ -63,7 +63,7 @@ import java.util.ArrayList;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.Hash
table
;
import
java.util.Hash
Map
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.Set
;
...
@@ -104,10 +104,10 @@ import org.openide.util.lookup.InstanceContent;
...
@@ -104,10 +104,10 @@ import org.openide.util.lookup.InstanceContent;
*/
*/
public
class
DiagramScene
extends
Scene
implements
ChangedListener
<
DiagramViewModel
>
{
public
class
DiagramScene
extends
Scene
implements
ChangedListener
<
DiagramViewModel
>
{
private
Hash
table
<
Figure
,
FigureWidget
>
figureWidgets
;
private
Hash
Map
<
Figure
,
FigureWidget
>
figureWidgets
;
private
Hash
table
<
Slot
,
SlotWidget
>
slotWidgets
;
private
Hash
Map
<
Slot
,
SlotWidget
>
slotWidgets
;
private
Hash
table
<
Connection
,
ConnectionWidget
>
connectionWidgets
;
private
Hash
Map
<
Connection
,
ConnectionWidget
>
connectionWidgets
;
private
Hash
table
<
InputBlock
,
BlockWidget
>
blockWidgets
;
private
Hash
Map
<
InputBlock
,
BlockWidget
>
blockWidgets
;
private
Widget
hoverWidget
;
private
Widget
hoverWidget
;
private
WidgetAction
hoverAction
;
private
WidgetAction
hoverAction
;
private
List
<
FigureWidget
>
selectedWidgets
;
private
List
<
FigureWidget
>
selectedWidgets
;
...
@@ -414,7 +414,7 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
...
@@ -414,7 +414,7 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
this
.
addChild
(
selectLayer
);
this
.
addChild
(
selectLayer
);
this
.
getActions
().
addAction
(
ActionFactory
.
createRectangularSelectAction
(
rectangularSelectDecorator
,
selectLayer
,
rectangularSelectProvider
));
this
.
getActions
().
addAction
(
ActionFactory
.
createRectangularSelectAction
(
rectangularSelectDecorator
,
selectLayer
,
rectangularSelectProvider
));
blockWidgets
=
new
Hash
table
<
InputBlock
,
BlockWidget
>();
blockWidgets
=
new
Hash
Map
<
InputBlock
,
BlockWidget
>();
boolean
b
=
this
.
getUndoRedoEnabled
();
boolean
b
=
this
.
getUndoRedoEnabled
();
this
.
setUndoRedoEnabled
(
false
);
this
.
setUndoRedoEnabled
(
false
);
...
@@ -543,9 +543,9 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
...
@@ -543,9 +543,9 @@ public class DiagramScene extends Scene implements ChangedListener<DiagramViewMo
blockLayer
.
removeChildren
();
blockLayer
.
removeChildren
();
blockWidgets
.
clear
();
blockWidgets
.
clear
();
figureWidgets
=
new
Hash
table
<
Figure
,
FigureWidget
>();
figureWidgets
=
new
Hash
Map
<
Figure
,
FigureWidget
>();
slotWidgets
=
new
Hash
table
<
Slot
,
SlotWidget
>();
slotWidgets
=
new
Hash
Map
<
Slot
,
SlotWidget
>();
connectionWidgets
=
new
Hash
table
<
Connection
,
ConnectionWidget
>();
connectionWidgets
=
new
Hash
Map
<
Connection
,
ConnectionWidget
>();
WidgetAction
selectAction
=
new
ExtendedSelectAction
(
selectProvider
);
WidgetAction
selectAction
=
new
ExtendedSelectAction
(
selectProvider
);
Diagram
d
=
getModel
().
getDiagramToView
();
Diagram
d
=
getModel
().
getDiagramToView
();
...
...
src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java
浏览文件 @
42108633
...
@@ -55,6 +55,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
...
@@ -55,6 +55,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
private
FilterChain
filterChain
;
private
FilterChain
filterChain
;
private
FilterChain
sequenceFilterChain
;
private
FilterChain
sequenceFilterChain
;
private
Diagram
diagram
;
private
Diagram
diagram
;
private
ChangedEvent
<
DiagramViewModel
>
groupChangedEvent
;
private
ChangedEvent
<
DiagramViewModel
>
diagramChangedEvent
;
private
ChangedEvent
<
DiagramViewModel
>
diagramChangedEvent
;
private
ChangedEvent
<
DiagramViewModel
>
viewChangedEvent
;
private
ChangedEvent
<
DiagramViewModel
>
viewChangedEvent
;
private
ChangedEvent
<
DiagramViewModel
>
viewPropertiesChangedEvent
;
private
ChangedEvent
<
DiagramViewModel
>
viewPropertiesChangedEvent
;
...
@@ -67,6 +68,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
...
@@ -67,6 +68,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
}
}
};
};
@Override
public
DiagramViewModel
copy
()
{
public
DiagramViewModel
copy
()
{
DiagramViewModel
result
=
new
DiagramViewModel
(
group
,
filterChain
,
sequenceFilterChain
);
DiagramViewModel
result
=
new
DiagramViewModel
(
group
,
filterChain
,
sequenceFilterChain
);
result
.
setData
(
this
);
result
.
setData
(
this
);
...
@@ -79,6 +81,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
...
@@ -79,6 +81,7 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
boolean
viewChanged
=
false
;
boolean
viewChanged
=
false
;
boolean
viewPropertiesChanged
=
false
;
boolean
viewPropertiesChanged
=
false
;
boolean
groupChanged
=
(
group
==
newModel
.
group
);
this
.
group
=
newModel
.
group
;
this
.
group
=
newModel
.
group
;
diagramChanged
|=
(
filterChain
!=
newModel
.
filterChain
);
diagramChanged
|=
(
filterChain
!=
newModel
.
filterChain
);
this
.
filterChain
=
newModel
.
filterChain
;
this
.
filterChain
=
newModel
.
filterChain
;
...
@@ -97,6 +100,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
...
@@ -97,6 +100,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
viewPropertiesChanged
|=
(
showNodeHull
!=
newModel
.
showNodeHull
);
viewPropertiesChanged
|=
(
showNodeHull
!=
newModel
.
showNodeHull
);
this
.
showNodeHull
=
newModel
.
showNodeHull
;
this
.
showNodeHull
=
newModel
.
showNodeHull
;
if
(
groupChanged
)
{
groupChangedEvent
.
fire
();
}
if
(
diagramChanged
)
{
if
(
diagramChanged
)
{
diagramChangedEvent
.
fire
();
diagramChangedEvent
.
fire
();
}
}
...
@@ -143,11 +150,38 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
...
@@ -143,11 +150,38 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
diagramChangedEvent
=
new
ChangedEvent
<
DiagramViewModel
>(
this
);
diagramChangedEvent
=
new
ChangedEvent
<
DiagramViewModel
>(
this
);
viewChangedEvent
=
new
ChangedEvent
<
DiagramViewModel
>(
this
);
viewChangedEvent
=
new
ChangedEvent
<
DiagramViewModel
>(
this
);
viewPropertiesChangedEvent
=
new
ChangedEvent
<
DiagramViewModel
>(
this
);
viewPropertiesChangedEvent
=
new
ChangedEvent
<
DiagramViewModel
>(
this
);
groupChangedEvent
=
new
ChangedEvent
<
DiagramViewModel
>(
this
);
groupChangedEvent
.
addListener
(
groupChangedListener
);
groupChangedEvent
.
fire
();
filterChain
.
getChangedEvent
().
addListener
(
filterChainChangedListener
);
filterChain
.
getChangedEvent
().
addListener
(
filterChainChangedListener
);
sequenceFilterChain
.
getChangedEvent
().
addListener
(
filterChainChangedListener
);
sequenceFilterChain
.
getChangedEvent
().
addListener
(
filterChainChangedListener
);
}
}
private
final
ChangedListener
<
DiagramViewModel
>
groupChangedListener
=
new
ChangedListener
<
DiagramViewModel
>()
{
private
Group
oldGroup
;
public
void
changed
(
DiagramViewModel
source
)
{
if
(
oldGroup
!=
null
)
{
oldGroup
.
getChangedEvent
().
removeListener
(
groupContentChangedListener
);
}
group
.
getChangedEvent
().
addListener
(
groupContentChangedListener
);
oldGroup
=
group
;
}
};
private
final
ChangedListener
<
Group
>
groupContentChangedListener
=
new
ChangedListener
<
Group
>()
{
public
void
changed
(
Group
source
)
{
assert
source
==
group
;
setPositions
(
calculateStringList
(
source
));
setSelectedNodes
(
selectedNodes
);
}
};
public
ChangedEvent
<
DiagramViewModel
>
getDiagramChangedEvent
()
{
public
ChangedEvent
<
DiagramViewModel
>
getDiagramChangedEvent
()
{
return
diagramChangedEvent
;
return
diagramChangedEvent
;
}
}
...
@@ -268,7 +302,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
...
@@ -268,7 +302,10 @@ public class DiagramViewModel extends RangeSliderModel implements ChangedListene
}
}
public
InputGraph
getSecondGraph
()
{
public
InputGraph
getSecondGraph
()
{
List
<
InputGraph
>
graphs
=
group
.
getGraphs
();
if
(
graphs
.
size
()
>=
getSecondPosition
())
return
group
.
getGraphs
().
get
(
getSecondPosition
());
return
group
.
getGraphs
().
get
(
getSecondPosition
());
return
getFirstGraph
();
}
}
public
void
selectGraph
(
InputGraph
g
)
{
public
void
selectGraph
(
InputGraph
g
)
{
...
...
src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/FindPanel.java
浏览文件 @
42108633
...
@@ -67,7 +67,7 @@ class FindPanel extends JPanel implements KeyListener {
...
@@ -67,7 +67,7 @@ class FindPanel extends JPanel implements KeyListener {
for
(
Figure
f
:
figures
)
{
for
(
Figure
f
:
figures
)
{
Properties
prop
=
f
.
getProperties
();
Properties
prop
=
f
.
getProperties
();
for
(
Property
p
:
prop
.
getProperties
()
)
{
for
(
Property
p
:
prop
)
{
if
(!
propertyNames
.
contains
(
p
.
getName
()))
{
if
(!
propertyNames
.
contains
(
p
.
getName
()))
{
propertyNames
.
add
(
p
.
getName
());
propertyNames
.
add
(
p
.
getName
());
}
}
...
...
src/share/tools/IdealGraphVisualizer/nbproject/platform.properties
浏览文件 @
42108633
# Deprecated since 5.0u1; for compatibility with 5.0:
# Deprecated since 5.0u1; for compatibility with 5.0:
disabled.clusters
=
\
disabled.clusters
=
\
apisupport1,
\
apisupport1,
\
gsf1,
\
harness,
\
harness,
\
ide
8
,
\
ide
9
,
\
java
1
,
\
java
2
,
\
nb6.
0
,
\
nb6.
1
,
\
profiler
2
profiler
3
disabled.modules
=
\
disabled.modules
=
\
org.netbeans.core.execution,
\
org.netbeans.core.execution,
\
org.netbeans.core.multiview,
\
org.netbeans.core.multiview,
\
org.netbeans.core.output2,
\
org.netbeans.core.output2,
\
org.netbeans.modules.applemenu,
\
org.netbeans.modules.autoupdate.services,
\
org.netbeans.modules.autoupdate.services,
\
org.netbeans.modules.autoupdate.ui,
\
org.netbeans.modules.autoupdate.ui,
\
org.netbeans.modules.core.kit,
\
org.netbeans.modules.core.kit,
\
...
@@ -24,6 +24,6 @@ disabled.modules=\
...
@@ -24,6 +24,6 @@ disabled.modules=\
org.openide.execution,
\
org.openide.execution,
\
org.openide.util.enumerations
org.openide.util.enumerations
enabled.clusters
=
\
enabled.clusters
=
\
platform
7
platform
8
nbjdk.active
=
default
nbjdk.active
=
default
nbplatform.active
=
default
nbplatform.active
=
default
src/share/tools/IdealGraphVisualizer/nbproject/project.properties
浏览文件 @
42108633
...
@@ -15,7 +15,6 @@ modules=\
...
@@ -15,7 +15,6 @@ modules=\
${project.com.sun.hotspot.igv.difference}:
\
${project.com.sun.hotspot.igv.difference}:
\
${project.com.sun.hotspot.igv.settings}:
\
${project.com.sun.hotspot.igv.settings}:
\
${project.com.sun.hotspot.igv.util}:
\
${project.com.sun.hotspot.igv.util}:
\
${project.com.sun.hotspot.igv.rhino}:
\
${project.com.sun.hotspot.igv.svg}:
\
${project.com.sun.hotspot.igv.svg}:
\
${project.com.sun.hotspot.connection}:
\
${project.com.sun.hotspot.connection}:
\
${project.com.sun.hotspot.igv.servercompilerscheduler}:
\
${project.com.sun.hotspot.igv.servercompilerscheduler}:
\
...
@@ -31,10 +30,10 @@ project.com.sun.hotspot.igv.filterwindow=FilterWindow
...
@@ -31,10 +30,10 @@ project.com.sun.hotspot.igv.filterwindow=FilterWindow
project.com.sun.hotspot.igv.graph
=
Graph
project.com.sun.hotspot.igv.graph
=
Graph
project.com.sun.hotspot.igv.hierarchicallayout
=
HierarchicalLayout
project.com.sun.hotspot.igv.hierarchicallayout
=
HierarchicalLayout
project.com.sun.hotspot.igv.layout
=
Layout
project.com.sun.hotspot.igv.layout
=
Layout
project.com.sun.hotspot.igv.rhino
=
RhinoScriptEngineProxy
project.com.sun.hotspot.igv.servercompilerscheduler
=
ServerCompiler
project.com.sun.hotspot.igv.servercompilerscheduler
=
ServerCompiler
project.com.sun.hotspot.igv.settings
=
Settings
project.com.sun.hotspot.igv.settings
=
Settings
project.com.sun.hotspot.igv.svg
=
BatikSVGProxy
project.com.sun.hotspot.igv.svg
=
BatikSVGProxy
project.com.sun.hotspot.igv.view
=
View
project.com.sun.hotspot.igv.view
=
View
project.com.sun.hotspot.igv.util
=
Util
project.com.sun.hotspot.igv.util
=
Util
run.args
=
-server -J-Xms64m -J-Xmx512m -J-da
run.args
=
-J-server -J-Xms64m -J-Xmx1g -J-da
run.args.extra
=
-J-server -J-Xms64m -J-Xmx1g -J-da
src/share/vm/adlc/adlparse.cpp
浏览文件 @
42108633
...
@@ -33,7 +33,6 @@ ADLParser::ADLParser(FileBuff& buffer, ArchDesc& archDesc)
...
@@ -33,7 +33,6 @@ ADLParser::ADLParser(FileBuff& buffer, ArchDesc& archDesc)
_globalNames
(
archDesc
.
globalNames
())
{
_globalNames
(
archDesc
.
globalNames
())
{
_AD
.
_syntax_errs
=
_AD
.
_semantic_errs
=
0
;
// No errors so far this file
_AD
.
_syntax_errs
=
_AD
.
_semantic_errs
=
0
;
// No errors so far this file
_AD
.
_warnings
=
0
;
// No warnings either
_AD
.
_warnings
=
0
;
// No warnings either
_linenum
=
0
;
// Will increment to first line
_curline
=
_ptr
=
NULL
;
// No pointers into buffer yet
_curline
=
_ptr
=
NULL
;
// No pointers into buffer yet
_preproc_depth
=
0
;
_preproc_depth
=
0
;
...
@@ -76,7 +75,7 @@ ADLParser::~ADLParser() {
...
@@ -76,7 +75,7 @@ ADLParser::~ADLParser() {
}
}
if
(
!
_AD
.
_quiet_mode
)
if
(
!
_AD
.
_quiet_mode
)
fprintf
(
stderr
,
"-----------------------------------------------------------------------------
\n
"
);
fprintf
(
stderr
,
"-----------------------------------------------------------------------------
\n
"
);
_AD
.
_TotalLines
+=
_linenum
-
1
;
// -1 for overshoot in "nextline" routine
_AD
.
_TotalLines
+=
linenum
()
-
1
;
// -1 for overshoot in "nextline" routine
// Write out information we have stored
// Write out information we have stored
// // UNIXism == fsync(stderr);
// // UNIXism == fsync(stderr);
...
@@ -148,7 +147,7 @@ void ADLParser::instr_parse(void) {
...
@@ -148,7 +147,7 @@ void ADLParser::instr_parse(void) {
if
(
(
ident
=
get_unique_ident
(
_globalNames
,
"instruction"
))
==
NULL
)
if
(
(
ident
=
get_unique_ident
(
_globalNames
,
"instruction"
))
==
NULL
)
return
;
return
;
instr
=
new
InstructForm
(
ident
);
// Create new instruction form
instr
=
new
InstructForm
(
ident
);
// Create new instruction form
instr
->
_linenum
=
_linenum
;
instr
->
_linenum
=
linenum
()
;
_globalNames
.
Insert
(
ident
,
instr
);
// Add name to the name table
_globalNames
.
Insert
(
ident
,
instr
);
// Add name to the name table
// Debugging Stuff
// Debugging Stuff
if
(
_AD
.
_adl_debug
>
1
)
if
(
_AD
.
_adl_debug
>
1
)
...
@@ -404,7 +403,7 @@ void ADLParser::oper_parse(void) {
...
@@ -404,7 +403,7 @@ void ADLParser::oper_parse(void) {
if
(
(
ident
=
get_unique_ident
(
_globalNames
,
"operand"
))
==
NULL
)
if
(
(
ident
=
get_unique_ident
(
_globalNames
,
"operand"
))
==
NULL
)
return
;
return
;
oper
=
new
OperandForm
(
ident
);
// Create new operand form
oper
=
new
OperandForm
(
ident
);
// Create new operand form
oper
->
_linenum
=
_linenum
;
oper
->
_linenum
=
linenum
()
;
_globalNames
.
Insert
(
ident
,
oper
);
// Add name to the name table
_globalNames
.
Insert
(
ident
,
oper
);
// Add name to the name table
// Debugging Stuff
// Debugging Stuff
...
@@ -774,7 +773,7 @@ void ADLParser::reg_parse(void) {
...
@@ -774,7 +773,7 @@ void ADLParser::reg_parse(void) {
// Create the RegisterForm for the architecture description.
// Create the RegisterForm for the architecture description.
RegisterForm
*
regBlock
=
new
RegisterForm
();
// Build new Source object
RegisterForm
*
regBlock
=
new
RegisterForm
();
// Build new Source object
regBlock
->
_linenum
=
_linenum
;
regBlock
->
_linenum
=
linenum
()
;
_AD
.
addForm
(
regBlock
);
_AD
.
addForm
(
regBlock
);
skipws
();
// Skip leading whitespace
skipws
();
// Skip leading whitespace
...
@@ -847,7 +846,7 @@ void ADLParser::enc_class_parse(void) {
...
@@ -847,7 +846,7 @@ void ADLParser::enc_class_parse(void) {
}
}
EncClass
*
encoding
=
_AD
.
_encode
->
add_EncClass
(
ec_name
);
EncClass
*
encoding
=
_AD
.
_encode
->
add_EncClass
(
ec_name
);
encoding
->
_linenum
=
_linenum
;
encoding
->
_linenum
=
linenum
()
;
skipws
();
// Skip leading whitespace
skipws
();
// Skip leading whitespace
// Check for optional parameter list
// Check for optional parameter list
...
@@ -905,7 +904,7 @@ void ADLParser::enc_class_parse_block(EncClass* encoding, char* ec_name) {
...
@@ -905,7 +904,7 @@ void ADLParser::enc_class_parse_block(EncClass* encoding, char* ec_name) {
// Prepend location descriptor, for debugging; cf. ADLParser::find_cpp_block
// Prepend location descriptor, for debugging; cf. ADLParser::find_cpp_block
if
(
_AD
.
_adlocation_debug
)
{
if
(
_AD
.
_adlocation_debug
)
{
const
char
*
file
=
_AD
.
_ADL_file
.
_name
;
const
char
*
file
=
_AD
.
_ADL_file
.
_name
;
int
line
=
_linenum
;
int
line
=
linenum
()
;
char
*
location
=
(
char
*
)
malloc
(
strlen
(
file
)
+
100
);
char
*
location
=
(
char
*
)
malloc
(
strlen
(
file
)
+
100
);
sprintf
(
location
,
"#line %d
\"
%s
\"\n
"
,
line
,
file
);
sprintf
(
location
,
"#line %d
\"
%s
\"\n
"
,
line
,
file
);
encoding
->
add_code
(
location
);
encoding
->
add_code
(
location
);
...
@@ -2776,7 +2775,7 @@ InsEncode *ADLParser::ins_encode_parse_block(InstructForm &inst) {
...
@@ -2776,7 +2775,7 @@ InsEncode *ADLParser::ins_encode_parse_block(InstructForm &inst) {
assert
(
_AD
.
_encode
->
encClass
(
ec_name
)
==
NULL
,
"shouldn't already exist"
);
assert
(
_AD
.
_encode
->
encClass
(
ec_name
)
==
NULL
,
"shouldn't already exist"
);
EncClass
*
encoding
=
_AD
.
_encode
->
add_EncClass
(
ec_name
);
EncClass
*
encoding
=
_AD
.
_encode
->
add_EncClass
(
ec_name
);
encoding
->
_linenum
=
_linenum
;
encoding
->
_linenum
=
linenum
()
;
// synthesize the arguments list for the enc_class from the
// synthesize the arguments list for the enc_class from the
// arguments to the instruct definition.
// arguments to the instruct definition.
...
@@ -2852,7 +2851,7 @@ InsEncode *ADLParser::ins_encode_parse(InstructForm &inst) {
...
@@ -2852,7 +2851,7 @@ InsEncode *ADLParser::ins_encode_parse(InstructForm &inst) {
skipws
();
skipws
();
InsEncode
*
encrule
=
new
InsEncode
();
// Encode class for instruction
InsEncode
*
encrule
=
new
InsEncode
();
// Encode class for instruction
encrule
->
_linenum
=
_linenum
;
encrule
->
_linenum
=
linenum
()
;
char
*
ec_name
=
NULL
;
// String representation of encode rule
char
*
ec_name
=
NULL
;
// String representation of encode rule
// identifier is optional.
// identifier is optional.
while
(
_curchar
!=
')'
)
{
while
(
_curchar
!=
')'
)
{
...
@@ -3203,6 +3202,12 @@ Interface *ADLParser::cond_interface_parse(void) {
...
@@ -3203,6 +3202,12 @@ Interface *ADLParser::cond_interface_parse(void) {
char
*
greater_equal
;
char
*
greater_equal
;
char
*
less_equal
;
char
*
less_equal
;
char
*
greater
;
char
*
greater
;
const
char
*
equal_format
=
"eq"
;
const
char
*
not_equal_format
=
"ne"
;
const
char
*
less_format
=
"lt"
;
const
char
*
greater_equal_format
=
"ge"
;
const
char
*
less_equal_format
=
"le"
;
const
char
*
greater_format
=
"gt"
;
if
(
_curchar
!=
'%'
)
{
if
(
_curchar
!=
'%'
)
{
parse_err
(
SYNERR
,
"Missing '%{' for 'cond_interface' block.
\n
"
);
parse_err
(
SYNERR
,
"Missing '%{' for 'cond_interface' block.
\n
"
);
...
@@ -3222,22 +3227,22 @@ Interface *ADLParser::cond_interface_parse(void) {
...
@@ -3222,22 +3227,22 @@ Interface *ADLParser::cond_interface_parse(void) {
return
NULL
;
return
NULL
;
}
}
if
(
strcmp
(
field
,
"equal"
)
==
0
)
{
if
(
strcmp
(
field
,
"equal"
)
==
0
)
{
equal
=
interface_field_parse
();
equal
=
interface_field_parse
(
&
equal_format
);
}
}
else
if
(
strcmp
(
field
,
"not_equal"
)
==
0
)
{
else
if
(
strcmp
(
field
,
"not_equal"
)
==
0
)
{
not_equal
=
interface_field_parse
();
not_equal
=
interface_field_parse
(
&
not_equal_format
);
}
}
else
if
(
strcmp
(
field
,
"less"
)
==
0
)
{
else
if
(
strcmp
(
field
,
"less"
)
==
0
)
{
less
=
interface_field_parse
();
less
=
interface_field_parse
(
&
less_format
);
}
}
else
if
(
strcmp
(
field
,
"greater_equal"
)
==
0
)
{
else
if
(
strcmp
(
field
,
"greater_equal"
)
==
0
)
{
greater_equal
=
interface_field_parse
();
greater_equal
=
interface_field_parse
(
&
greater_equal_format
);
}
}
else
if
(
strcmp
(
field
,
"less_equal"
)
==
0
)
{
else
if
(
strcmp
(
field
,
"less_equal"
)
==
0
)
{
less_equal
=
interface_field_parse
();
less_equal
=
interface_field_parse
(
&
less_equal_format
);
}
}
else
if
(
strcmp
(
field
,
"greater"
)
==
0
)
{
else
if
(
strcmp
(
field
,
"greater"
)
==
0
)
{
greater
=
interface_field_parse
();
greater
=
interface_field_parse
(
&
greater_format
);
}
}
else
{
else
{
parse_err
(
SYNERR
,
"Expected keyword, base|index|scale|disp, or '%}' ending interface.
\n
"
);
parse_err
(
SYNERR
,
"Expected keyword, base|index|scale|disp, or '%}' ending interface.
\n
"
);
...
@@ -3252,14 +3257,18 @@ Interface *ADLParser::cond_interface_parse(void) {
...
@@ -3252,14 +3257,18 @@ Interface *ADLParser::cond_interface_parse(void) {
next_char
();
// Skip '}'
next_char
();
// Skip '}'
// Construct desired object and return
// Construct desired object and return
Interface
*
inter
=
new
CondInterface
(
equal
,
not_equal
,
less
,
greater_equal
,
Interface
*
inter
=
new
CondInterface
(
equal
,
equal_format
,
less_equal
,
greater
);
not_equal
,
not_equal_format
,
less
,
less_format
,
greater_equal
,
greater_equal_format
,
less_equal
,
less_equal_format
,
greater
,
greater_format
);
return
inter
;
return
inter
;
}
}
//------------------------------interface_field_parse--------------------------
//------------------------------interface_field_parse--------------------------
char
*
ADLParser
::
interface_field_parse
(
void
)
{
char
*
ADLParser
::
interface_field_parse
(
const
char
**
format
)
{
char
*
iface_field
=
NULL
;
char
*
iface_field
=
NULL
;
// Get interface field
// Get interface field
...
@@ -3280,6 +3289,32 @@ char *ADLParser::interface_field_parse(void) {
...
@@ -3280,6 +3289,32 @@ char *ADLParser::interface_field_parse(void) {
return
NULL
;
return
NULL
;
}
}
skipws
();
skipws
();
if
(
format
!=
NULL
&&
_curchar
==
','
)
{
next_char
();
skipws
();
if
(
_curchar
!=
'"'
)
{
parse_err
(
SYNERR
,
"Missing '
\"
' in field format .
\n
"
);
return
NULL
;
}
next_char
();
char
*
start
=
_ptr
;
// Record start of the next string
while
((
_curchar
!=
'"'
)
&&
(
_curchar
!=
'%'
)
&&
(
_curchar
!=
'\n'
))
{
if
(
_curchar
==
'\\'
)
next_char
();
// superquote
if
(
_curchar
==
'\n'
)
parse_err
(
SYNERR
,
"newline in string"
);
// unimplemented!
next_char
();
}
if
(
_curchar
!=
'"'
)
{
parse_err
(
SYNERR
,
"Missing '
\"
' at end of field format .
\n
"
);
return
NULL
;
}
// If a string was found, terminate it and record in FormatRule
if
(
start
!=
_ptr
)
{
*
_ptr
=
'\0'
;
// Terminate the string
*
format
=
start
;
}
next_char
();
skipws
();
}
if
(
_curchar
!=
')'
)
{
if
(
_curchar
!=
')'
)
{
parse_err
(
SYNERR
,
"Missing ')' after interface field.
\n
"
);
parse_err
(
SYNERR
,
"Missing ')' after interface field.
\n
"
);
return
NULL
;
return
NULL
;
...
@@ -3342,6 +3377,12 @@ FormatRule* ADLParser::format_parse(void) {
...
@@ -3342,6 +3377,12 @@ FormatRule* ADLParser::format_parse(void) {
next_char
();
// Move past the '{'
next_char
();
// Move past the '{'
skipws
();
skipws
();
if
(
_curchar
==
'$'
)
{
char
*
ident
=
get_rep_var_ident
();
if
(
strcmp
(
ident
,
"$$template"
)
==
0
)
return
template_parse
();
parse_err
(
SYNERR
,
"Unknown
\"
%s
\"
directive in format"
,
ident
);
return
NULL
;
}
// Check for the opening '"' inside the format description
// Check for the opening '"' inside the format description
if
(
_curchar
==
'"'
)
{
if
(
_curchar
==
'"'
)
{
next_char
();
// Move past the initial '"'
next_char
();
// Move past the initial '"'
...
@@ -3433,6 +3474,131 @@ FormatRule* ADLParser::format_parse(void) {
...
@@ -3433,6 +3474,131 @@ FormatRule* ADLParser::format_parse(void) {
}
}
//------------------------------template_parse-----------------------------------
FormatRule
*
ADLParser
::
template_parse
(
void
)
{
char
*
desc
=
NULL
;
FormatRule
*
format
=
(
new
FormatRule
(
desc
));
skipws
();
while
(
(
_curchar
!=
'%'
)
&&
(
*
(
_ptr
+
1
)
!=
'}'
)
)
{
// (1)
// Check if there is a string to pass through to output
char
*
start
=
_ptr
;
// Record start of the next string
while
((
_curchar
!=
'$'
)
&&
((
_curchar
!=
'%'
)
||
(
*
(
_ptr
+
1
)
!=
'}'
))
)
{
// If at the start of a comment, skip past it
if
(
(
_curchar
==
'/'
)
&&
((
*
(
_ptr
+
1
)
==
'/'
)
||
(
*
(
_ptr
+
1
)
==
'*'
))
)
{
skipws_no_preproc
();
}
else
{
// ELSE advance to the next character, or start of the next line
next_char_or_line
();
}
}
// If a string was found, terminate it and record in EncClass
if
(
start
!=
_ptr
)
{
*
_ptr
=
'\0'
;
// Terminate the string
// Add flag to _strings list indicating we should check _rep_vars
format
->
_strings
.
addName
(
NameList
::
_signal2
);
format
->
_strings
.
addName
(
start
);
}
// (2)
// If we are at a replacement variable,
// copy it and record in EncClass
if
(
_curchar
==
'$'
)
{
// Found replacement Variable
char
*
rep_var
=
get_rep_var_ident_dup
();
if
(
strcmp
(
rep_var
,
"$emit"
)
==
0
)
{
// switch to normal format parsing
next_char
();
next_char
();
skipws
();
// Check for the opening '"' inside the format description
if
(
_curchar
==
'"'
)
{
next_char
();
// Move past the initial '"'
if
(
_curchar
==
'"'
)
{
// Handle empty format string case
*
_ptr
=
'\0'
;
// Terminate empty string
format
->
_strings
.
addName
(
_ptr
);
}
// Collect the parts of the format description
// (1) strings that are passed through to tty->print
// (2) replacement/substitution variable, preceeded by a '$'
// (3) multi-token ANSIY C style strings
while
(
true
)
{
if
(
_curchar
==
'%'
||
_curchar
==
'\n'
)
{
parse_err
(
SYNERR
,
"missing '
\"
' at end of format block"
);
return
NULL
;
}
// (1)
// Check if there is a string to pass through to output
char
*
start
=
_ptr
;
// Record start of the next string
while
((
_curchar
!=
'$'
)
&&
(
_curchar
!=
'"'
)
&&
(
_curchar
!=
'%'
)
&&
(
_curchar
!=
'\n'
))
{
if
(
_curchar
==
'\\'
)
next_char
();
// superquote
if
(
_curchar
==
'\n'
)
parse_err
(
SYNERR
,
"newline in string"
);
// unimplemented!
next_char
();
}
// If a string was found, terminate it and record in FormatRule
if
(
start
!=
_ptr
)
{
*
_ptr
=
'\0'
;
// Terminate the string
format
->
_strings
.
addName
(
start
);
}
// (2)
// If we are at a replacement variable,
// copy it and record in FormatRule
if
(
_curchar
==
'$'
)
{
next_char
();
// Move past the '$'
char
*
rep_var
=
get_ident
();
// Nil terminate the variable name
rep_var
=
strdup
(
rep_var
);
// Copy the string
*
_ptr
=
_curchar
;
// and replace Nil with original character
format
->
_rep_vars
.
addName
(
rep_var
);
// Add flag to _strings list indicating we should check _rep_vars
format
->
_strings
.
addName
(
NameList
::
_signal
);
}
// (3)
// Allow very long strings to be broken up,
// using the ANSI C syntax "foo\n" <newline> "bar"
if
(
_curchar
==
'"'
)
{
next_char
();
// Move past the '"'
skipws
();
// Skip white space before next string token
if
(
_curchar
!=
'"'
)
{
break
;
}
else
{
// Found one. Skip both " and the whitespace in between.
next_char
();
}
}
}
// end while part of format description
}
}
else
{
// Add flag to _strings list indicating we should check _rep_vars
format
->
_rep_vars
.
addName
(
rep_var
);
// Add flag to _strings list indicating we should check _rep_vars
format
->
_strings
.
addName
(
NameList
::
_signal3
);
}
}
// end while part of format description
}
skipws
();
// Past format description, at '%'
if
(
_curchar
!=
'%'
||
*
(
_ptr
+
1
)
!=
'}'
)
{
parse_err
(
SYNERR
,
"missing '%}' at end of format block"
);
return
NULL
;
}
next_char
();
// Move past the '%'
next_char
();
// Move past the '}'
// Debug Stuff
if
(
_AD
.
_adl_debug
>
1
)
fprintf
(
stderr
,
"Format Rule: %s
\n
"
,
desc
);
skipws
();
return
format
;
}
//------------------------------effect_parse-----------------------------------
//------------------------------effect_parse-----------------------------------
void
ADLParser
::
effect_parse
(
InstructForm
*
instr
)
{
void
ADLParser
::
effect_parse
(
InstructForm
*
instr
)
{
char
*
desc
=
NULL
;
char
*
desc
=
NULL
;
...
@@ -3777,7 +3943,7 @@ char* ADLParser::find_cpp_block(const char* description) {
...
@@ -3777,7 +3943,7 @@ char* ADLParser::find_cpp_block(const char* description) {
skipws_no_preproc
();
// Skip leading whitespace
skipws_no_preproc
();
// Skip leading whitespace
cppBlock
=
_ptr
;
// Point to start of expression
cppBlock
=
_ptr
;
// Point to start of expression
const
char
*
file
=
_AD
.
_ADL_file
.
_name
;
const
char
*
file
=
_AD
.
_ADL_file
.
_name
;
int
line
=
_linenum
;
int
line
=
linenum
()
;
next
=
_ptr
+
1
;
next
=
_ptr
+
1
;
while
(((
_curchar
!=
'%'
)
||
(
*
next
!=
'}'
))
&&
(
_curchar
!=
'\0'
))
{
while
(((
_curchar
!=
'%'
)
||
(
*
next
!=
'}'
))
&&
(
_curchar
!=
'\0'
))
{
next_char_or_line
();
next_char_or_line
();
...
@@ -4297,11 +4463,11 @@ void ADLParser::parse_err(int flag, const char *fmt, ...) {
...
@@ -4297,11 +4463,11 @@ void ADLParser::parse_err(int flag, const char *fmt, ...) {
va_start
(
args
,
fmt
);
va_start
(
args
,
fmt
);
if
(
flag
==
1
)
if
(
flag
==
1
)
_AD
.
_syntax_errs
+=
_AD
.
emit_msg
(
0
,
flag
,
_linenum
,
fmt
,
args
);
_AD
.
_syntax_errs
+=
_AD
.
emit_msg
(
0
,
flag
,
linenum
()
,
fmt
,
args
);
else
if
(
flag
==
2
)
else
if
(
flag
==
2
)
_AD
.
_semantic_errs
+=
_AD
.
emit_msg
(
0
,
flag
,
_linenum
,
fmt
,
args
);
_AD
.
_semantic_errs
+=
_AD
.
emit_msg
(
0
,
flag
,
linenum
()
,
fmt
,
args
);
else
else
_AD
.
_warnings
+=
_AD
.
emit_msg
(
0
,
flag
,
_linenum
,
fmt
,
args
);
_AD
.
_warnings
+=
_AD
.
emit_msg
(
0
,
flag
,
linenum
()
,
fmt
,
args
);
int
error_char
=
_curchar
;
int
error_char
=
_curchar
;
char
*
error_ptr
=
_ptr
+
1
;
char
*
error_ptr
=
_ptr
+
1
;
...
@@ -4515,7 +4681,7 @@ void ADLParser::next_char_or_line() {
...
@@ -4515,7 +4681,7 @@ void ADLParser::next_char_or_line() {
//---------------------------next_line-----------------------------------------
//---------------------------next_line-----------------------------------------
void
ADLParser
::
next_line
()
{
void
ADLParser
::
next_line
()
{
_curline
=
_buf
.
get_line
();
_linenum
++
;
_curline
=
_buf
.
get_line
();
}
}
//-------------------------is_literal_constant---------------------------------
//-------------------------is_literal_constant---------------------------------
...
...
src/share/vm/adlc/adlparse.hpp
浏览文件 @
42108633
...
@@ -70,7 +70,6 @@ class ADLParser {
...
@@ -70,7 +70,6 @@ class ADLParser {
protected:
protected:
char
*
_curline
;
// Start of current line
char
*
_curline
;
// Start of current line
char
*
_ptr
;
// Pointer into current location in File Buffer
char
*
_ptr
;
// Pointer into current location in File Buffer
int
_linenum
;
// Count of line numbers seen so far
char
_curchar
;
// Current character from buffer
char
_curchar
;
// Current character from buffer
FormDict
&
_globalNames
;
// Global names
FormDict
&
_globalNames
;
// Global names
...
@@ -160,9 +159,10 @@ protected:
...
@@ -160,9 +159,10 @@ protected:
Interface
*
interface_parse
();
// Parse operand interface rule
Interface
*
interface_parse
();
// Parse operand interface rule
Interface
*
mem_interface_parse
();
// Parse memory interface rule
Interface
*
mem_interface_parse
();
// Parse memory interface rule
Interface
*
cond_interface_parse
();
// Parse conditional interface rule
Interface
*
cond_interface_parse
();
// Parse conditional interface rule
char
*
interface_field_parse
();
// Parse field contents
char
*
interface_field_parse
(
const
char
**
format
=
NULL
);
// Parse field contents
FormatRule
*
format_parse
(
void
);
// Parse format rule
FormatRule
*
format_parse
(
void
);
// Parse format rule
FormatRule
*
template_parse
(
void
);
// Parse format rule
void
effect_parse
(
InstructForm
*
instr
);
// Parse effect rule
void
effect_parse
(
InstructForm
*
instr
);
// Parse effect rule
ExpandRule
*
expand_parse
(
InstructForm
*
instr
);
// Parse expand rule
ExpandRule
*
expand_parse
(
InstructForm
*
instr
);
// Parse expand rule
RewriteRule
*
rewrite_parse
(
void
);
// Parse rewrite rule
RewriteRule
*
rewrite_parse
(
void
);
// Parse rewrite rule
...
@@ -263,7 +263,7 @@ public:
...
@@ -263,7 +263,7 @@ public:
void
parse
(
void
);
// Do the parsing & build forms lists
void
parse
(
void
);
// Do the parsing & build forms lists
int
getlines
(
)
{
return
_linenum
;
}
int
linenum
()
{
return
_buf
.
linenum
()
;
}
static
bool
is_literal_constant
(
const
char
*
hex_string
);
static
bool
is_literal_constant
(
const
char
*
hex_string
);
static
bool
is_hex_digit
(
char
digit
);
static
bool
is_hex_digit
(
char
digit
);
...
...
src/share/vm/adlc/filebuff.cpp
浏览文件 @
42108633
...
@@ -41,6 +41,7 @@ FileBuff::FileBuff( BufferedFile *fptr, ArchDesc& archDesc) : _fp(fptr), _AD(arc
...
@@ -41,6 +41,7 @@ FileBuff::FileBuff( BufferedFile *fptr, ArchDesc& archDesc) : _fp(fptr), _AD(arc
exit
(
1
);
// Exit on seek error
exit
(
1
);
// Exit on seek error
}
}
_filepos
=
ftell
(
_fp
->
_fp
);
// Reset current file position
_filepos
=
ftell
(
_fp
->
_fp
);
// Reset current file position
_linenum
=
0
;
_bigbuf
=
new
char
[
_bufferSize
];
// Create buffer to hold text for parser
_bigbuf
=
new
char
[
_bufferSize
];
// Create buffer to hold text for parser
if
(
!
_bigbuf
)
{
if
(
!
_bigbuf
)
{
...
@@ -76,6 +77,7 @@ char *FileBuff::get_line(void) {
...
@@ -76,6 +77,7 @@ char *FileBuff::get_line(void) {
// Check for end of file & return NULL
// Check for end of file & return NULL
if
(
_bufeol
>=
_bufmax
)
return
NULL
;
if
(
_bufeol
>=
_bufmax
)
return
NULL
;
_linenum
++
;
retval
=
++
_bufeol
;
// return character following end of previous line
retval
=
++
_bufeol
;
// return character following end of previous line
if
(
*
retval
==
'\0'
)
return
NULL
;
// Check for EOF sentinal
if
(
*
retval
==
'\0'
)
return
NULL
;
// Check for EOF sentinal
// Search for newline character which must end each line
// Search for newline character which must end each line
...
...
src/share/vm/adlc/filebuff.hpp
浏览文件 @
42108633
...
@@ -51,6 +51,7 @@ class FileBuff {
...
@@ -51,6 +51,7 @@ class FileBuff {
int
_err
;
// Error flag for file seek/read operations
int
_err
;
// Error flag for file seek/read operations
long
_filepos
;
// Current offset from start of file
long
_filepos
;
// Current offset from start of file
int
_linenum
;
ArchDesc
&
_AD
;
// Reference to Architecture Description
ArchDesc
&
_AD
;
// Reference to Architecture Description
...
@@ -66,6 +67,7 @@ class FileBuff {
...
@@ -66,6 +67,7 @@ class FileBuff {
// This returns a pointer to the start of the current line in the buffer,
// This returns a pointer to the start of the current line in the buffer,
// and increments bufeol and filepos to point at the end of that line.
// and increments bufeol and filepos to point at the end of that line.
char
*
get_line
(
void
);
char
*
get_line
(
void
);
int
linenum
()
const
{
return
_linenum
;
}
// This converts a pointer into the buffer to a file offset. It only works
// This converts a pointer into the buffer to a file offset. It only works
// when the pointer is valid (i.e. just obtained from getline()).
// when the pointer is valid (i.e. just obtained from getline()).
...
...
src/share/vm/adlc/forms.cpp
浏览文件 @
42108633
...
@@ -35,6 +35,8 @@ Arena *Form::generate_arena() {
...
@@ -35,6 +35,8 @@ Arena *Form::generate_arena() {
//------------------------------NameList---------------------------------------
//------------------------------NameList---------------------------------------
// reserved user-defined string
// reserved user-defined string
const
char
*
NameList
::
_signal
=
"$$SIGNAL$$"
;
const
char
*
NameList
::
_signal
=
"$$SIGNAL$$"
;
const
char
*
NameList
::
_signal2
=
"$$SIGNAL2$$"
;
const
char
*
NameList
::
_signal3
=
"$$SIGNAL3$$"
;
// Constructor and Destructor
// Constructor and Destructor
NameList
::
NameList
()
:
_cur
(
0
),
_max
(
4
),
_iter
(
0
),
_justReset
(
true
)
{
NameList
::
NameList
()
:
_cur
(
0
),
_max
(
4
),
_iter
(
0
),
_justReset
(
true
)
{
...
...
src/share/vm/adlc/forms.hpp
浏览文件 @
42108633
...
@@ -329,6 +329,8 @@ protected:
...
@@ -329,6 +329,8 @@ protected:
public:
public:
static
const
char
*
_signal
;
// reserved user-defined string
static
const
char
*
_signal
;
// reserved user-defined string
static
const
char
*
_signal2
;
// reserved user-defined string
static
const
char
*
_signal3
;
// reserved user-defined string
enum
{
Not_in_list
=
-
1
};
enum
{
Not_in_list
=
-
1
};
void
addName
(
const
char
*
name
);
void
addName
(
const
char
*
name
);
...
...
src/share/vm/adlc/formssel.cpp
浏览文件 @
42108633
...
@@ -1574,10 +1574,10 @@ Opcode::opcode_type Opcode::as_opcode_type(const char *param) {
...
@@ -1574,10 +1574,10 @@ Opcode::opcode_type Opcode::as_opcode_type(const char *param) {
return
Opcode
::
NOT_AN_OPCODE
;
return
Opcode
::
NOT_AN_OPCODE
;
}
}
void
Opcode
::
print_opcode
(
FILE
*
fp
,
Opcode
::
opcode_type
desired_opcode
)
{
bool
Opcode
::
print_opcode
(
FILE
*
fp
,
Opcode
::
opcode_type
desired_opcode
)
{
// Default values previously provided by MachNode::primary()...
// Default values previously provided by MachNode::primary()...
const
char
*
description
=
"default_opcode()"
;
const
char
*
description
=
NULL
;
const
char
*
value
=
"-1"
;
const
char
*
value
=
NULL
;
// Check if user provided any opcode definitions
// Check if user provided any opcode definitions
if
(
this
!=
NULL
)
{
if
(
this
!=
NULL
)
{
// Update 'value' if user provided a definition in the instruction
// Update 'value' if user provided a definition in the instruction
...
@@ -1599,7 +1599,10 @@ void Opcode::print_opcode(FILE *fp, Opcode::opcode_type desired_opcode) {
...
@@ -1599,7 +1599,10 @@ void Opcode::print_opcode(FILE *fp, Opcode::opcode_type desired_opcode) {
break
;
break
;
}
}
}
}
if
(
value
!=
NULL
)
{
fprintf
(
fp
,
"(%s /*%s*/)"
,
value
,
description
);
fprintf
(
fp
,
"(%s /*%s*/)"
,
value
,
description
);
}
return
value
!=
NULL
;
}
}
void
Opcode
::
dump
()
{
void
Opcode
::
dump
()
{
...
@@ -2610,14 +2613,19 @@ void MemInterface::output(FILE *fp) {
...
@@ -2610,14 +2613,19 @@ void MemInterface::output(FILE *fp) {
}
}
//------------------------------CondInterface----------------------------------
//------------------------------CondInterface----------------------------------
CondInterface
::
CondInterface
(
char
*
equal
,
char
*
not_equal
,
CondInterface
::
CondInterface
(
const
char
*
equal
,
const
char
*
equal_format
,
char
*
less
,
char
*
greater_equal
,
const
char
*
not_equal
,
const
char
*
not_equal_format
,
char
*
less_equal
,
char
*
greater
)
const
char
*
less
,
const
char
*
less_format
,
const
char
*
greater_equal
,
const
char
*
greater_equal_format
,
const
char
*
less_equal
,
const
char
*
less_equal_format
,
const
char
*
greater
,
const
char
*
greater_format
)
:
Interface
(
"COND_INTER"
),
:
Interface
(
"COND_INTER"
),
_equal
(
equal
),
_not_equal
(
not_equal
),
_equal
(
equal
),
_equal_format
(
equal_format
),
_less
(
less
),
_greater_equal
(
greater_equal
),
_not_equal
(
not_equal
),
_not_equal_format
(
not_equal_format
),
_less_equal
(
less_equal
),
_greater
(
greater
)
{
_less
(
less
),
_less_format
(
less_format
),
//
_greater_equal
(
greater_equal
),
_greater_equal_format
(
greater_equal_format
),
_less_equal
(
less_equal
),
_less_equal_format
(
less_equal_format
),
_greater
(
greater
),
_greater_format
(
greater_format
)
{
}
}
CondInterface
::~
CondInterface
()
{
CondInterface
::~
CondInterface
()
{
// not owner of any character arrays
// not owner of any character arrays
...
@@ -3316,7 +3324,7 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
...
@@ -3316,7 +3324,7 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
"Load8B"
,
"Load4B"
,
"Load8C"
,
"Load4C"
,
"Load2C"
,
"Load8S"
,
"Load4S"
,
"Load2S"
,
"Load8B"
,
"Load4B"
,
"Load8C"
,
"Load4C"
,
"Load2C"
,
"Load8S"
,
"Load4S"
,
"Load2S"
,
"LoadRange"
,
"LoadKlass"
,
"LoadNKlass"
,
"LoadL_unaligned"
,
"LoadD_unaligned"
,
"LoadRange"
,
"LoadKlass"
,
"LoadNKlass"
,
"LoadL_unaligned"
,
"LoadD_unaligned"
,
"LoadPLocked"
,
"LoadLLocked"
,
"LoadPLocked"
,
"LoadLLocked"
,
"StorePConditional"
,
"StoreLConditional"
,
"StorePConditional"
,
"Store
IConditional"
,
"Store
LConditional"
,
"CompareAndSwapI"
,
"CompareAndSwapL"
,
"CompareAndSwapP"
,
"CompareAndSwapN"
,
"CompareAndSwapI"
,
"CompareAndSwapL"
,
"CompareAndSwapP"
,
"CompareAndSwapN"
,
"StoreCM"
,
"StoreCM"
,
"ClearArray"
"ClearArray"
...
...
src/share/vm/adlc/formssel.hpp
浏览文件 @
42108633
...
@@ -397,7 +397,7 @@ public:
...
@@ -397,7 +397,7 @@ public:
void
output
(
FILE
*
fp
);
void
output
(
FILE
*
fp
);
// --------------------------- FILE *output_routines
// --------------------------- FILE *output_routines
void
print_opcode
(
FILE
*
fp
,
Opcode
::
opcode_type
desired_opcode
);
bool
print_opcode
(
FILE
*
fp
,
Opcode
::
opcode_type
desired_opcode
);
};
};
//------------------------------InsEncode--------------------------------------
//------------------------------InsEncode--------------------------------------
...
@@ -779,10 +779,20 @@ public:
...
@@ -779,10 +779,20 @@ public:
const
char
*
_greater_equal
;
const
char
*
_greater_equal
;
const
char
*
_less_equal
;
const
char
*
_less_equal
;
const
char
*
_greater
;
const
char
*
_greater
;
const
char
*
_equal_format
;
const
char
*
_not_equal_format
;
const
char
*
_less_format
;
const
char
*
_greater_equal_format
;
const
char
*
_less_equal_format
;
const
char
*
_greater_format
;
// Public Methods
// Public Methods
CondInterface
(
char
*
equal
,
char
*
not_equal
,
char
*
less
,
char
*
greater_equal
,
CondInterface
(
const
char
*
equal
,
const
char
*
equal_format
,
char
*
less_equal
,
char
*
greater
);
const
char
*
not_equal
,
const
char
*
not_equal_format
,
const
char
*
less
,
const
char
*
less_format
,
const
char
*
greater_equal
,
const
char
*
greater_equal_format
,
const
char
*
less_equal
,
const
char
*
less_equal_format
,
const
char
*
greater
,
const
char
*
greater_format
);
~
CondInterface
();
~
CondInterface
();
void
dump
();
void
dump
();
...
...
src/share/vm/adlc/output_c.cpp
浏览文件 @
42108633
...
@@ -1619,6 +1619,7 @@ void ArchDesc::defineExpand(FILE *fp, InstructForm *node) {
...
@@ -1619,6 +1619,7 @@ void ArchDesc::defineExpand(FILE *fp, InstructForm *node) {
}
}
// Iterate over the new instruction's operands
// Iterate over the new instruction's operands
int
prev_pos
=
-
1
;
for
(
expand_instr
->
reset
();
(
opid
=
expand_instr
->
iter
())
!=
NULL
;
)
{
for
(
expand_instr
->
reset
();
(
opid
=
expand_instr
->
iter
())
!=
NULL
;
)
{
// Use 'parameter' at current position in list of new instruction's formals
// Use 'parameter' at current position in list of new instruction's formals
// instead of 'opid' when looking up info internal to new_inst
// instead of 'opid' when looking up info internal to new_inst
...
@@ -1642,6 +1643,18 @@ void ArchDesc::defineExpand(FILE *fp, InstructForm *node) {
...
@@ -1642,6 +1643,18 @@ void ArchDesc::defineExpand(FILE *fp, InstructForm *node) {
// ins = (InstructForm *) _globalNames[new_id];
// ins = (InstructForm *) _globalNames[new_id];
exp_pos
=
node
->
operand_position_format
(
opid
);
exp_pos
=
node
->
operand_position_format
(
opid
);
assert
(
exp_pos
!=
-
1
,
"Bad expand rule"
);
assert
(
exp_pos
!=
-
1
,
"Bad expand rule"
);
if
(
prev_pos
>
exp_pos
&&
expand_instruction
->
_matrule
!=
NULL
)
{
// For the add_req calls below to work correctly they need
// to added in the same order that a match would add them.
// This means that they would need to be in the order of
// the components list instead of the formal parameters.
// This is a sort of hidden invariant that previously
// wasn't checked and could lead to incorrectly
// constructed nodes.
syntax_err
(
node
->
_linenum
,
"For expand in %s to work, parameter declaration order in %s must follow matchrule
\n
"
,
node
->
_ident
,
new_inst
->
_ident
);
}
prev_pos
=
exp_pos
;
new_pos
=
new_inst
->
operand_position
(
parameter
,
Component
::
USE
);
new_pos
=
new_inst
->
operand_position
(
parameter
,
Component
::
USE
);
if
(
new_pos
!=
-
1
)
{
if
(
new_pos
!=
-
1
)
{
...
@@ -2306,7 +2319,12 @@ private:
...
@@ -2306,7 +2319,12 @@ private:
_processing_noninput
=
false
;
_processing_noninput
=
false
;
// A replacement variable, originally '$'
// A replacement variable, originally '$'
if
(
Opcode
::
as_opcode_type
(
rep_var
)
!=
Opcode
::
NOT_AN_OPCODE
)
{
if
(
Opcode
::
as_opcode_type
(
rep_var
)
!=
Opcode
::
NOT_AN_OPCODE
)
{
_inst
.
_opcode
->
print_opcode
(
_fp
,
Opcode
::
as_opcode_type
(
rep_var
)
);
if
(
!
_inst
.
_opcode
->
print_opcode
(
_fp
,
Opcode
::
as_opcode_type
(
rep_var
)
))
{
// Missing opcode
_AD
.
syntax_err
(
_inst
.
_linenum
,
"Missing $%s opcode definition in %s, used by encoding %s
\n
"
,
rep_var
,
_inst
.
_ident
,
_encoding
.
_name
);
}
}
}
else
{
else
{
// Lookup its position in parameter list
// Lookup its position in parameter list
...
@@ -2348,7 +2366,13 @@ private:
...
@@ -2348,7 +2366,13 @@ private:
else
if
(
Opcode
::
as_opcode_type
(
inst_rep_var
)
!=
Opcode
::
NOT_AN_OPCODE
)
{
else
if
(
Opcode
::
as_opcode_type
(
inst_rep_var
)
!=
Opcode
::
NOT_AN_OPCODE
)
{
// else check if "primary", "secondary", "tertiary"
// else check if "primary", "secondary", "tertiary"
assert
(
_constant_status
==
LITERAL_ACCESSED
,
"Must be processing a literal constant parameter"
);
assert
(
_constant_status
==
LITERAL_ACCESSED
,
"Must be processing a literal constant parameter"
);
_inst
.
_opcode
->
print_opcode
(
_fp
,
Opcode
::
as_opcode_type
(
inst_rep_var
)
);
if
(
!
_inst
.
_opcode
->
print_opcode
(
_fp
,
Opcode
::
as_opcode_type
(
inst_rep_var
)
))
{
// Missing opcode
_AD
.
syntax_err
(
_inst
.
_linenum
,
"Missing $%s opcode definition in %s
\n
"
,
rep_var
,
_inst
.
_ident
);
}
_constant_status
=
LITERAL_OUTPUT
;
_constant_status
=
LITERAL_OUTPUT
;
}
}
else
if
((
_AD
.
get_registers
()
!=
NULL
)
&&
(
_AD
.
get_registers
()
->
getRegDef
(
inst_rep_var
)
!=
NULL
))
{
else
if
((
_AD
.
get_registers
()
!=
NULL
)
&&
(
_AD
.
get_registers
()
->
getRegDef
(
inst_rep_var
)
!=
NULL
))
{
...
...
src/share/vm/adlc/output_h.cpp
浏览文件 @
42108633
...
@@ -355,17 +355,19 @@ static void defineConstructor(FILE *fp, const char *name, uint num_consts,
...
@@ -355,17 +355,19 @@ static void defineConstructor(FILE *fp, const char *name, uint num_consts,
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// Generate the format rule for condition codes
// Generate the format rule for condition codes
static
void
defineCCodeDump
(
FILE
*
fp
,
int
i
)
{
static
void
defineCCodeDump
(
OperandForm
*
oper
,
FILE
*
fp
,
int
i
)
{
fprintf
(
fp
,
" if( _c%d == BoolTest::eq ) st->print(
\"
eq
\"
);
\n
"
,
i
);
assert
(
oper
!=
NULL
,
"what"
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::ne ) st->print(
\"
ne
\"
);
\n
"
,
i
);
CondInterface
*
cond
=
oper
->
_interface
->
is_CondInterface
();
fprintf
(
fp
,
" else if( _c%d == BoolTest::le ) st->print(
\"
le
\"
);
\n
"
,
i
);
fprintf
(
fp
,
" if( _c%d == BoolTest::eq ) st->print(
\"
%s
\"
);
\n
"
,
i
,
cond
->
_equal_format
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::ge ) st->print(
\"
ge
\"
);
\n
"
,
i
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::ne ) st->print(
\"
%s
\"
);
\n
"
,
i
,
cond
->
_not_equal_format
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::lt ) st->print(
\"
lt
\"
);
\n
"
,
i
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::le ) st->print(
\"
%s
\"
);
\n
"
,
i
,
cond
->
_less_equal_format
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::gt ) st->print(
\"
gt
\"
);
\n
"
,
i
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::ge ) st->print(
\"
%s
\"
);
\n
"
,
i
,
cond
->
_greater_equal_format
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::lt ) st->print(
\"
%s
\"
);
\n
"
,
i
,
cond
->
_less_format
);
fprintf
(
fp
,
" else if( _c%d == BoolTest::gt ) st->print(
\"
%s
\"
);
\n
"
,
i
,
cond
->
_greater_format
);
}
}
// Output code that dumps constant values, increment "i" if type is constant
// Output code that dumps constant values, increment "i" if type is constant
static
uint
dump_spec_constant
(
FILE
*
fp
,
const
char
*
ideal_type
,
uint
i
)
{
static
uint
dump_spec_constant
(
FILE
*
fp
,
const
char
*
ideal_type
,
uint
i
,
OperandForm
*
oper
)
{
if
(
!
strcmp
(
ideal_type
,
"ConI"
))
{
if
(
!
strcmp
(
ideal_type
,
"ConI"
))
{
fprintf
(
fp
,
" st->print(
\"
#%%d
\"
, _c%d);
\n
"
,
i
);
fprintf
(
fp
,
" st->print(
\"
#%%d
\"
, _c%d);
\n
"
,
i
);
++
i
;
++
i
;
...
@@ -375,7 +377,7 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i) {
...
@@ -375,7 +377,7 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i) {
++
i
;
++
i
;
}
}
else
if
(
!
strcmp
(
ideal_type
,
"ConN"
))
{
else
if
(
!
strcmp
(
ideal_type
,
"ConN"
))
{
fprintf
(
fp
,
" _c%d->dump
(
);
\n
"
,
i
);
fprintf
(
fp
,
" _c%d->dump
_on(st
);
\n
"
,
i
);
++
i
;
++
i
;
}
}
else
if
(
!
strcmp
(
ideal_type
,
"ConL"
))
{
else
if
(
!
strcmp
(
ideal_type
,
"ConL"
))
{
...
@@ -391,7 +393,7 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i) {
...
@@ -391,7 +393,7 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i) {
++
i
;
++
i
;
}
}
else
if
(
!
strcmp
(
ideal_type
,
"Bool"
))
{
else
if
(
!
strcmp
(
ideal_type
,
"Bool"
))
{
defineCCodeDump
(
fp
,
i
);
defineCCodeDump
(
oper
,
fp
,
i
);
++
i
;
++
i
;
}
}
...
@@ -476,7 +478,7 @@ void gen_oper_format(FILE *fp, FormDict &globals, OperandForm &oper, bool for_c_
...
@@ -476,7 +478,7 @@ void gen_oper_format(FILE *fp, FormDict &globals, OperandForm &oper, bool for_c_
}
}
// ALWAYS! Provide a special case output for condition codes.
// ALWAYS! Provide a special case output for condition codes.
if
(
oper
.
is_ideal_bool
()
)
{
if
(
oper
.
is_ideal_bool
()
)
{
defineCCodeDump
(
fp
,
0
);
defineCCodeDump
(
&
oper
,
fp
,
0
);
}
}
fprintf
(
fp
,
"}
\n
"
);
fprintf
(
fp
,
"}
\n
"
);
...
@@ -549,7 +551,7 @@ void gen_oper_format(FILE *fp, FormDict &globals, OperandForm &oper, bool for_c_
...
@@ -549,7 +551,7 @@ void gen_oper_format(FILE *fp, FormDict &globals, OperandForm &oper, bool for_c_
}
}
// ALWAYS! Provide a special case output for condition codes.
// ALWAYS! Provide a special case output for condition codes.
if
(
oper
.
is_ideal_bool
()
)
{
if
(
oper
.
is_ideal_bool
()
)
{
defineCCodeDump
(
fp
,
0
);
defineCCodeDump
(
&
oper
,
fp
,
0
);
}
}
fprintf
(
fp
,
"}
\n
"
);
fprintf
(
fp
,
"}
\n
"
);
fprintf
(
fp
,
"#endif
\n
"
);
fprintf
(
fp
,
"#endif
\n
"
);
...
@@ -583,10 +585,53 @@ void gen_inst_format(FILE *fp, FormDict &globals, InstructForm &inst, bool for_c
...
@@ -583,10 +585,53 @@ void gen_inst_format(FILE *fp, FormDict &globals, InstructForm &inst, bool for_c
while
(
(
string
=
inst
.
_format
->
_strings
.
iter
())
!=
NULL
)
{
while
(
(
string
=
inst
.
_format
->
_strings
.
iter
())
!=
NULL
)
{
fprintf
(
fp
,
" "
);
fprintf
(
fp
,
" "
);
// Check if this is a standard string or a replacement variable
// Check if this is a standard string or a replacement variable
if
(
string
!=
NameList
::
_signal
)
// Normal string. Pass through.
if
(
string
==
NameList
::
_signal
)
{
// Replacement variable
const
char
*
rep_var
=
inst
.
_format
->
_rep_vars
.
iter
();
inst
.
rep_var_format
(
fp
,
rep_var
);
}
else
if
(
string
==
NameList
::
_signal3
)
{
// Replacement variable in raw text
const
char
*
rep_var
=
inst
.
_format
->
_rep_vars
.
iter
();
const
Form
*
form
=
inst
.
_localNames
[
rep_var
];
if
(
form
==
NULL
)
{
fprintf
(
stderr
,
"unknown replacement variable in format statement: '%s'
\n
"
,
rep_var
);
assert
(
false
,
"ShouldNotReachHere()"
);
}
OpClassForm
*
opc
=
form
->
is_opclass
();
assert
(
opc
,
"replacement variable was not found in local names"
);
// Lookup the index position of the replacement variable
int
idx
=
inst
.
operand_position_format
(
rep_var
);
if
(
idx
==
-
1
)
{
assert
(
strcmp
(
opc
->
_ident
,
"label"
)
==
0
,
"Unimplemented"
);
assert
(
false
,
"ShouldNotReachHere()"
);
}
if
(
inst
.
is_noninput_operand
(
idx
))
{
assert
(
false
,
"ShouldNotReachHere()"
);
}
else
{
// Output the format call for this operand
fprintf
(
fp
,
"opnd_array(%d)"
,
idx
);
}
rep_var
=
inst
.
_format
->
_rep_vars
.
iter
();
inst
.
_format
->
_strings
.
iter
();
if
(
strcmp
(
rep_var
,
"$constant"
)
==
0
&&
opc
->
is_operand
())
{
Form
::
DataType
constant_type
=
form
->
is_operand
()
->
is_base_constant
(
globals
);
if
(
constant_type
==
Form
::
idealD
)
{
fprintf
(
fp
,
"->constantD()"
);
}
else
if
(
constant_type
==
Form
::
idealF
)
{
fprintf
(
fp
,
"->constantF()"
);
}
else
if
(
constant_type
==
Form
::
idealL
)
{
fprintf
(
fp
,
"->constantL()"
);
}
else
{
fprintf
(
fp
,
"->constant()"
);
}
}
else
if
(
strcmp
(
rep_var
,
"$cmpcode"
)
==
0
)
{
fprintf
(
fp
,
"->ccode()"
);
}
else
{
assert
(
false
,
"ShouldNotReachHere()"
);
}
}
else
if
(
string
==
NameList
::
_signal2
)
// Raw program text
fputs
(
inst
.
_format
->
_strings
.
iter
(),
fp
);
else
fprintf
(
fp
,
"st->print(
\"
%s
\"
);
\n
"
,
string
);
fprintf
(
fp
,
"st->print(
\"
%s
\"
);
\n
"
,
string
);
else
// Replacement variable
inst
.
rep_var_format
(
fp
,
inst
.
_format
->
_rep_vars
.
iter
()
);
}
// Done with all format strings
}
// Done with all format strings
}
// Done generating the user-defined portion of the format
}
// Done generating the user-defined portion of the format
...
@@ -1404,7 +1449,7 @@ void ArchDesc::declareClasses(FILE *fp) {
...
@@ -1404,7 +1449,7 @@ void ArchDesc::declareClasses(FILE *fp) {
oper
->
_components
.
reset
();
oper
->
_components
.
reset
();
if
((
comp
=
oper
->
_components
.
iter
())
==
NULL
)
{
if
((
comp
=
oper
->
_components
.
iter
())
==
NULL
)
{
assert
(
num_consts
==
1
,
"Bad component list detected.
\n
"
);
assert
(
num_consts
==
1
,
"Bad component list detected.
\n
"
);
i
=
dump_spec_constant
(
fp
,
type
,
i
);
i
=
dump_spec_constant
(
fp
,
type
,
i
,
oper
);
// Check that type actually matched
// Check that type actually matched
assert
(
i
!=
0
,
"Non-constant operand lacks component list."
);
assert
(
i
!=
0
,
"Non-constant operand lacks component list."
);
}
// end if NULL
}
// end if NULL
...
@@ -1414,7 +1459,7 @@ void ArchDesc::declareClasses(FILE *fp) {
...
@@ -1414,7 +1459,7 @@ void ArchDesc::declareClasses(FILE *fp) {
oper
->
_components
.
reset
();
oper
->
_components
.
reset
();
while
((
comp
=
oper
->
_components
.
iter
())
!=
NULL
)
{
while
((
comp
=
oper
->
_components
.
iter
())
!=
NULL
)
{
type
=
comp
->
base_type
(
_globalNames
);
type
=
comp
->
base_type
(
_globalNames
);
i
=
dump_spec_constant
(
fp
,
type
,
i
);
i
=
dump_spec_constant
(
fp
,
type
,
i
,
NULL
);
}
}
}
}
// finish line (3)
// finish line (3)
...
...
src/share/vm/opto/block.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/block.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/c2_globals.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/callnode.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/callnode.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/chaitin.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/classes.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/compile.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/compile.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/gcm.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/library_call.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/loopTransform.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/macro.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/macro.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/matcher.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/matcher.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/memnode.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/memnode.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/output.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/phase.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/phase.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/reg_split.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/type.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/opto/type.hpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/runtime/arguments.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/runtime/frame.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
src/share/vm/utilities/vmError.cpp
浏览文件 @
42108633
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录