# HG changeset patch # User twisti # Date 1385494907 28800 # Node ID 599eaf3bc4b2bb7d61660ede4ed7aacac8fa02d1 # Parent 389d40d7d99f27a39a5067c2da02102bd30eb9b9 get DataLayout tags from VM diff -r 389d40d7d99f -r 599eaf3bc4b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Wed Nov 27 02:31:03 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Tue Nov 26 11:41:47 2013 -0800 @@ -1046,6 +1046,20 @@ @HotSpotVMField(name = "DataLayout::_cells[0]", get = HotSpotVMField.Type.OFFSET) @Stable public int dataLayoutCellsOffset; @HotSpotVMConstant(name = "DataLayout::cell_size") @Stable public int dataLayoutCellSize; + @HotSpotVMConstant(name = "DataLayout::no_tag") @Stable public int dataLayoutNoTag; + @HotSpotVMConstant(name = "DataLayout::bit_data_tag") @Stable public int dataLayoutBitDataTag; + @HotSpotVMConstant(name = "DataLayout::counter_data_tag") @Stable public int dataLayoutCounterDataTag; + @HotSpotVMConstant(name = "DataLayout::jump_data_tag") @Stable public int dataLayoutJumpDataTag; + @HotSpotVMConstant(name = "DataLayout::receiver_type_data_tag") @Stable public int dataLayoutReceiverTypeDataTag; + @HotSpotVMConstant(name = "DataLayout::virtual_call_data_tag") @Stable public int dataLayoutVirtualCallDataTag; + @HotSpotVMConstant(name = "DataLayout::ret_data_tag") @Stable public int dataLayoutRetDataTag; + @HotSpotVMConstant(name = "DataLayout::branch_data_tag") @Stable public int dataLayoutBranchDataTag; + @HotSpotVMConstant(name = "DataLayout::multi_branch_data_tag") @Stable public int dataLayoutMultiBranchDataTag; + @HotSpotVMConstant(name = "DataLayout::arg_info_data_tag") @Stable public int dataLayoutArgInfoDataTag; + @HotSpotVMConstant(name = "DataLayout::call_type_data_tag") @Stable public int dataLayoutCallTypeDataTag; + @HotSpotVMConstant(name = "DataLayout::virtual_call_type_data_tag") @Stable public int dataLayoutVirtualCallTypeDataTag; + @HotSpotVMConstant(name = "DataLayout::parameters_type_data_tag") @Stable public int dataLayoutParametersTypeDataTag; + @HotSpotVMFlag(name = "BciProfileWidth") @Stable public int bciProfileWidth; @HotSpotVMFlag(name = "TypeProfileWidth") @Stable public int typeProfileWidth; @HotSpotVMFlag(name = "MethodProfileWidth") @Stable public int methodProfileWidth; diff -r 389d40d7d99f -r 599eaf3bc4b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Wed Nov 27 02:31:03 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Tue Nov 26 11:41:47 2013 -0800 @@ -46,8 +46,20 @@ private static final HotSpotMethodDataAccessor NO_DATA_EXCEPTION_POSSIBLY_NOT_RECORDED_ACCESSOR = new NoMethodData(TriState.UNKNOWN); // sorted by tag - private static final HotSpotMethodDataAccessor[] PROFILE_DATA_ACCESSORS = {null, new BitData(), new CounterData(), new JumpData(), new TypeCheckData(), new VirtualCallData(), new RetData(), - new BranchData(), new MultiBranchData(), new ArgInfoData()}; + // @formatter:off + private static final HotSpotMethodDataAccessor[] PROFILE_DATA_ACCESSORS = { + null, + new BitData(), + new CounterData(), + new JumpData(), + new TypeCheckData(), + new VirtualCallData(), + new RetData(), + new BranchData(), + new MultiBranchData(), + new ArgInfoData() + }; + // @formatter:on /** * Reference to the C++ MethodData object. @@ -292,13 +304,12 @@ private static class NoMethodData extends AbstractMethodData { - private static final int NO_DATA_TAG = 0; private static final int NO_DATA_SIZE = cellIndexToOffset(0); private final TriState exceptionSeen; protected NoMethodData(TriState exceptionSeen) { - super(NO_DATA_TAG, NO_DATA_SIZE); + super(runtime().getConfig().dataLayoutNoTag, NO_DATA_SIZE); this.exceptionSeen = exceptionSeen; } @@ -320,12 +331,11 @@ private static class BitData extends AbstractMethodData { - private static final int BIT_DATA_TAG = 1; private static final int BIT_DATA_SIZE = cellIndexToOffset(0); private static final int BIT_DATA_NULL_SEEN_FLAG = 0x01; private BitData() { - super(BIT_DATA_TAG, BIT_DATA_SIZE); + super(runtime().getConfig().dataLayoutBitDataTag, BIT_DATA_SIZE); } protected BitData(int tag, int staticSize) { @@ -345,12 +355,11 @@ private static class CounterData extends BitData { - private static final int COUNTER_DATA_TAG = 2; private static final int COUNTER_DATA_SIZE = cellIndexToOffset(1); private static final int COUNTER_DATA_COUNT_OFFSET = cellIndexToOffset(0); public CounterData() { - super(COUNTER_DATA_TAG, COUNTER_DATA_SIZE); + super(runtime().getConfig().dataLayoutCounterDataTag, COUNTER_DATA_SIZE); } protected CounterData(int tag, int staticSize) { @@ -374,13 +383,12 @@ private static class JumpData extends AbstractMethodData { - private static final int JUMP_DATA_TAG = 3; private static final int JUMP_DATA_SIZE = cellIndexToOffset(2); protected static final int TAKEN_COUNT_OFFSET = cellIndexToOffset(0); protected static final int TAKEN_DISPLACEMENT_OFFSET = cellIndexToOffset(1); public JumpData() { - super(JUMP_DATA_TAG, JUMP_DATA_SIZE); + super(runtime().getConfig().dataLayoutJumpDataTag, JUMP_DATA_SIZE); } protected JumpData(int tag, int staticSize) { @@ -507,11 +515,10 @@ private static class TypeCheckData extends AbstractTypeData { - private static final int TYPE_CHECK_DATA_TAG = 4; private static final int TYPE_CHECK_DATA_SIZE = cellIndexToOffset(2) + TYPE_DATA_ROW_SIZE * config.typeProfileWidth; public TypeCheckData() { - super(TYPE_CHECK_DATA_TAG, TYPE_CHECK_DATA_SIZE); + super(runtime().getConfig().dataLayoutReceiverTypeDataTag, TYPE_CHECK_DATA_SIZE); } @Override @@ -527,13 +534,12 @@ private static class VirtualCallData extends AbstractTypeData { - private static final int VIRTUAL_CALL_DATA_TAG = 5; private static final int VIRTUAL_CALL_DATA_SIZE = cellIndexToOffset(2) + TYPE_DATA_ROW_SIZE * (config.typeProfileWidth + config.methodProfileWidth); private static final int VIRTUAL_CALL_DATA_FIRST_METHOD_OFFSET = TYPE_DATA_FIRST_TYPE_OFFSET + TYPE_DATA_ROW_SIZE * config.typeProfileWidth; private static final int VIRTUAL_CALL_DATA_FIRST_METHOD_COUNT_OFFSET = TYPE_DATA_FIRST_TYPE_COUNT_OFFSET + TYPE_DATA_ROW_SIZE * config.typeProfileWidth; public VirtualCallData() { - super(VIRTUAL_CALL_DATA_TAG, VIRTUAL_CALL_DATA_SIZE); + super(runtime().getConfig().dataLayoutVirtualCallDataTag, VIRTUAL_CALL_DATA_SIZE); } @Override @@ -630,23 +636,21 @@ private static class RetData extends CounterData { - private static final int RET_DATA_TAG = 6; private static final int RET_DATA_ROW_SIZE = cellsToBytes(3); private static final int RET_DATA_SIZE = cellIndexToOffset(1) + RET_DATA_ROW_SIZE * config.bciProfileWidth; public RetData() { - super(RET_DATA_TAG, RET_DATA_SIZE); + super(runtime().getConfig().dataLayoutRetDataTag, RET_DATA_SIZE); } } private static class BranchData extends JumpData { - private static final int BRANCH_DATA_TAG = 7; private static final int BRANCH_DATA_SIZE = cellIndexToOffset(3); private static final int NOT_TAKEN_COUNT_OFFSET = cellIndexToOffset(2); public BranchData() { - super(BRANCH_DATA_TAG, BRANCH_DATA_SIZE); + super(runtime().getConfig().dataLayoutBranchDataTag, BRANCH_DATA_SIZE); } @Override @@ -699,7 +703,6 @@ private static class MultiBranchData extends ArrayData { - private static final int MULTI_BRANCH_DATA_TAG = 8; private static final int MULTI_BRANCH_DATA_SIZE = cellIndexToOffset(1); private static final int MULTI_BRANCH_DATA_ROW_SIZE_IN_CELLS = 2; private static final int MULTI_BRANCH_DATA_ROW_SIZE = cellsToBytes(MULTI_BRANCH_DATA_ROW_SIZE_IN_CELLS); @@ -707,7 +710,7 @@ private static final int MULTI_BRANCH_DATA_FIRST_DISPLACEMENT_OFFSET = ARRAY_DATA_START_OFFSET + cellsToBytes(1); public MultiBranchData() { - super(MULTI_BRANCH_DATA_TAG, MULTI_BRANCH_DATA_SIZE); + super(runtime().getConfig().dataLayoutMultiBranchDataTag, MULTI_BRANCH_DATA_SIZE); } @Override @@ -786,11 +789,10 @@ private static class ArgInfoData extends ArrayData { - private static final int ARG_INFO_DATA_TAG = 9; private static final int ARG_INFO_DATA_SIZE = cellIndexToOffset(1); public ArgInfoData() { - super(ARG_INFO_DATA_TAG, ARG_INFO_DATA_SIZE); + super(runtime().getConfig().dataLayoutArgInfoDataTag, ARG_INFO_DATA_SIZE); } } } diff -r 389d40d7d99f -r 599eaf3bc4b2 src/share/vm/runtime/vmStructs.cpp --- a/src/share/vm/runtime/vmStructs.cpp Wed Nov 27 02:31:03 2013 +0100 +++ b/src/share/vm/runtime/vmStructs.cpp Tue Nov 26 11:41:47 2013 -0800 @@ -2373,6 +2373,19 @@ /**************/ \ \ declare_constant(DataLayout::cell_size) \ + declare_constant(DataLayout::no_tag) \ + declare_constant(DataLayout::bit_data_tag) \ + declare_constant(DataLayout::counter_data_tag) \ + declare_constant(DataLayout::jump_data_tag) \ + declare_constant(DataLayout::receiver_type_data_tag) \ + declare_constant(DataLayout::virtual_call_data_tag) \ + declare_constant(DataLayout::ret_data_tag) \ + declare_constant(DataLayout::branch_data_tag) \ + declare_constant(DataLayout::multi_branch_data_tag) \ + declare_constant(DataLayout::arg_info_data_tag) \ + declare_constant(DataLayout::call_type_data_tag) \ + declare_constant(DataLayout::virtual_call_type_data_tag) \ + declare_constant(DataLayout::parameters_type_data_tag) \ \ /*************************************/ \ /* InstanceKlass enum */ \