6953144: Tiered compilation
Summary: Infrastructure for tiered compilation support (interpreter + c1 + c2) for 32 and 64 bit. Simple tiered policy implementation.
Reviewed-by: kvn, never, phh, twisti
--- a/hotspot/make/linux/Makefile Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/make/linux/Makefile Fri Sep 03 17:51:07 2010 -0700
@@ -19,7 +19,7 @@
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
-#
+#
#
# This makefile creates a build tree and lights off a build.
@@ -45,13 +45,13 @@
#
# make REMOTE="rsh -l me myotherlinuxbox"
-# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
-# JDI binding on SA produces two binaries:
+# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
+# JDI binding on SA produces two binaries:
# 1. sa-jdi.jar - This is build before building libjvm[_g].so
# Please refer to ./makefiles/sa.make
# 2. libsa[_g].so - Native library for SA - This is built after
# libjsig[_g].so (signal interposition library)
-# Please refer to ./makefiles/vm.make
+# Please refer to ./makefiles/vm.make
# If $(GAMMADIR)/agent dir is not present, SA components are not built.
ifeq ($(GAMMADIR),)
@@ -61,11 +61,9 @@
endif
include $(GAMMADIR)/make/$(OSNAME)/makefiles/rules.make
-ifndef LP64
ifndef CC_INTERP
FORCE_TIERED=1
endif
-endif
ifdef LP64
ifeq ("$(filter $(LP64_ARCH),$(BUILDARCH))","")
--- a/hotspot/make/solaris/Makefile Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/make/solaris/Makefile Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -19,7 +19,7 @@
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
-#
+#
#
# This makefile creates a build tree and lights off a build.
@@ -36,13 +36,13 @@
# or BOOTDIR has to be set. We do *not* search javac, javah, rmic etc.
# from the PATH.
-# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
-# JDI binding on SA produces two binaries:
+# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
+# JDI binding on SA produces two binaries:
# 1. sa-jdi.jar - This is build before building libjvm[_g].so
# Please refer to ./makefiles/sa.make
# 2. libsaproc[_g].so - Native library for SA - This is built after
# libjsig[_g].so (signal interposition library)
-# Please refer to ./makefiles/vm.make
+# Please refer to ./makefiles/vm.make
# If $(GAMMADIR)/agent dir is not present, SA components are not built.
ifeq ($(GAMMADIR),)
@@ -52,11 +52,9 @@
endif
include $(GAMMADIR)/make/$(OSNAME)/makefiles/rules.make
-ifndef LP64
ifndef CC_INTERP
FORCE_TIERED=1
endif
-endif
ifdef LP64
ifeq ("$(filter $(LP64_ARCH),$(BUILDARCH))","")
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/make/solaris/makefiles/reorder_TIERED_sparcv9 Fri Sep 03 17:51:07 2010 -0700
@@ -0,0 +1,4477 @@
+data = R0x2000;
+text = LOAD ?RXO;
+
+
+text: .text%__1cCosOjavaTimeMillis6F_x_;
+text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_;
+text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cIPhaseIFGIadd_edge6MII_i_;
+text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_;
+text: .text%__1cENodeEjvms6kM_pnIJVMState__;
+text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__;
+text: .text%__1cETypeDcmp6Fkpk03_i_;
+text: .text%__1cENodeHlatency6MI_I_;
+text: .text%__1cHRegMaskJis_bound16kM_i_;
+text: .text%__1cDff16FI_i_;
+text: .text%__1cHRegMaskESize6kM_I_;
+text: .text%__1cXresource_allocate_bytes6FI_pc_;
+text: .text%__1cENodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJVectorSet2R6MI_rnDSet__;
+text: .text%__1cHRegMaskJis_bound26kM_i_;
+text: .text%__1cNSharedRuntimeElmul6Fxx_x_;
+text: .text%__1cIMachNodeGOpcode6kM_i_;
+text: .text%__1cJiRegIOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cIIndexSetKinitialize6MI_v_;
+text: .text%__1cITypeNodeLbottom_type6kM_pknEType__;
+text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_;
+text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o;
+text: .text%__1cETypeFuhash6Fkpk0_i_;
+text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o;
+text: .text%__1cENodeIout_grow6MI_v_;
+text: .text%__1cOloadConI13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cENodeHadd_req6Mp0_v_;
+text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o;
+text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cOloadConI13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cICallNodeKmatch_edge6kMI_I_;
+text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_;
+text: .text%__1cHPhiNodeGOpcode6kM_i_;
+text: .text%__1cKbranchNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o;
+text: .text%__1cIProjNodeGOpcode6kM_i_;
+text: .text%__1cETypeIhashcons6M_pk0_;
+text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_;
+text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_;
+text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__;
+text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_;
+text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__;
+text: .text%__1cHCompileNnode_bundling6MpknENode__pnGBundle__;
+text: .text%__1cGIfNodeGOpcode6kM_i_;
+text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_;
+text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_;
+text: .text%__1cIUniverseMnon_oop_word6F_pv_;
+text: .text%__1cDLRGOcompute_degree6kMr0_i_;
+text: .text%__1cFArenaIArealloc6MpvII_1_;
+text: .text%__1cIConINodeGOpcode6kM_i_;
+text: .text%__1cETypeEmeet6kMpk0_2_;
+text: .text%__1cENode2t6MI_v_;
+text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_: ad_sparc.o;
+text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_;
+text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_: psTasks.o;
+text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o;
+text: .text%__1cKIfTrueNodeGOpcode6kM_i_;
+text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_;
+text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__;
+text: .text%__1cJloadPNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_;
+text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_;
+text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_;
+text: .text%__1cIAddPNodeGOpcode6kM_i_;
+text: .text%__1cIPhaseIFGJre_insert6MI_v_;
+text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__;
+text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_;
+text: .text%__1cHTypeIntEhash6kM_i_;
+text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_;
+text: .text%__1cDfh16FI_i_;
+text: .text%__1cNMachIdealNodeErule6kM_I_: ad_sparc.o;
+text: .text%__1cIIndexSetKfree_block6MI_v_;
+text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o;
+text: .text%__1cLIfFalseNodeGOpcode6kM_i_;
+text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_;
+text: .text%__1cENodeEhash6kM_I_;
+text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_;
+text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__;
+text: .text%JVM_ArrayCopy;
+text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_;
+text: .text%__1cNSharedRuntimeDl2f6Fx_f_;
+text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__;
+text: .text%__1cHConNodeGOpcode6kM_i_;
+text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_;
+text: .text%__1cMMachProjNodeGOpcode6kM_i_;
+text: .text%__1cJiRegPOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cXPipeline_Use_Cycle_Mask2L6Mi_r0_: ad_sparc_pipeline.o;
+text: .text%__1cIBoolNodeGOpcode6kM_i_;
+text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cENodeEgrow6MI_v_;
+text: .text%__1cIciObjectEhash6M_i_;
+text: .text%__1cKRegionNodeGOpcode6kM_i_;
+text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_;
+text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o;
+text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__: ad_sparc.o;
+text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_;
+text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_;
+text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cIPhaseGVNJtransform6MpnENode__2_;
+text: .text%__1cOoop_RelocationLunpack_data6M_v_;
+text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__;
+text: .text%__1cPJavaFrameAnchorNmake_walkable6MpnKJavaThread__v_;
+text: .text%__1cENodeNis_block_proj6kM_pk0_;
+text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__;
+text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_;
+text: .text%__1cLTypeInstPtrEhash6kM_i_;
+text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_;
+text: .text%__1cJloadINodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__: ad_sparc.o;
+text: .text%__1cKbranchNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMMachProjNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o;
+text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__: ad_sparc.o;
+text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o;
+text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_I_: parallelScavengeHeap.o;
+text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_;
+text: .text%__1cGciTypeEmake6FnJBasicType__p0_;
+text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cENodeFclone6kM_p0_;
+text: .text%__1cITypeNodeEhash6kM_I_;
+text: .text%__1cMPipeline_UseMfull_latency6kMIrk0_I_;
+text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_: ad_sparc.o;
+text: .text%__1cENodeKmatch_edge6kMI_I_;
+text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_;
+text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_;
+text: .text%__1cICallNodeLbottom_type6kM_pknEType__;
+text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_;
+text: .text%JVM_CurrentTimeMillis;
+text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_;
+text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_;
+text: .text%__1cKTypeAryPtrEhash6kM_i_;
+text: .text%__1cETypeFxmeet6kMpk0_2_;
+text: .text%__1cILRG_ListGextend6MII_v_;
+text: .text%__1cJVectorSet2F6kMI_i_;
+text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_;
+text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cIProjNodeEhash6kM_I_;
+text: .text%__1cIAddINodeGOpcode6kM_i_;
+text: .text%__1cIIndexSet2t6Mp0_v_;
+text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_;
+text: .text%__1cITypeNodeJideal_reg6kM_I_;
+text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cENodeHsize_of6kM_I_;
+text: .text%__1cICmpPNodeGOpcode6kM_i_;
+text: .text%__1cKNode_ArrayGremove6MI_v_;
+text: .text%__1cHPhiNodeEhash6kM_I_;
+text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__;
+text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__;
+text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_sparc.o;
+text: .text%__1cJStartNodeLbottom_type6kM_pknEType__;
+text: .text%__1cHTypeIntFxmeet6kMpknEType__3_;
+text: .text%__1cIProjNodeLbottom_type6kM_pknEType__;
+text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__;
+text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_;
+text: .text%__1cICmpINodeGOpcode6kM_i_;
+text: .text%Unsafe_CompareAndSwapLong;
+text: .text%__1cNCatchProjNodeGOpcode6kM_i_;
+text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_;
+text: .text%__1cENode2t6Mp0_v_;
+text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_;
+text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_;
+text: .text%__1cTCreateExceptionNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_;
+text: .text%__1cHRegMaskMSmearToPairs6M_v_;
+text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_;
+text: .text%__1cMloadConPNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__;
+text: .text%__1cMPipeline_UseJadd_usage6Mrk0_v_;
+text: .text%__1cIAddPNodeKmatch_edge6kMI_I_;
+text: .text%__1cJiRegIOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cGIfNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cGcmpkey6Fpkv1_i_;
+text: .text%__1cMMergeMemNodeGOpcode6kM_i_;
+text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__;
+text: .text%__1cIParmNodeGOpcode6kM_i_;
+text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_;
+text: .text%__1cHTypeIntEmake6Fiii_pk0_;
+text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_;
+text: .text%__1cKSchedulingWAddNodeToAvailableList6MpnENode__v_;
+text: .text%__1cKSchedulingSChooseNodeToBundle6M_pnENode__;
+text: .text%__1cKSchedulingPAddNodeToBundle6MpnENode_pknFBlock__v_;
+text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__;
+text: .text%__1cJLoadPNodeGOpcode6kM_i_;
+text: .text%__1cMMutableSpaceIallocate6MI_pnIHeapWord__;
+text: .text%__1cJPSPermGenSallocate_permanent6MI_pnIHeapWord__;
+text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6MI_pnIHeapWord__;
+text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMMutableSpaceMcas_allocate6MI_pnIHeapWord__;
+text: .text%__1cNflagsRegPOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cJCatchNodeGOpcode6kM_i_;
+text: .text%__1cIJVMStateLdebug_start6kM_I_;
+text: .text%__1cENodeHdel_req6MI_v_;
+text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_;
+text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_;
+text: .text%__1cFBlockIis_Empty6kM_i_;
+text: .text%__1cOThreadCritical2T6M_v_;
+text: .text%__1cOThreadCritical2t6M_v_;
+text: .text%method_compare: methodOop.o;
+text: .text%__1cICodeHeapKfind_start6kMpv_1_;
+text: .text%__1cETypeEhash6kM_i_;
+text: .text%__1cRNativeInstructionLset_long_at6Mii_v_;
+text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__;
+text: .text%__1cJCProjNodeEhash6kM_I_: classes.o;
+text: .text%__1cIHaltNodeGOpcode6kM_i_;
+text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__;
+text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__;
+text: .text%__1cICmpUNodeGOpcode6kM_i_;
+text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_;
+text: .text%__1cXPipeline_Use_Cycle_MaskCOr6Mrk0_v_;
+text: .text%__1cILoadNodeEhash6kM_I_;
+text: .text%__1cKTypeAryPtrKadd_offset6kMi_pknHTypePtr__;
+text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_;
+text: .text%__1cKHandleMark2T6M_v_;
+text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_;
+text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_;
+text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__;
+text: .text%__1cILoadNodeLbottom_type6kM_pknEType__;
+text: .text%JVM_ReleaseUTF;
+text: .text%__1cJloadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJTypeTupleEhash6kM_i_;
+text: .text%__1cMflagsRegOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cObranchConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cMOopMapStreamJfind_next6M_v_;
+text: .text%__1cFDictI2i6M_v_;
+text: .text%__1cKNode_ArrayEgrow6MI_v_;
+text: .text%__1cHTypeIntEmake6Fi_pk0_;
+text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_;
+text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__: memnode.o;
+text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_;
+text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_;
+text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__;
+text: .text%__1cPindOffset13OperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cUcompI_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o;
+text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_;
+text: .text%__1cKCastPPNodeGOpcode6kM_i_;
+text: .text%__1cOoop_RelocationFvalue6M_pC_: relocInfo.o;
+text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o;
+text: .text%__1cPSignatureStreamEnext6M_v_;
+text: .text%__1cLLShiftINodeGOpcode6kM_i_;
+text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_;
+text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cGBitMapJset_union6M0_v_;
+text: .text%__1cIConPNodeGOpcode6kM_i_;
+text: .text%__1cJLoadINodeGOpcode6kM_i_;
+text: .text%JVM_GetMethodIxExceptionTableLength;
+text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__;
+text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__;
+text: .text%__1cNSharedRuntimeDd2i6Fd_i_;
+text: .text%__1cVcompP_iRegP_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKRegionNodeEhash6kM_I_: classes.o;
+text: .text%__1cNbranchConNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_;
+text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_;
+text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cGBitMap2t6MpII_v_;
+text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_;
+text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__;
+text: .text%__1cFParsePdo_one_bytecode6M_v_;
+text: .text%__1cFParseNdo_exceptions6M_v_;
+text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__;
+text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o;
+text: .text%__1cKimmI13OperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cCosVcurrent_stack_pointer6F_pC_;
+text: .text%__1cEDict2F6kMpkv_pv_;
+text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cENodeIdestruct6M_v_;
+text: .text%__1cMCreateExNodeGOpcode6kM_i_;
+text: .text%__1cIBoolNodeEhash6kM_I_;
+text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__;
+text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_;
+text: .text%__1cKNode_ArrayFclear6M_v_;
+text: .text%__1cObranchConPNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIProjNodeHsize_of6kM_I_;
+text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_;
+text: .text%__1cMloadConINodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIHaltNodeKmatch_edge6kMI_I_: classes.o;
+text: .text%__1cJloadBNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cHhashptr6Fpkv_i_;
+text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__;
+text: .text%__1cHhashkey6Fpkv_i_;
+text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_;
+text: .text%__1cIJVMStateJdebug_end6kM_I_;
+text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_;
+text: .text%__1cJloadPNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_;
+text: .text%__1cSaddP_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIMachNodeHtwo_adr6kM_I_: ad_sparc.o;
+text: .text%__1cNSafePointNodeHsize_of6kM_I_;
+text: .text%__1cLTypeInstPtrKadd_offset6kMi_pknHTypePtr__;
+text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNLoadRangeNodeGOpcode6kM_i_;
+text: .text%__1cNbranchConNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cENode2t6Mp011_v_;
+text: .text%__1cJStoreNodeKmatch_edge6kMI_I_;
+text: .text%__1cOPSPromotionLABFflush6M_v_;
+text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o;
+text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o;
+text: .text%__1cOcompU_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__;
+text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_;
+text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__;
+text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_;
+text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_;
+text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__;
+text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNCellTypeStateFmerge6kM0i_0_;
+text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_;
+text: .text%__1cILoadNodeKmatch_edge6kMI_I_;
+text: .text%__1cJloadINodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNExceptionMark2T6M_v_;
+text: .text%__1cNExceptionMark2t6MrpnGThread__v_;
+text: .text%__1cITypeLongEhash6kM_i_;
+text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__;
+text: .text%__1cJiRegLOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__;
+text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__;
+text: .text%__1cOloadConI13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOloadConI13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cObranchConPNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKStoreINodeGOpcode6kM_i_;
+text: .text%__1cJcmpOpOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_;
+text: .text%__1cJiRegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cKstorePNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o;
+text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_;
+text: .text%__1cQaddP_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cSaddI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__;
+text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_;
+text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cLCounterDataKcell_count6M_i_: ciMethodData.o;
+text: .text%__1cHRegMaskMClearToPairs6M_v_;
+text: .text%__1cRshlI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_;
+text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_;
+text: .text%__1cKcmpOpPOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cKTypeRawPtrKadd_offset6kMi_pknHTypePtr__;
+text: .text%__1cMloadConINodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cFArenaEgrow6MI_pv_;
+text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_;
+text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__;
+text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__: subnode.o;
+text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_;
+text: .text%__1cQaddP_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_;
+text: .text%__1cKStorePNodeGOpcode6kM_i_;
+text: .text%__1cKRelocationLunpack_data6M_v_: relocInfo.o;
+text: .text%__1cNflagsRegUOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__;
+text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cRInvocationCounterEinit6M_v_;
+text: .text%__1cKNode_Array2t6MpnFArena__v_: block.o;
+text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__;
+text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_;
+text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_;
+text: .text%__1cObranchConUNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_;
+text: .text%__1cIAddINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o;
+text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKstorePNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMObjectLocker2T6M_v_;
+text: .text%__1cOcompI_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o;
+text: .text%__1cMURShiftINodeGOpcode6kM_i_;
+text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_;
+text: .text%__1cNRelocIteratorKset_limits6MpC1_v_;
+text: .text%__1cIRootNodeGOpcode6kM_i_;
+text: .text%__1cOloadConI13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_;
+text: .text%__1cPcheckCastPPNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cISubINodeGOpcode6kM_i_;
+text: .text%__1cNbranchConNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_;
+text: .text%__1cJTypeTupleGfields6FI_ppknEType__;
+text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__;
+text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__;
+text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_;
+text: .text%__1cKbranchNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__: cfgnode.o;
+text: .text%__1cHAddNodeEhash6kM_I_;
+text: .text%__1cENodeRdisconnect_inputs6Mp0_i_;
+text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o;
+text: .text%__1cSaddI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__;
+text: .text%__1cHConNodeEhash6kM_I_;
+text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cNmethodOopDescIbci_from6kMpC_i_;
+text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__;
+text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o;
+text: .text%__1cITypeNodeHsize_of6kM_I_;
+text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__: callnode.o;
+text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__;
+text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__;
+text: .text%JVM_GetClassModifiers;
+text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__;
+text: .text%__1cNSafePointNodeOnext_exception6kM_p0_;
+text: .text%JVM_GetClassAccessFlags;
+text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_;
+text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o;
+text: .text%__1cHTypeAryEhash6kM_i_;
+text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_;
+text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__;
+text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPPerfLongVariantGsample6M_v_;
+text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_;
+text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cIMachOperNconstant_disp6kM_i_;
+text: .text%__1cIMachOperFscale6kM_i_;
+text: .text%__1cENode2t6Mp0111_v_;
+text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_;
+text: .text%__1cNCompileBrokerLmaybe_block6F_v_;
+text: .text%__1cFBlockOcode_alignment6M_I_;
+text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__;
+text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__;
+text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_;
+text: .text%JVM_GetCPMethodSignatureUTF;
+text: .text%__1cFChunkJnext_chop6M_v_;
+text: .text%__1cMMergeMemNodeEhash6kM_I_;
+text: .text%__1cKSchedulingbFComputeRegisterAntidependencies6MpnFBlock__v_;
+text: .text%__1cKSchedulingPComputeUseCount6MpknFBlock__v_;
+text: .text%__1cHTypePtrHget_con6kM_i_;
+text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o;
+text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_sparc.o;
+text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_sparc.o;
+text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_;
+text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__;
+text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_;
+text: .text%__1cQaddI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cObranchConUNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cFBlockJfind_node6kMpknENode__I_;
+text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o;
+text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__;
+text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_;
+text: .text%__1cHTypePtrEhash6kM_i_;
+text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__;
+text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_;
+text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_;
+text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6MI_pnIHeapWord__;
+text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_;
+text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_;
+text: .text%__1cFBlockLfind_remove6MpknENode__v_;
+text: .text%__1cIIndexSetJlrg_union6MIIkIpknIPhaseIFG_rknHRegMask__I_;
+text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_: classes.o;
+text: .text%__1cUcompI_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_;
+text: .text%__1cNObjectMonitorEexit6MpnGThread__v_;
+text: .text%__1cIimmPOperEtype6kM_pknEType__: ad_sparc_clone.o;
+text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cLMachNopNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJloadINodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNloadRangeNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cVCompressedWriteStream2t6Mi_v_;
+text: .text%__1cNObjectMonitorFenter6MpnGThread__v_;
+text: .text%__1cENodeKreplace_by6Mp0_v_;
+text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_;
+text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_;
+text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__;
+text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__;
+text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cJStoreNodeEhash6kM_I_;
+text: .text%__1cSaddP_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQaddI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__;
+text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_;
+text: .text%__1cKbranchNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIMachOperIconstant6kM_i_;
+text: .text%__1cWMutableSpaceUsedHelperLtake_sample6M_x_: spaceCounters.o;
+text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_;
+text: .text%__1cRPSOldPromotionLABFflush6M_v_;
+text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__;
+text: .text%__1cPcompP_iRegPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLBoxLockNodeGOpcode6kM_i_;
+text: .text%__1cIciObjectJset_ident6MI_v_;
+text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__;
+text: .text%__1cKTypeRawPtrEhash6kM_i_;
+text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o;
+text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_;
+text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cCosPelapsed_counter6F_x_;
+text: .text%__1cGBitMapOset_difference6M0_v_;
+text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o;
+text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o;
+text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%JVM_GetMethodIxLocalsCount;
+text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%JVM_CurrentThread;
+text: .text%__1cENodeHget_ptr6kM_i_;
+text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIAndINodeGOpcode6kM_i_;
+text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_;
+text: .text%__1cENodeHins_req6MIp0_v_;
+text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_;
+text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o;
+text: .text%__1cKstoreINodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOFastUnlockNodeGOpcode6kM_i_;
+text: .text%__1cITypeNodeDcmp6kMrknENode__I_;
+text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__;
+text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKcmpOpUOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cLstoreI0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIciObject2t6MnGHandle__v_;
+text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_;
+text: .text%__1cIMachOperOindex_position6kM_i_;
+text: .text%__1cXmembar_release_lockNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJVectorSet2L6MI_rnDSet__;
+text: .text%__1cOcompU_iRegNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__;
+text: .text%__1cSaddP_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPindOffset13OperNconstant_disp6kM_i_: ad_sparc.o;
+text: .text%__1cPindOffset13OperFscale6kM_i_: ad_sparc.o;
+text: .text%__1cPindOffset13OperNbase_position6kM_i_: ad_sparc.o;
+text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__;
+text: .text%__1cUcompI_iReg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cVcompP_iRegP_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQaddP_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQaddP_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_;
+text: .text%__1cIJVMStateIof_depth6kMi_p0_;
+text: .text%__1cNSharedRuntimeElrem6Fxx_x_;
+text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__;
+text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_;
+text: .text%__1cKo0RegPOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cSaddI_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cObranchConUNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJVectorSet2t6MpnFArena__v_;
+text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_;
+text: .text%__1cVcompP_iRegP_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_;
+text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__;
+text: .text%__1cJTraceTime2T6M_v_;
+text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_;
+text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_;
+text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_;
+text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__;
+text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_;
+text: .text%__1cLstoreI0NodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o;
+text: .text%__1cQaddI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cENode2t6Mp01_v_;
+text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__;
+text: .text%__1cKstoreINodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRshrI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_;
+text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cITypeFuncEhash6kM_i_;
+text: .text%__1cLBoxLockNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cMTypeKlassPtrEhash6kM_i_;
+text: .text%__1cMCallLeafNodeGOpcode6kM_i_;
+text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_;
+text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__;
+text: .text%__1cOcompU_iRegNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJiRegLOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cNflagsRegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cHOrINodeGOpcode6kM_i_;
+text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%JVM_GetCPMethodClassNameUTF;
+text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMflagsRegOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cLProfileDataPfollow_contents6M_v_: ciMethodData.o;
+text: .text%__1cLProfileDataPadjust_pointers6M_v_: ciMethodData.o;
+text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_;
+text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_;
+text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_;
+text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cHCompileYout_preserve_stack_slots6F_I_;
+text: .text%__1cIGraphKitLclean_stack6Mi_v_;
+text: .text%__1cKStoreBNodeGOpcode6kM_i_;
+text: .text%__1cLklassVtableToop_adjust_pointers6M_v_;
+text: .text%__1cLklassVtableToop_follow_contents6M_v_;
+text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_;
+text: .text%__1cJlabelOperFlabel6kM_pnFLabel__: ad_sparc.o;
+text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__;
+text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__;
+text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__: ad_sparc.o;
+text: .text%__1cRshlI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%JVM_IsNaN;
+text: .text%__1cNloadRangeNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKbranchNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cJStartNodeGOpcode6kM_i_;
+text: .text%__1cQregF_to_stkINodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cENodeDcmp6kMrk0_I_;
+text: .text%__1cHTypeIntFxdual6kM_pknEType__;
+text: .text%__1cIciObjectIencoding6M_pnI_jobject__;
+text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o;
+text: .text%__1cJAssemblerOpatched_branch6Fiii_i_;
+text: .text%__1cJAssemblerSbranch_destination6Fii_i_;
+text: .text%__1cRshlI_reg_imm5NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cENodeIadd_prec6Mp0_v_;
+text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__;
+text: .text%__1cSaddP_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_;
+text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_;
+text: .text%__1cMloadConDNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKTypeOopPtrHget_con6kM_i_;
+text: .text%__1cQsubI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cJloadLNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_;
+text: .text%__1cJLoadBNodeGOpcode6kM_i_;
+text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_;
+text: .text%__1cSvframeStreamCommonEnext6M_v_;
+text: .text%__1cIAddINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__: classes.o;
+text: .text%__1cMMergeMemNode2t6MpnENode__v_;
+text: .text%__1cOcompI_iRegNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__;
+text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPindOffset13OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cPindOffset13OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cPindOffset13OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_;
+text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__;
+text: .text%__1cIGraphKitQkill_dead_locals6M_v_;
+text: .text%__1cCosMvm_page_size6F_i_;
+text: .text%__1cRlock_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cVcompP_iRegP_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cUcompI_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o;
+text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_;
+text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cLklassItableToop_adjust_pointers6M_v_;
+text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_;
+text: .text%__1cLklassItableToop_follow_contents6M_v_;
+text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_;
+text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cNSafePointNodeGOpcode6kM_i_;
+text: .text%__1cJLoadPNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_;
+text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__;
+text: .text%__1cMloadConPNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIGraphKit2t6MpnIJVMState__v_;
+text: .text%__1cPconvI2L_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQPreserveJVMState2T6M_v_;
+text: .text%__1cRshrI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMloadConLNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLConvI2LNodeGOpcode6kM_i_;
+text: .text%__1cITypeLongFxmeet6kMpknEType__3_;
+text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_;
+text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_;
+text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_;
+text: .text%__1cLBoxLockNodeHsize_of6kM_I_;
+text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_;
+text: .text%JVM_GetCPFieldClassNameUTF;
+text: .text%__1cSaddI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNLoadKlassNodeGOpcode6kM_i_;
+text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__;
+text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__;
+text: .text%__1cOcompI_iRegNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRshlI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_;
+text: .text%__1cICmpINodeDsub6kMpknEType_3_3_;
+text: .text%__1cLRShiftINodeGOpcode6kM_i_;
+text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_;
+text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_;
+text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_;
+text: .text%__1cJloadSNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKStoreCNodeGOpcode6kM_i_;
+text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_;
+text: .text%__1cMstringStreamFwrite6MpkcI_v_;
+text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__;
+text: .text%__1cHRetNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_;
+text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_;
+text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o;
+text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cRloadConP_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cETypeFwiden6kMpk0_2_: type.o;
+text: .text%__1cLstoreI0NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__;
+text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__;
+text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__;
+text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__;
+text: .text%__1cPcompP_iRegPNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o;
+text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o;
+text: .text%__1cFStateK_sub_Op_If6MpknENode__v_;
+text: .text%__1cTciConstantPoolCacheDget6Mi_pv_;
+text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_;
+text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_;
+text: .text%__1cQsubI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cXmembar_acquire_lockNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQaddP_reg_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cPCountedLoopNodeGOpcode6kM_i_;
+text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_;
+text: .text%__1cIAndLNodeGOpcode6kM_i_;
+text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_;
+text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__;
+text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_;
+text: .text%__1cFParseFBlockKinit_graph6Mp0_v_;
+text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_;
+text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__;
+text: .text%__1cCosGmalloc6FI_pv_;
+text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_;
+text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_;
+text: .text%__1cIimmPOperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cIregDOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cICodeHeapLheader_size6F_I_;
+text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_;
+text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cFParseMdo_one_block6M_v_;
+text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_;
+text: .text%__1cLstoreB0NodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cIJVMStateLdebug_depth6kM_I_;
+text: .text%__1cENodeNadd_req_batch6Mp0I_v_;
+text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_;
+text: .text%__1cJloadFNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPVirtualCallDataKcell_count6M_i_: ciMethodData.o;
+text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__;
+text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__;
+text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_;
+text: .text%__1cIAddLNodeGOpcode6kM_i_;
+text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_;
+text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_;
+text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__;
+text: .text%__1cMFastLockNodeGOpcode6kM_i_;
+text: .text%__1cLConvL2INodeGOpcode6kM_i_;
+text: .text%__1cIXorINodeGOpcode6kM_i_;
+text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_;
+text: .text%__1cOcompU_iRegNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__;
+text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__;
+text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__;
+text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_;
+text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cILoadNodeHsize_of6kM_I_;
+text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__: rframe.o;
+text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__;
+text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_;
+text: .text%__1cEUTF8Hstrrchr6FpWiW_1_;
+text: .text%__1cPcompP_iRegPNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPsp_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_;
+text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_;
+text: .text%__1cRshrP_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cITypeLongEmake6Fxxi_pk0_;
+text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%JVM_GetCPMethodNameUTF;
+text: .text%__1cMtlsLoadPNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLstoreB0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIimmIOperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cNSharedRuntimeEldiv6Fxx_x_;
+text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o;
+text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o;
+text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__;
+text: .text%__1cQsubI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_;
+text: .text%__1cQaddP_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKmethodOperGmethod6kM_i_: ad_sparc.o;
+text: .text%__1cFKlassIsubklass6kM_p0_;
+text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__;
+text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o;
+text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__;
+text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_;
+text: .text%__1cIMulLNodeGOpcode6kM_i_;
+text: .text%__1cKReturnNodeKmatch_edge6kMI_I_;
+text: .text%__1cGOopMap2t6Mii_v_;
+text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJLoadSNodeGOpcode6kM_i_;
+text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__;
+text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o;
+text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_: classes.o;
+text: .text%__1cRloadConP_pollNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_;
+text: .text%__1cRcmpFastUnlockNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJLoadLNodeGOpcode6kM_i_;
+text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_;
+text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cKReturnNodeGOpcode6kM_i_;
+text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__;
+text: .text%__1cNflagsRegUOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cNCatchProjNodeEhash6kM_I_;
+text: .text%__1cEUTF8Ounicode_length6Fpkci_i_;
+text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_;
+text: .text%__1cNCallGenerator2t6MpnIciMethod__v_;
+text: .text%__1cKCompiledIC2t6MpnKRelocation__v_;
+text: .text%__1cKCompiledICOic_destination6kM_pC_;
+text: .text%__1cHTypeAryFxmeet6kMpknEType__3_;
+text: .text%__1cICallNodeJideal_reg6kM_I_: callnode.o;
+text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__;
+text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_;
+text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_;
+text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_;
+text: .text%__1cEUTF8Enext6FpkcpH_pc_;
+text: .text%__1cJVectorSetFClear6M_v_;
+text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_;
+text: .text%__1cCosEfree6Fpv_v_;
+text: .text%__1cRshrI_reg_imm5NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cYciExceptionHandlerStreamFcount6M_i_;
+text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_;
+text: .text%__1cIPhaseIFGFUnion6MII_v_;
+text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cILoopNodeGOpcode6kM_i_;
+text: .text%__1cICmpLNodeGOpcode6kM_i_;
+text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_;
+text: .text%__1cQaddI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cMindIndexOperJnum_edges6kM_I_: ad_sparc.o;
+text: .text%__1cIConLNodeGOpcode6kM_i_;
+text: .text%JVM_GetCPFieldSignatureUTF;
+text: .text%__1cENodeLnonnull_req6kM_p0_;
+text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Mi_v_;
+text: .text%__1cMelapsedTimerFstart6M_v_;
+text: .text%__1cMelapsedTimerEstop6M_v_;
+text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cSaddP_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_;
+text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_;
+text: .text%jni_DeleteLocalRef: jni.o;
+text: .text%__1cIGraphKit2t6M_v_;
+text: .text%__1cMoutputStreamDput6Mc_v_;
+text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_;
+text: .text%__1cRInterpretedRFrameEinit6M_v_;
+text: .text%__1cHMulNodeEhash6kM_I_;
+text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_;
+text: .text%__1cJLoadINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cINodeHashLhash_insert6MpnENode__v_;
+text: .text%__1cKstoreCNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cENodeLbottom_type6kM_pknEType__;
+text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__;
+text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__;
+text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_;
+text: .text%__1cLRegisterMap2t6Mpk0_v_;
+text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOcompI_iRegNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIciSymbolEmake6Fpkc_p0_;
+text: .text%__1cPorI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cGPcDesc2t6Miii_v_;
+text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__;
+text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_;
+text: .text%__1cPconvI2L_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cYcompareAndSwapL_boolNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__;
+text: .text%__1cWCallLeafNoFPDirectNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKbranchNodeJlabel_set6MrnFLabel_I_v_;
+text: .text%__1cKbranchNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOloadConI13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSaddL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%jni_GetObjectField: jni.o;
+text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_;
+text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__;
+text: .text%__1cQandL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o;
+text: .text%__1cQaddL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNloadKlassNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cJloadBNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cYcompareAndSwapL_boolNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__;
+text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_;
+text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_;
+text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__;
+text: .text%__1cHCompileKTracePhase2T6M_v_;
+text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_;
+text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__;
+text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_;
+text: .text%__1cIHaltNode2t6MpnENode_2_v_;
+text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__;
+text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cINodeHashJhash_find6MpknENode__p1_;
+text: .text%__1cQmulL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cSaddP_reg_imm13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_;
+text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_;
+text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_;
+text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_;
+text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_;
+text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMWarmCallInfoKalways_hot6F_p0_;
+text: .text%__1cTCreateExceptionNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLstoreB0NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__;
+text: .text%__1cITypeLongEmake6Fx_pk0_;
+text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_;
+text: .text%__1cKimmI13OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_;
+text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_;
+text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__;
+text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_;
+text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__;
+text: .text%__1cIProjNodeDcmp6kMrknENode__I_;
+text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_;
+text: .text%__1cFParseMprofile_call6MpnENode__v_;
+text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__;
+text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_;
+text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_;
+text: .text%__1cFParseHdo_call6M_v_;
+text: .text%__1cNloadConP0NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_;
+text: .text%__1cHTypeIntFwiden6kMpknEType__3_;
+text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKarrayKlassLobject_size6kMi_i_;
+text: .text%__1cKMemBarNodeEhash6kM_I_;
+text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__;
+text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o;
+text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_;
+text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_;
+text: .text%__1cMURShiftLNodeGOpcode6kM_i_;
+text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__;
+text: .text%__1cLProfileDataOtranslate_from6Mp0_v_: ciMethodData.o;
+text: .text%__1cRsarI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_;
+text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_;
+text: .text%__1cQxorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cNflagsRegLOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cQsubI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__;
+text: .text%__1cRshrI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_;
+text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_;
+text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__;
+text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cPciInstanceKlassFsuper6M_p0_;
+text: .text%__1cIBoolNodeHsize_of6kM_I_;
+text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o;
+text: .text%__1cPcompP_iRegPNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__;
+text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__;
+text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o;
+text: .text%__1cOstackSlotLOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_;
+text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__;
+text: .text%__1cICodeHeapSallocated_capacity6kM_I_;
+text: .text%__1cICHeapObj2n6FI_pv_;
+text: .text%__1cQsubL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFTypeDEhash6kM_i_;
+text: .text%__1cKTypeRawPtrHget_con6kM_i_;
+text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__;
+text: .text%jni_ExceptionOccurred: jni.o;
+text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_;
+text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o;
+text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIimmLOperJconstantL6kM_x_: ad_sparc_clone.o;
+text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_;
+text: .text%jni_GetByteArrayRegion: jni.o;
+text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_;
+text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o;
+text: .text%__1cHCompileFstart6kM_pnJStartNode__;
+text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o;
+text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_;
+text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__;
+text: .text%__1cIParmNodeJideal_reg6kM_I_;
+text: .text%__1cQandL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIMachNodeRget_base_and_disp6kMrirpknHTypePtr__pknENode__;
+text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__;
+text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cRbranchLoopEndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_;
+text: .text%jni_GetArrayLength: jni.o;
+text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_;
+text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOClearArrayNodeGOpcode6kM_i_;
+text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_;
+text: .text%__1cVCompressedWriteStreamEgrow6M_v_;
+text: .text%JVM_Write;
+text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_;
+text: .text%__1cIciMethod2t6MnMmethodHandle__v_;
+text: .text%__1cIHaltNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLOpaque1NodeGOpcode6kM_i_;
+text: .text%__1cSbranchCon_longNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_;
+text: .text%__1cUcompU_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%JVM_RawMonitorEnter;
+text: .text%JVM_RawMonitorExit;
+text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__;
+text: .text%__1cMTypeKlassPtrKadd_offset6kMi_pknHTypePtr__;
+text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_;
+text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_;
+text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o;
+text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_;
+text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o;
+text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o;
+text: .text%__1cSandI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_;
+text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__;
+text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cFParseFmerge6Mi_v_;
+text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cJTypeTupleFxdual6kM_pknEType__;
+text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cPorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLRethrowNodeGOpcode6kM_i_;
+text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cICodeHeapIcapacity6kM_I_;
+text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o;
+text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o;
+text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__;
+text: .text%__1cFArena2T6M_v_;
+text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__;
+text: .text%__1cOCallRelocationFvalue6M_pC_: relocInfo.o;
+text: .text%__1cHoopDescSslow_identity_hash6M_i_;
+text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_;
+text: .text%__1cLPCTableNodeEhash6kM_I_;
+text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o;
+text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_;
+text: .text%__1cOloadConI13NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cMtlsLoadPNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMPhaseChaitinNFind_compress6MI_I_;
+text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_;
+text: .text%__1cFframeVinterpreter_frame_bci6kM_i_;
+text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__;
+text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__;
+text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_;
+text: .text%__1cNGCTaskManagerPnote_completion6MI_v_;
+text: .text%__1cQandI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__;
+text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_;
+text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__;
+text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__;
+text: .text%jni_GetSuperclass: jni.o;
+text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_;
+text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_;
+text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_;
+text: .text%__1cIMulINodeGOpcode6kM_i_;
+text: .text%__1cRcompL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNloadKlassNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cGGCTask2t6M_v_;
+text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o;
+text: .text%__1cObranchConPNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cITypeFuncFxdual6kM_pknEType__;
+text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_;
+text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_;
+text: .text%__1cJcmpOpOperFccode6kM_i_: ad_sparc_clone.o;
+text: .text%__1cGciType2t6MnLKlassHandle__v_;
+text: .text%__1cHciKlass2t6MnLKlassHandle__v_;
+text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_;
+text: .text%__1cQxorI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJloadLNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIregFOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cKcmpOpPOperFccode6kM_i_: ad_sparc_clone.o;
+text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_;
+text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_: connode.o;
+text: .text%__1cObranchConPNodeJlabel_set6MrnFLabel_I_v_;
+text: .text%__1cObranchConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cICHeapObj2k6Fpv_v_;
+text: .text%__1cSaddL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_;
+text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRInvocationCounterJset_carry6M_v_;
+text: .text%__1cFArena2t6M_v_;
+text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_;
+text: .text%__1cRInterpreterOopMap2T6M_v_;
+text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_;
+text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_;
+text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_;
+text: .text%__1cRInterpreterOopMap2t6M_v_;
+text: .text%__1cISubINodeDsub6kMpknEType_3_3_;
+text: .text%__1cFParseOreturn_current6MpnENode__v_;
+text: .text%__1cRsarI_reg_imm5NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_;
+text: .text%__1cMloadConLNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__;
+text: .text%jni_GetPrimitiveArrayCritical: jni.o;
+text: .text%jni_ReleasePrimitiveArrayCritical: jni.o;
+text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_;
+text: .text%__1cSmembar_releaseNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJimmU5OperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_;
+text: .text%__1cLOpaque1NodeEhash6kM_I_;
+text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__;
+text: .text%__1cSbranchCon_longNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_;
+text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNbranchConNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_;
+text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__;
+text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKStoreLNodeGOpcode6kM_i_;
+text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o;
+text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__;
+text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_;
+text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_;
+text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_;
+text: .text%__1cRsarI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRbranchLoopEndNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQmulL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLstoreP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_;
+text: .text%__1cFTypeFEhash6kM_i_;
+text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_;
+text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_;
+text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_;
+text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__;
+text: .text%__1cFArenaEused6kM_I_;
+text: .text%__1cFParseLbuild_exits6M_v_;
+text: .text%__1cFParseIdo_exits6M_v_;
+text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_;
+text: .text%__1cIBoolNodeDcmp6kMrknENode__I_;
+text: .text%__1cFParsePdo_method_entry6M_v_;
+text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_;
+text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_;
+text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_;
+text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_;
+text: .text%jni_IsSameObject: jni.o;
+text: .text%__1cMloadConINodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNbranchConNodeJlabel_set6MrnFLabel_I_v_;
+text: .text%__1cNbranchConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQandL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cIciObjectFklass6M_pnHciKlass__;
+text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__;
+text: .text%__1cPThreadLocalNodeGOpcode6kM_i_;
+text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_;
+text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_;
+text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_;
+text: .text%__1cIIndexSetEswap6Mp0_v_;
+text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_;
+text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_;
+text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__;
+text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_;
+text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o;
+text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_;
+text: .text%__1cKstoreBNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__;
+text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_;
+text: .text%__1cENodeGOpcode6kM_i_;
+text: .text%__1cRshrP_reg_imm5NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQandI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_;
+text: .text%__1cGBitMapIset_from6M0_v_;
+text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__;
+text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_;
+text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cFChunk2n6FII_pv_;
+text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_;
+text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cILoadNodeDcmp6kMrknENode__I_;
+text: .text%__1cIciObject2t6M_v_;
+text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_;
+text: .text%__1cRcompL_reg_conNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cHCompileXin_preserve_stack_slots6M_I_;
+text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__;
+text: .text%__1cMciMethodData2t6M_v_;
+text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_;
+text: .text%__1cGRFrameGcaller6M_p0_;
+text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cRshrP_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_;
+text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o;
+text: .text%__1cMloadConFNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cQaddL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cISubINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_;
+text: .text%__1cQdivD_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_;
+text: .text%__1cKTypeOopPtrEhash6kM_i_;
+text: .text%__1cIMinINodeGOpcode6kM_i_;
+text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_;
+text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_;
+text: .text%JVM_GetMethodIxModifiers;
+text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cPconvI2L_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLLShiftINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%JVM_IsInterface;
+text: .text%__1cPorI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIDivINodeGOpcode6kM_i_;
+text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_;
+text: .text%__1cICodeHeapIallocate6MI_pv_;
+text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__;
+text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o;
+text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cLRShiftLNodeGOpcode6kM_i_;
+text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__;
+text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_;
+text: .text%__1cUPipeline_Use_Element2t6M_v_: output.o;
+text: .text%__1cRshrL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_;
+text: .text%__1cNSCMemProjNodeGOpcode6kM_i_;
+text: .text%__1cNimmP_pollOperEtype6kM_pknEType__: ad_sparc_clone.o;
+text: .text%__1cRloadConP_pollNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_;
+text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__;
+text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_;
+text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__;
+text: .text%__1cLRegisterMapIpd_clear6M_v_;
+text: .text%__1cHUNICODEHas_utf86FpHi_pc_;
+text: .text%__1cLstoreP0NodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_;
+text: .text%__1cQmulL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRshrP_reg_imm5NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__;
+text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_;
+text: .text%__1cKstoreLNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRbranchLoopEndNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_;
+text: .text%__1cSconvI2D_helperNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_;
+text: .text%__1cUcompI_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOMacroAssemblerNverify_thread6M_v_;
+text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__;
+text: .text%__1cSbranchCon_longNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cHnmethodVcleanup_inline_caches6M_v_;
+text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_;
+text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_;
+text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_;
+text: .text%__1cHciField2t6MpnPfieldDescriptor__v_;
+text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_;
+text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cYcompareAndSwapL_boolNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFKlassMnext_sibling6kM_p0_;
+text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__;
+text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_;
+text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__;
+text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%__1cJimmU5OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cLBlock_ArrayEgrow6MI_v_;
+text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_;
+text: .text%__1cKcmpOpPOperGnegate6M_v_: ad_sparc_clone.o;
+text: .text%__1cObranchConPNodeGnegate6M_v_: ad_sparc_misc.o;
+text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_;
+text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHRetNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPconvL2I_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o;
+text: .text%__1cQxorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__;
+text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__;
+text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_;
+text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_;
+text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o;
+text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_;
+text: .text%__1cQandL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__;
+text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_;
+text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: callGenerator.o;
+text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o;
+text: .text%__1cJcmpOpOperGnegate6M_v_: ad_sparc_clone.o;
+text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%jni_SetObjectArrayElement: jni.o;
+text: .text%__1cSandI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cObranchConUNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRshlL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQandI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSandI_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_;
+text: .text%__1cZresource_reallocate_bytes6FpcII_0_;
+text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_;
+text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIMaxINodeGOpcode6kM_i_;
+text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_;
+text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_;
+text: .text%__1cMWarmCallInfoLalways_cold6F_p0_;
+text: .text%__1cIimmDOperJconstantD6kM_d_: ad_sparc_clone.o;
+text: .text%__1cIPhaseIFGEinit6MI_v_;
+text: .text%__1cJPhaseLiveHcompute6MI_v_;
+text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__;
+text: .text%__1cSaddI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cFTypeDEmake6Fd_pk0_;
+text: .text%__1cPThreadRootsTaskEname6M_pc_: psTasks.o;
+text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_;
+text: .text%__1cRshlI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQaddL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_;
+text: .text%__1cIMachOperEtype6kM_pknEType__;
+text: .text%JVM_GetCPClassNameUTF;
+text: .text%__1cKBufferBlobGcreate6Fpkci_p0_;
+text: .text%__1cKcmpOpUOperFccode6kM_i_: ad_sparc_clone.o;
+text: .text%__1cObranchConUNodeJlabel_set6MrnFLabel_I_v_;
+text: .text%__1cObranchConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%jni_GetStringLength: jni.o;
+text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__;
+text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cJloadPNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMoutputStream2t6Mi_v_;
+text: .text%__1cMstringStreamJas_string6M_pc_;
+text: .text%__1cMstringStream2T6M_v_;
+text: .text%__1cMstringStream2t6MI_v_;
+text: .text%__1cIGraphKitMreset_memory6M_pnENode__;
+text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cENodeMsetup_is_top6M_v_;
+text: .text%__1cIGotoNodeGOpcode6kM_i_;
+text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_;
+text: .text%__1cNbranchConNodeGnegate6M_v_: ad_sparc_misc.o;
+text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_;
+text: .text%__1cKcmpOpPOperFequal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_;
+text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_;
+text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_;
+text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cSaddL_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_;
+text: .text%__1cEDict2T6M_v_;
+text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_;
+text: .text%__1cLOopRecorder2t6MpnFArena__v_;
+text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__;
+text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__;
+text: .text%__1cIModINodeGOpcode6kM_i_;
+text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_;
+text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__;
+text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_;
+text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_;
+text: .text%__1cISubLNodeGOpcode6kM_i_;
+text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_;
+text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__;
+text: .text%__1cKciTypeFlowHdo_flow6M_v_;
+text: .text%__1cKciTypeFlowKflow_types6M_v_;
+text: .text%__1cKciTypeFlowKmap_blocks6M_v_;
+text: .text%__1cMloadConPNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_;
+text: .text%__1cIciMethodJload_code6M_v_;
+text: .text%__1cMciMethodDataJload_data6M_v_;
+text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__;
+text: .text%__1cOcompU_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIGraphKitGmemory6MI_pnENode__;
+text: .text%__1cIHaltNodeEhash6kM_I_: classes.o;
+text: .text%__1cFKlassQup_cast_abstract6M_p0_;
+text: .text%__1cKReturnNodeEhash6kM_I_: classes.o;
+text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_;
+text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__;
+text: .text%__1cIAndINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_;
+text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_;
+text: .text%__1cLOpaque2NodeGOpcode6kM_i_;
+text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_;
+text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_;
+text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_;
+text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o;
+text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_;
+text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_;
+text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__;
+text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_;
+text: .text%jni_GetStringUTFLength: jni.o;
+text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_;
+text: .text%jni_GetStringUTFRegion: jni.o;
+text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_;
+text: .text%__1cHUNICODELutf8_length6FpHi_i_;
+text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_;
+text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__;
+text: .text%__1cRsarI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cUcompU_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQmulL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cUcompU_iReg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKPerfStringKset_string6Mpkc_v_;
+text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_;
+text: .text%JVM_InternString;
+text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_;
+text: .text%__1cCosGrandom6F_l_;
+text: .text%__1cKimmP13OperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cVcompP_iRegP_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cRcompL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o;
+text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o;
+text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o;
+text: .text%__1cICodeHeapKdeallocate6Mpv_v_;
+text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_;
+text: .text%__1cKTypeRawPtrEmake6FpC_pk0_;
+text: .text%jni_SetIntField: jni.o;
+text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_;
+text: .text%__1cKBufferBlobEfree6Fp0_v_;
+text: .text%__1cPconvL2I_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__;
+text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_;
+text: .text%__1cVshrL_reg_imm6_L2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: graphKit.o;
+text: .text%__1cWImplicitExceptionTableGappend6MII_v_;
+text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o;
+text: .text%__1cQxorI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_;
+text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_;
+text: .text%__1cSandI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIPhaseIFGISquareUp6M_v_;
+text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_;
+text: .text%__1cKCodeBuffer2T6M_v_;
+text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__;
+text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cMURShiftINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cRcompL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_;
+text: .text%__1cFKlassWappend_to_sibling_list6M_v_;
+text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__;
+text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_;
+text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_;
+text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__;
+text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__;
+text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_;
+text: .text%__1cNinstanceKlassQinit_implementor6M_v_;
+text: .text%__1cPClassFileStream2t6MpCipc_v_;
+text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_;
+text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__;
+text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_;
+text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__;
+text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__;
+text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_;
+text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__;
+text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_;
+text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_;
+text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_;
+text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_;
+text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_;
+text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cKcmpOpPOperJnot_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cMPhaseIterGVNIoptimize6M_v_;
+text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_;
+text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o;
+text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o;
+text: .text%__1cHMemNodeHsize_of6kM_I_;
+text: .text%__1cFVTuneQstart_class_load6F_v_;
+text: .text%__1cSThreadProfilerMark2T6M_v_;
+text: .text%__1cFVTuneOend_class_load6F_v_;
+text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__;
+text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o;
+text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_;
+text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_;
+text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cQmodI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cKCMoveINodeGOpcode6kM_i_;
+text: .text%__1cLLShiftLNodeGOpcode6kM_i_;
+text: .text%__1cYcompareAndSwapL_boolNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_;
+text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_;
+text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_sparc_clone.o;
+text: .text%__1cObranchConUNodeGnegate6M_v_: ad_sparc_misc.o;
+text: .text%__1cQaddP_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_;
+text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_;
+text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_;
+text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_;
+text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_;
+text: .text%JVM_GetMethodIxSignatureUTF;
+text: .text%JVM_GetMethodIxMaxStack;
+text: .text%JVM_GetMethodIxArgsSize;
+text: .text%JVM_GetMethodIxByteCodeLength;
+text: .text%JVM_GetMethodIxExceptionIndexes;
+text: .text%JVM_GetMethodIxByteCode;
+text: .text%JVM_GetMethodIxExceptionsCount;
+text: .text%__1cLstoreP0NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cHCmpNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_;
+text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o;
+text: .text%__1cQmulD_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__;
+text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_;
+text: .text%__1cLBuildCutout2T6M_v_;
+text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJloadFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cJimmP0OperEtype6kM_pknEType__: ad_sparc_clone.o;
+text: .text%__1cLstoreI0NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_;
+text: .text%__1cHNTarjanICOMPRESS6M_v_;
+text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_;
+text: .text%__1cQsubL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOcompI_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_;
+text: .text%__1cQandI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__;
+text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_;
+text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLstoreI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_;
+text: .text%__1cSaddL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQshrL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_;
+text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o;
+text: .text%__1cHMatcherLfind_shared6MpnENode__v_;
+text: .text%__1cJStartNodeHsize_of6kM_I_;
+text: .text%__1cHMatcherFxform6MpnENode_i_2_;
+text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_;
+text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__: rframe.o;
+text: .text%__1cQmodI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRinterpretedVFrameDbci6kM_i_;
+text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cIAndINodeGmul_id6kM_pknEType__: classes.o;
+text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cRcompL_reg_conNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_;
+text: .text%__1cMnegF_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_;
+text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_;
+text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_;
+text: .text%__1cOMethodLivenessQcompute_liveness6M_v_;
+text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_;
+text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_;
+text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_;
+text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_;
+text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_;
+text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cJTimeStampGupdate6M_v_;
+text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_;
+text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cMloadConDNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__;
+text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQaddL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPCountedLoopNodeHsize_of6kM_I_: classes.o;
+text: .text%__1cIProjNodeJideal_reg6kM_I_;
+text: .text%__1cQaddI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQcmovI_reg_ltNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRsubI_zero_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJcmpOpOperFequal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_;
+text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o;
+text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_;
+text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_;
+text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o;
+text: .text%__1cNflagsRegLOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_;
+text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_;
+text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_;
+text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_sparc_clone.o;
+text: .text%JVM_GetFieldIxModifiers;
+text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_;
+text: .text%__1cRScavengeRootsTaskEname6M_pc_: psTasks.o;
+text: .text%JVM_IsConstructorIx;
+text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_;
+text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_;
+text: .text%__1cSaddP_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__;
+text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_;
+text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_;
+text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__;
+text: .text%__1cKg1RegIOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_;
+text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o;
+text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o;
+text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o;
+text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_;
+text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cKo0RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_;
+text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__;
+text: .text%__1cPBytecode_invokeFindex6kM_i_;
+text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o;
+text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_;
+text: .text%__1cVPreserveExceptionMark2T6M_v_;
+text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_;
+text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o;
+text: .text%__1cMoutputStreamFprint6MpkcE_v_;
+text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_;
+text: .text%__1cHCompileQsync_stack_slots6kM_i_;
+text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cJLoadFNodeGOpcode6kM_i_;
+text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o;
+text: .text%__1cHPhiNodeDcmp6kMrknENode__I_;
+text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_;
+text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRloadConP_pollNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_;
+text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_: ad_sparc.o;
+text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_;
+text: .text%__1cRshrL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_;
+text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_;
+text: .text%__1cPcompP_iRegPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSxorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_;
+text: .text%__1cIAndLNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_: psScavenge.o;
+text: .text%jni_ExceptionCheck: jni.o;
+text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_;
+text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__;
+text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_;
+text: .text%__1cQshlI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_;
+text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_;
+text: .text%__1cJVectorSetGslamin6Mrk0_v_;
+text: .text%JVM_Clone;
+text: .text%__1cRAbstractAssemblerFflush6M_v_;
+text: .text%__1cITypeLongFxdual6kM_pknEType__;
+text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_;
+text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_;
+text: .text%__1cOstackSlotLOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRshrL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLOpaque2NodeEhash6kM_I_;
+text: .text%__1cJloadFNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cUcompU_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__;
+text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__;
+text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_;
+text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_;
+text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_;
+text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o;
+text: .text%__1cIMulINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_;
+text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__;
+text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__;
+text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_;
+text: .text%jni_NewObject: jni.o;
+text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_;
+text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__;
+text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__;
+text: .text%__1cJNode_ListEyank6MpnENode__v_;
+text: .text%__1cMPhaseChaitinISimplify6M_v_;
+text: .text%__1cNIdealLoopTreeIset_nest6MI_i_;
+text: .text%__1cSCallLeafDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_;
+text: .text%__1cMStartOSRNodeGOpcode6kM_i_;
+text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIMulLNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cLcmpD_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJcmpOpOperEless6kM_i_: ad_sparc_clone.o;
+text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_;
+text: .text%__1cKType_ArrayEgrow6MI_v_;
+text: .text%__1cNloadConP0NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPconvF2D_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRshrL_reg_imm6NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_;
+text: .text%__1cVshrL_reg_imm6_L2INodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_;
+text: .text%__1cLstoreB0NodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cRshrI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_;
+text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cNSafePointNodeLpop_monitor6M_v_;
+text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_;
+text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__;
+text: .text%__1cOstackSlotIOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_;
+text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_;
+text: .text%__1cQsubI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cFKlassDLCA6Mp0_1_;
+text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_;
+text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_;
+text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_;
+text: .text%__1cRcompL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRshlL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRloadConP_pollNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQshlL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_;
+text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSCallLeafDirectNodeKmethod_set6Mi_v_;
+text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: cfgnode.o;
+text: .text%__1cRcompL_reg_conNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_;
+text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_;
+text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__;
+text: .text%__1cOPhaseIdealLoopKDominators6M_v_;
+text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_;
+text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_;
+text: .text%jni_NewGlobalRef: jni.o;
+text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_;
+text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cYcompareAndSwapL_boolNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cMPhaseChaitinFSplit6MI_I_;
+text: .text%__1cMPhaseChaitinHcompact6M_v_;
+text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_;
+text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_;
+text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_;
+text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQshlI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cKPSYoungGenNused_in_bytes6kM_I_;
+text: .text%__1cOMachEpilogNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_;
+text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o;
+text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_;
+text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_;
+text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_;
+text: .text%JVM_FillInStackTrace;
+text: .text%__1cKJavaThreadGactive6F_p0_;
+text: .text%__1cKstoreFNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_;
+text: .text%__1cMVirtualSpaceNreserved_size6kM_I_;
+text: .text%__1cICodeHeapMmax_capacity6kM_I_;
+text: .text%__1cRsubI_zero_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cHTypePtrFxmeet6kMpknEType__3_;
+text: .text%__1cNflagsRegFOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cFParseWensure_phis_everywhere6M_v_;
+text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o;
+text: .text%__1cIDivLNodeGOpcode6kM_i_;
+text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_;
+text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_;
+text: .text%__1cNmethodOopDescVclear_native_function6M_v_;
+text: .text%__1cOloadConL13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQsubL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%jio_snprintf;
+text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o;
+text: .text%__1cSmulI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%jni_NewLocalRef: jni.o;
+text: .text%__1cIMulDNodeGOpcode6kM_i_;
+text: .text%__1cLStrCompNodeGOpcode6kM_i_;
+text: .text%__1cQcmovI_reg_gtNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_;
+text: .text%__1cKStoreFNodeGOpcode6kM_i_;
+text: .text%__1cLConvD2INodeGOpcode6kM_i_;
+text: .text%__1cIAddLNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cKReturnNodeJideal_reg6kM_I_: classes.o;
+text: .text%jni_DeleteGlobalRef: jni.o;
+text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_;
+text: .text%__1cVPatchingRelocIteratorHprepass6M_v_;
+text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_;
+text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cIAndLNodeGmul_id6kM_pknEType__: classes.o;
+text: .text%__1cJOopMapSet2t6M_v_;
+text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%JVM_GetCPMethodModifiers;
+text: .text%jni_GetObjectArrayElement: jni.o;
+text: .text%__1cFParseKarray_load6MnJBasicType__v_;
+text: .text%jni_SetLongField: jni.o;
+text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_;
+text: .text%__1cJOopMapSetHcopy_to6MpC_v_;
+text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_;
+text: .text%__1cJOopMapSetJheap_size6kM_i_;
+text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_;
+text: .text%__1cIJVMState2t6Mi_v_;
+text: .text%__1cIAndLNodeKadd_opcode6kM_i_: classes.o;
+text: .text%__1cIAndLNodeKmul_opcode6kM_i_: classes.o;
+text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cMMachProjNodeHsize_of6kM_I_: classes.o;
+text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_;
+text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_;
+text: .text%__1cLOopRecorderIoop_size6M_i_;
+text: .text%__1cYDebugInformationRecorderJdata_size6M_i_;
+text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_;
+text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_;
+text: .text%__1cHnmethodKtotal_size6kM_i_;
+text: .text%__1cbFunnecessary_membar_volatileNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMloadConLNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cFParseNadd_safepoint6M_v_;
+text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_;
+text: .text%__1cLPhaseValues2t6Mp0_v_;
+text: .text%__1cQcmovI_reg_ltNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_: coalesce.o;
+text: .text%__1cHCompilebBregister_library_intrinsics6M_v_;
+text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_;
+text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_;
+text: .text%__1cIPhaseCFGJbuild_cfg6M_I_;
+text: .text%__1cHCompileEInit6Mi_v_;
+text: .text%__1cVExceptionHandlerTable2t6Mi_v_;
+text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_;
+text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_;
+text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_;
+text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_;
+text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_;
+text: .text%__1cLBlock_Array2t6MpnFArena__v_: block.o;
+text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_;
+text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_;
+text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_;
+text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_;
+text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_;
+text: .text%__1cHCompileICode_Gen6M_v_;
+text: .text%__1cFArena2t6MI_v_;
+text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_;
+text: .text%__1cHMatcherVinit_first_stack_mask6M_v_;
+text: .text%__1cFArenaNmove_contents6Mp0_1_;
+text: .text%__1cFArenaRdestruct_contents6M_v_;
+text: .text%__1cIPhaseIFG2t6MpnFArena__v_;
+text: .text%__1cFDictIFreset6MpknEDict__v_;
+text: .text%__1cHMatcherFmatch6M_v_;
+text: .text%__1cHMatcher2t6MrnJNode_List__v_;
+text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_;
+text: .text%__1cETypeKInitialize6FpnHCompile__v_;
+text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_;
+text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_;
+text: .text%__1cOCompileWrapper2t6MpnHCompile__v_;
+text: .text%__1cIPhaseCFGKDominators6M_v_;
+text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_;
+text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_;
+text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_;
+text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_;
+text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_;
+text: .text%__1cHCompileGOutput6M_v_;
+text: .text%__1cWImplicitExceptionTableIset_size6MI_v_;
+text: .text%__1cHCompileMBuildOopMaps6M_v_;
+text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o;
+text: .text%__1cMPhaseChaitinMfixup_spills6M_v_;
+text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_;
+text: .text%__1cHCompileLFill_buffer6M_v_;
+text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o;
+text: .text%__1cENodeHrm_prec6MI_v_;
+text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_;
+text: .text%JVM_DoPrivileged;
+text: .text%__1cRsubI_zero_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIConDNodeGOpcode6kM_i_;
+text: .text%__1cObranchConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cTresource_free_bytes6FpcI_v_;
+text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_;
+text: .text%__1cRcompL_reg_conNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_;
+text: .text%__1cPconvL2I_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cFciEnvKcompile_id6M_I_;
+text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__;
+text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__;
+text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cKCodeBuffer2t6MpCi_v_;
+text: .text%__1cVshrL_reg_imm6_L2INodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cIciMethodRinstructions_size6M_i_;
+text: .text%__1cSmulI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cCosXthread_local_storage_at6Fi_pv_;
+text: .text%__1cMindIndexOperNconstant_disp6kM_i_: ad_sparc.o;
+text: .text%__1cMindIndexOperOindex_position6kM_i_: ad_sparc.o;
+text: .text%__1cMindIndexOperFscale6kM_i_: ad_sparc.o;
+text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: assembler_sparc.o;
+text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_;
+text: .text%__1cMindIndexOperNbase_position6kM_i_: ad_sparc.o;
+text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_;
+text: .text%__1cGTarjanICOMPRESS6M_v_;
+text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cICmpDNodeGOpcode6kM_i_;
+text: .text%__1cNloadConL0NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIMulLNodeGmul_id6kM_pknEType__: classes.o;
+text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_;
+text: .text%__1cVCallRuntimeDirectNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLstoreB0NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_;
+text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cJloadPNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_;
+text: .text%__1cLRShiftINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o;
+text: .text%__1cSconvI2D_helperNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o;
+text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o;
+text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_;
+text: .text%__1cQregP_to_stkPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_;
+text: .text%__1cJTimeStampSticks_since_update6kM_x_;
+text: .text%__1cQmodI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_;
+text: .text%__1cURethrowExceptionNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cQcmovI_reg_ltNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLstoreB0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSaddI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cJcmpOpOperHgreater6kM_i_: ad_sparc_clone.o;
+text: .text%__1cJimmL0OperJconstantL6kM_x_: ad_sparc_clone.o;
+text: .text%__1cJimmI0OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_;
+text: .text%__1cOloadConL13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNObjectMonitorHis_busy6kM_i_;
+text: .text%JVM_GetClassNameUTF;
+text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_;
+text: .text%__1cVshrL_reg_imm6_L2INodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKcmpOpFOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o;
+text: .text%__1cTmembar_volatileNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_;
+text: .text%__1cJCmpL3NodeGOpcode6kM_i_;
+text: .text%JVM_FindLoadedClass;
+text: .text%__1cIMulLNodeKadd_opcode6kM_i_: classes.o;
+text: .text%__1cIMulLNodeKmul_opcode6kM_i_: classes.o;
+text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_;
+text: .text%__1cIConFNodeGOpcode6kM_i_;
+text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cQmulD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIModLNodeGOpcode6kM_i_;
+text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_;
+text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_;
+text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__;
+text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cFTypeFEmake6Ff_pk0_;
+text: .text%__1cIimmFOperJconstantF6kM_f_: ad_sparc_clone.o;
+text: .text%__1cEUTF8Ounicode_length6Fpkc_i_;
+text: .text%__1cCosRcurrent_thread_id6F_i_;
+text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_;
+text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_;
+text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_;
+text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__;
+text: .text%__1cPorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_;
+text: .text%__1cITypeLongFwiden6kMpknEType__3_;
+text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__;
+text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_;
+text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%JVM_FindClassFromClass;
+text: .text%__1cRshrP_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cObranchConFNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQshrI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_;
+text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_;
+text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_;
+text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_;
+text: .text%JVM_NewInstanceFromConstructor;
+text: .text%__1cFParseFBlockMadd_new_path6M_i_;
+text: .text%__1cIimmPOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cQsubL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLConvF2DNodeGOpcode6kM_i_;
+text: .text%__1cLConvI2DNodeGOpcode6kM_i_;
+text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__;
+text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cKcmpOpPOperNgreater_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cKimmL13OperJconstantL6kM_x_: ad_sparc_clone.o;
+text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_;
+text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_;
+text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_;
+text: .text%__1cQshlI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_;
+text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_;
+text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__;
+text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cJcmpOpOperKless_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__;
+text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cMindirectOperNconstant_disp6kM_i_: ad_sparc.o;
+text: .text%__1cMindirectOperNbase_position6kM_i_: ad_sparc.o;
+text: .text%__1cIAddLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cMindirectOperFscale6kM_i_: ad_sparc.o;
+text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o;
+text: .text%__1cSsubL_reg_reg_2NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%jni_NewString: jni.o;
+text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__;
+text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__;
+text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__;
+text: .text%__1cIGraphKitMnext_monitor6M_i_;
+text: .text%__1cLBoxLockNode2t6Mi_v_;
+text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__;
+text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__;
+text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cNloadConP0NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKcmpOpUOperEless6kM_i_: ad_sparc_clone.o;
+text: .text%__1cQaddF_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_;
+text: .text%lwp_mutex_init: os_solaris.o;
+text: .text%__1cRsubI_zero_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cFframeLnmethods_do6M_v_;
+text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__;
+text: .text%__1cQnotemp_iRegIOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__;
+text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o;
+text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o;
+text: .text%__1cCosPhint_no_preempt6F_v_;
+text: .text%__1cOcmovII_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIMulLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o;
+text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_;
+text: .text%__1cRsarL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__;
+text: .text%__1cSstring_compareNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cFciEnv2T6M_v_;
+text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_;
+text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o;
+text: .text%__1cJcmpOpOperJnot_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cGvframeDtop6kM_p0_;
+text: .text%__1cOCompiledRFrameEinit6M_v_;
+text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_;
+text: .text%__1cIXorINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_;
+text: .text%__1cOMacroAssemblerLsave_thread6MkpnMRegisterImpl__v_;
+text: .text%__1cOcmovII_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMloadConINodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRshlL_reg_imm6NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cFParseGdo_new6M_v_;
+text: .text%__1cIimmIOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cQmodI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o;
+text: .text%jni_GetObjectClass: jni.o;
+text: .text%__1cSxorI_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOMacroAssemblerFalign6Mi_v_;
+text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_;
+text: .text%__1cKManagementJtimestamp6F_x_;
+text: .text%__1cIPSOldGenPupdate_counters6M_v_;
+text: .text%__1cQshrI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cFForteNregister_stub6FpkcpC3_v_;
+text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_;
+text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__;
+text: .text%__1cTloadL_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cOMacroAssemblerVreset_last_Java_frame6M_v_;
+text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_2_v_;
+text: .text%__1cSstring_compareNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cQregF_to_stkINodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cINodeHash2t6MpnFArena_I_v_;
+text: .text%__1cPconvI2L_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_;
+text: .text%__1cLPhaseValues2t6MpnFArena_I_v_;
+text: .text%__1cJStubQdDueueGcommit6Mi_v_;
+text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__;
+text: .text%__1cOcmovII_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKstoreFNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOMacroAssemblerKsave_frame6Mi_v_;
+text: .text%__1cSmulI_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLstoreC0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_;
+text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_;
+text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_;
+text: .text%JVM_FindClassFromClassLoader;
+text: .text%JVM_FindClassFromBootLoader;
+text: .text%signalHandler;
+text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o;
+text: .text%JVM_handle_solaris_signal;
+text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__;
+text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o;
+text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_;
+text: .text%__1cKConv2BNodeGOpcode6kM_i_;
+text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_;
+text: .text%JVM_IHashCode;
+text: .text%__1cSconvI2D_helperNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cJStartNodeJideal_reg6kM_I_: callnode.o;
+text: .text%__1cOMacroAssemblerbBcheck_and_forward_exception6MpnMRegisterImpl__v_;
+text: .text%__1cQcmovI_reg_ltNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQandL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__: phaseX.o;
+text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_;
+text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_;
+text: .text%JVM_GetClassLoader;
+text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_;
+text: .text%__1cCosRelapsed_frequency6F_x_;
+text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_;
+text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_;
+text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_;
+text: .text%__1cKScheduling2t6MpnFArena_rnHCompile__v_;
+text: .text%__1cKSchedulingMDoScheduling6M_v_;
+text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_;
+text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_;
+text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_;
+text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o;
+text: .text%__1cFframeMpd_gc_epilog6M_v_;
+text: .text%__1cMelapsedTimerHseconds6kM_d_;
+text: .text%__1cJStealTaskEname6M_pc_: psTasks.o;
+text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o;
+text: .text%__1cFframeLgc_epilogue6M_v_;
+text: .text%__1cFframeLgc_prologue6M_v_;
+text: .text%__1cTOldToYoungRootsTaskEname6M_pc_: psTasks.o;
+text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_;
+text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_;
+text: .text%__1cNGCTaskManagerMnote_release6MI_v_;
+text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_;
+text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_;
+text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_;
+text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_;
+text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_;
+text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_;
+text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_;
+text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_;
+text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_;
+text: .text%__1cIciMethodRbuild_method_data6M_v_;
+text: .text%__1cHCompileIOptimize6M_v_;
+text: .text%__1cHCompileLFinish_Warm6M_v_;
+text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o;
+text: .text%__1cHCompileLInline_Warm6M_i_;
+text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_;
+text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_;
+text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__;
+text: .text%__1cIPhaseCCPHanalyze6M_v_;
+text: .text%__1cIPhaseCCPMdo_transform6M_v_;
+text: .text%__1cIPhaseCCPJtransform6MpnENode__2_;
+text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_;
+text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_;
+text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_;
+text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_;
+text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_;
+text: .text%__1cMPhaseIterGVN2t6Mp0_v_;
+text: .text%__1cQmulI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_;
+text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_;
+text: .text%__1cOcmovII_immNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOMachEpilogNodeQsafepoint_offset6kM_i_;
+text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_;
+text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_;
+text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_;
+text: .text%__1cRsarI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%lwp_cond_init: os_solaris.o;
+text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o;
+text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__;
+text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_I_;
+text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o;
+text: .text%__1cOloadConI13NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIAddFNodeGOpcode6kM_i_;
+text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_;
+text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_;
+text: .text%__1cKBinaryNodeGOpcode6kM_i_;
+text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o;
+text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_;
+text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_;
+text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_;
+text: .text%__1cRNativeMovConstRegIset_data6Mi_v_;
+text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_;
+text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cMTailCallNodeGOpcode6kM_i_;
+text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_;
+text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_;
+text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_;
+text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_;
+text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_;
+text: .text%__1cIMulFNodeGOpcode6kM_i_;
+text: .text%__1cISubLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cQmulD_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cSThreadLocalStorageGthread6F_pnGThread__: assembler_sparc.o;
+text: .text%jni_SetByteArrayRegion: jni.o;
+text: .text%__1cQregI_to_stkINodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__;
+text: .text%__1cSdivL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_;
+text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_;
+text: .text%__1cCosLelapsedTime6F_d_;
+text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_;
+text: .text%__1cKPerfMemoryMmark_updated6F_v_;
+text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__;
+text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_;
+text: .text%__1cKPerfMemoryFalloc6FI_pc_;
+text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_;
+text: .text%__1cQmulL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_;
+text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__;
+text: .text%jni_ReleaseStringUTFChars;
+text: .text%jni_GetStringUTFChars: jni.o;
+text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__;
+text: .text%__1cFParseLarray_store6MnJBasicType__v_;
+text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_;
+text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_;
+text: .text%JVM_IsInterrupted;
+text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o;
+text: .text%JVM_FindLibraryEntry;
+text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_;
+text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_;
+text: .text%__1cRshlL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQshlL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cPconvF2D_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOMacroAssemblerEstop6Mpkc_v_;
+text: .text%__1cObranchConFNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKloadUBNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQaddP_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLcmpD_ccNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cTloadL_unalignedNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_;
+text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o;
+text: .text%__1cRbranchLoopEndNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQaddF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKcmpOpUOperHgreater6kM_i_: ad_sparc_clone.o;
+text: .text%__1cUParallelScavengeHeapEused6kM_I_;
+text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cQmulF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQxorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLcmpD_ccNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cWCallLeafNoFPDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cJloadINodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_;
+text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_;
+text: .text%__1cIMinINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__;
+text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cRbranchLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cRbranchLoopEndNodeJlabel_set6MrnFLabel_I_v_;
+text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cCosTnative_java_library6F_pv_;
+text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_;
+text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_;
+text: .text%__1cSxorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cMPhaseChaitinGSelect6M_I_;
+text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_;
+text: .text%__1cSbranchCon_longNodeJlabel_set6MrnFLabel_I_v_;
+text: .text%__1cSbranchCon_longNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSbranchCon_longNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_;
+text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_;
+text: .text%__1cLstoreP0NodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cFParseTprofile_switch_case6Mi_v_;
+text: .text%__1cSandI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIimmLOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cFParseOmerge_new_path6Mi_v_;
+text: .text%__1cQregP_to_stkPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_;
+text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__;
+text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__;
+text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%jni_NewByteArray: jni.o;
+text: .text%__1cQdivL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_;
+text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_;
+text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_;
+text: .text%__1cFParseLdo_newarray6MnJBasicType__v_;
+text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__;
+text: .text%__1cSconvI2D_helperNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLstoreP0NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_;
+text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_;
+text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__;
+text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_;
+text: .text%__1cSTailCalljmpIndNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQcmovI_reg_gtNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%JVM_GetMethodIxExceptionTableEntry;
+text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cLstoreP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQstkI_to_regFNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cKloadUBNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_;
+text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLRethrowNode2t6MpnENode_22222_v_;
+text: .text%__1cTLoadL_unalignedNodeGOpcode6kM_i_;
+text: .text%__1cSmulI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_;
+text: .text%__1cQcmovI_reg_gtNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_;
+text: .text%__1cISubLNodeDsub6kMpknEType_3_3_;
+text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_;
+text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o;
+text: .text%__1cQandI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cQmulI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cFParsePmerge_exception6Mi_v_;
+text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o;
+text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%jni_ReleaseStringCritical: jni.o;
+text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%jni_GetStringCritical: jni.o;
+text: .text%__1cHciKlassSsuper_check_offset6M_I_;
+text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o;
+text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Mi_v_;
+text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o;
+text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o;
+text: .text%__1cMloadConFNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o;
+text: .text%__1cJScopeDescGsender6kM_p0_;
+text: .text%__1cSxorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__;
+text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_;
+text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_;
+text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_;
+text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_;
+text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_;
+text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_;
+text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_;
+text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_;
+text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_;
+text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_;
+text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_;
+text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_;
+text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_;
+text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_;
+text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_;
+text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cSaddL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_;
+text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o;
+text: .text%__1cLstoreI0NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_;
+text: .text%__1cRtestI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__;
+text: .text%__1cFParseMdo_checkcast6M_v_;
+text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o;
+text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__;
+text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOcmovIL_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJimmU6OperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cHRegMask2t6M_v_: matcher.o;
+text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_;
+text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_;
+text: .text%__1cSmulL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPstoreI_FregNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLcmpD_ccNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_;
+text: .text%__1cNflagsRegFOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o;
+text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_;
+text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_;
+text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_;
+text: .text%__1cXTraceMemoryManagerStats2T6M_v_;
+text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_;
+text: .text%__1cQLRUMaxHeapPolicy2t6M_v_;
+text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_;
+text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_;
+text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_;
+text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_;
+text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_;
+text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_;
+text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_;
+text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_;
+text: .text%__1cKPSYoungGenPupdate_counters6M_v_;
+text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_;
+text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_;
+text: .text%__1cPGCMemoryManagerIgc_begin6M_v_;
+text: .text%__1cPGCMemoryManagerGgc_end6M_v_;
+text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_;
+text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_;
+text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_;
+text: .text%__1cTDerivedPointerTableFclear6F_v_;
+text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_;
+text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_;
+text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_;
+text: .text%__1cMCounterDecayFdecay6F_v_;
+text: .text%__1cCosbCmake_polling_page_unreadable6F_v_;
+text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_;
+text: .text%__1cLConvI2FNodeGOpcode6kM_i_;
+text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_;
+text: .text%__1cQaddF_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cUSafepointSynchronizeFbegin6F_v_;
+text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cONMethodSweeperFsweep6F_v_;
+text: .text%__1cCosbAmake_polling_page_readable6F_v_;
+text: .text%__1cUSafepointSynchronizeDend6F_v_;
+text: .text%__1cOcmovII_immNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_;
+text: .text%__1cKimmU13OperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cQshlL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cUcompU_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%JVM_GetCallerClass;
+text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o;
+text: .text%__1cOcmovPP_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cLstoreC0NodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cTloadL_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cICmpFNodeGOpcode6kM_i_;
+text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cQregF_to_stkINodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cJLoadDNodeGOpcode6kM_i_;
+text: .text%__1cQmulD_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%jni_IsAssignableFrom: jni.o;
+text: .text%jni_GetFieldID: jni.o;
+text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o;
+text: .text%__1cLstoreB0NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_;
+text: .text%__1cHTypeAryFxdual6kM_pknEType__;
+text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_;
+text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__;
+text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__;
+text: .text%__1cMVM_OperationIevaluate6M_v_;
+text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_;
+text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__;
+text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQcmovI_reg_gtNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_;
+text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_;
+text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_;
+text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_;
+text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_;
+text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_;
+text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_;
+text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_;
+text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_;
+text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_;
+text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_;
+text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_;
+text: .text%__1cNJvmtiGCMarker2T6M_v_;
+text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_;
+text: .text%__1cLGCTaskQdDueueGcreate6F_p0_;
+text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_;
+text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_;
+text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_;
+text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o;
+text: .text%__1cKPSYoungGenLswap_spaces6M_v_;
+text: .text%__1cUParallelScavengeHeapQresize_young_gen6MII_v_;
+text: .text%__1cKPSYoungGenGresize6MII_v_;
+text: .text%__1cKPSYoungGenNresize_spaces6MII_v_;
+text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_;
+text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_;
+text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_;
+text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__;
+text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_;
+text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_: gcTaskManager.o;
+text: .text%__1cTmembar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__;
+text: .text%__1cTloadL_unalignedNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovII_immNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o;
+text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_;
+text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_;
+text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_;
+text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_;
+text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_;
+text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cIciMethodRinterpreter_entry6M_pC_;
+text: .text%__1cQmulF_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRcompL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cJloadBNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%jni_SetBooleanField: jni.o;
+text: .text%__1cKimmL13OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cLcmpF_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o;
+text: .text%__1cRorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRsarL_reg_imm6NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQmulI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_;
+text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_;
+text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_;
+text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o;
+text: .text%__1cJloadSNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRloadConP_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNObjectMonitorHRecycle6M_v_;
+text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__;
+text: .text%__1cMloadConLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__;
+text: .text%__1cQstkI_to_regFNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQregP_to_stkPNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_;
+text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__;
+text: .text%__1cYcompareAndSwapL_boolNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cYcompareAndSwapL_boolNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIPSOldGenMmax_gen_size6M_I_: psOldGen.o;
+text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_;
+text: .text%__1cSdivL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_;
+text: .text%__1cQaddL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o;
+text: .text%__1cMregD_lowOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_;
+text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_;
+text: .text%__1cOcmovII_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cENodeEgetd6kM_d_;
+text: .text%__1cOcmovIL_immNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_;
+text: .text%__1cZInterpreterMacroAssemblerGpush_f6MpnRFloatRegisterImpl__v_;
+text: .text%__1cIciObject2t6MpnHciKlass__v_;
+text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__;
+text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_;
+text: .text%__1cPstoreI_FregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKCMovePNodeGOpcode6kM_i_;
+text: .text%__1cLstoreC0NodeIpipeline6kM_pknIPipeline__;
+text: .text%JVM_MonitorWait;
+text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_;
+text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_;
+text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_;
+text: .text%__1cGciType2t6MpnHciKlass__v_;
+text: .text%__1cQshlI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQdivD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_;
+text: .text%__1cNloadConL0NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRshrL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cUciInstanceKlassKlassEmake6F_p0_;
+text: .text%__1cENode2t6Mp0111111_v_;
+text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cZInterpreterMacroAssemblerGpush_d6MpnRFloatRegisterImpl__v_;
+text: .text%__1cFParseRarray_store_check6M_v_;
+text: .text%__1cQsubF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIciSymbolHbyte_at6Mi_i_;
+text: .text%__1cKCompiledICSset_ic_destination6MpC_v_;
+text: .text%__1cQaddD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__;
+text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__;
+text: .text%__1cQset_lwp_priority6Fiii_i_;
+text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__;
+text: .text%jni_NewStringUTF: jni.o;
+text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_;
+text: .text%__1cQsubI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cZInterpreterMacroAssemblerXget_constant_pool_cache6MpnMRegisterImpl__v_;
+text: .text%__1cSbranchCon_longNodeGnegate6M_v_: ad_sparc_misc.o;
+text: .text%__1cKcmpOpUOperKless_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__;
+text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__;
+text: .text%__1cUParallelScavengeHeapIcapacity6kM_I_;
+text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__;
+text: .text%__1cSsubL_reg_reg_2NodeIpipeline6kM_pknIPipeline__;
+text: .text%JVM_DefineClassWithSource;
+text: .text%__1cLstoreF0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%JVM_SetClassSigners;
+text: .text%__1cKCompiledICMset_to_clean6M_v_;
+text: .text%__1cSandL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRbranchLoopEndNodeGnegate6M_v_: ad_sparc_misc.o;
+text: .text%__1cLRShiftLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o;
+text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_;
+text: .text%__1cOcmovPP_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_;
+text: .text%get_thread;
+text: .text%__1cKstoreCNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__;
+text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_;
+text: .text%jni_CallIntMethod: jni.o;
+text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_;
+text: .text%__1cKloadUBNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSconvD2I_helperNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cSaddP_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cIAddDNodeGOpcode6kM_i_;
+text: .text%__1cOloadI_fregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOloadI_fregNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cCosJyield_all6Fi_v_;
+text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPstoreI_FregNodeIpipeline6kM_pknIPipeline__;
+text: .text%JVM_GetClassMethodsCount;
+text: .text%__1cKstoreINodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%JVM_GetClassFieldsCount;
+text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%JVM_GetClassCPEntriesCount;
+text: .text%JVM_GetClassCPTypes;
+text: .text%__1cQmulI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_;
+text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__;
+text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_;
+text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cQregI_to_stkINodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQmulF_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_;
+text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_;
+text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_;
+text: .text%JVM_IsPrimitiveClass;
+text: .text%__1cJimmU6OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_;
+text: .text%__1cIDivDNodeGOpcode6kM_i_;
+text: .text%__1cQsubI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__;
+text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%jni_FindClass: jni.o;
+text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_;
+text: .text%__1cOMacroAssemblerOstore_argument6MpnMRegisterImpl_rnIArgument__v_: interpreterRT_sparc.o;
+text: .text%__1cFParseHdo_irem6M_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__;
+text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__;
+text: .text%__1cOcmovII_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSdivL_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cTloadL_unalignedNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNSharedRuntimeDd2l6Fd_x_;
+text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__;
+text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_;
+text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_;
+text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o;
+text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o;
+text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_;
+text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_;
+text: .text%__1cQregI_to_stkINodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRorI_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__;
+text: .text%__1cMregD_lowOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cSconvI2F_helperNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cHMonitor2T6M_v_;
+text: .text%__1cFTypeDFxmeet6kMpknEType__3_;
+text: .text%__1cFMutex2T6M_v_;
+text: .text%lwp_cond_destroy: os_solaris.o;
+text: .text%lwp_mutex_destroy: os_solaris.o;
+text: .text%__1cQdivI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_;
+text: .text%__1cQregP_to_stkPNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQstkI_to_regFNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQregI_to_stkINodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQRelocationHolderEplus6kMi_0_;
+text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_;
+text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_;
+text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_;
+text: .text%__1cHCompileQgrow_alias_types6M_v_;
+text: .text%__1cISubLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cOcmovII_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_;
+text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cTloadD_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cOloadConL13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRcompL_reg_conNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQaddF_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o;
+text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_;
+text: .text%__1cSconvD2I_helperNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_;
+text: .text%__1cJloadINodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cSdivL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRloadConP_pollNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Mi_v_;
+text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSconvD2I_helperNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cUmulL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQdivL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cUdivL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cUmulL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_;
+text: .text%__1cNObjectMonitor2t6M_v_;
+text: .text%__1cIMulINodeKadd_opcode6kM_i_: classes.o;
+text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o;
+text: .text%__1cQdivD_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJCmpD3NodeGOpcode6kM_i_;
+text: .text%__1cJloadDNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIMinINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__;
+text: .text%__1cQmulF_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%JVM_MonitorNotify;
+text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_;
+text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_;
+text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRT_sparc.o;
+text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cSstring_compareNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRtestI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cVshrL_reg_imm6_L2INodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_;
+text: .text%__1cOloadConL13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_;
+text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_;
+text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__;
+text: .text%__1cINegDNodeGOpcode6kM_i_;
+text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_;
+text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_;
+text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_;
+text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_;
+text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_;
+text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_;
+text: .text%__1cOimmI_32_63OperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_;
+text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cSsubL_reg_reg_2NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOcmovII_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%jni_GetMethodID: jni.o;
+text: .text%__1cQshlL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNminI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cRshlI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOloadConL13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_;
+text: .text%__1cOMacroAssemblerDjmp6MpnMRegisterImpl_ipkci_v_;
+text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%JVM_GetClassDeclaredConstructors;
+text: .text%__1cUdivL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_;
+text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_;
+text: .text%__1cUmulL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQsubD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cUdivL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQregP_to_stkPNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSconvI2F_helperNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_;
+text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_;
+text: .text%__1cOcmovIF_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQcmovI_reg_ltNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKo1RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cSsubL_reg_reg_1NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_;
+text: .text%__1cQshrL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRsarL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__;
+text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRT_sparc.o;
+text: .text%__1cRorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQshrL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQshrI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOimmI_32_63OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cOloadI_fregNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_;
+text: .text%__1cQdivL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__;
+text: .text%__1cISubFNodeGOpcode6kM_i_;
+text: .text%JVM_IsThreadAlive;
+text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_;
+text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOcmovIF_immNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRsarL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQaddI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cRtestI_reg_immNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRtestI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRsubI_zero_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSmulL_reg_reg_1NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cQaddD_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOcmovPI_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQregL_to_stkLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_;
+text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_;
+text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_;
+text: .text%__1cSconvI2F_helperNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_;
+text: .text%__1cOcmovPP_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_;
+text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cGThread2t6M_v_;
+text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_;
+text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_;
+text: .text%__1cFTypeFFxmeet6kMpknEType__3_;
+text: .text%__1cCosScurrent_stack_size6F_I_;
+text: .text%__1cIOSThreadNpd_initialize6M_v_;
+text: .text%__1cCosScurrent_stack_base6F_pC_;
+text: .text%__1cIOSThread2t6MpFpv_i1_v_;
+text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_;
+text: .text%__1cCosRinitialize_thread6F_v_;
+text: .text%__1cSdivL_reg_reg_1NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cCosPpd_start_thread6FpnGThread__v_;
+text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_;
+text: .text%jni_NewObjectArray: jni.o;
+text: .text%__1cSsubL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovIF_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%JVM_SetThreadPriority;
+text: .text%__1cCosMstart_thread6FpnGThread__v_;
+text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_;
+text: .text%JVM_GetStackAccessControlContext;
+text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_;
+text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_;
+text: .text%JVM_Read;
+text: .text%__1cOcmovPI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_;
+text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_;
+text: .text%__1cKCompiledICMstub_address6kM_pC_;
+text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__;
+text: .text%__1cQsubL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQmodI_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cISubDNodeGOpcode6kM_i_;
+text: .text%__1cQmodI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__;
+text: .text%__1cRsarI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o;
+text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__;
+text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_;
+text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_;
+text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__;
+text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_;
+text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_;
+text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_;
+text: .text%jni_GetStaticFieldID: jni.o;
+text: .text%__1cNloadKlassNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLstoreF0NodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_;
+text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__;
+text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_;
+text: .text%__1cENodeEgetf6kM_f_;
+text: .text%JVM_DesiredAssertionStatus;
+text: .text%__1cKJavaThreadKinitialize6M_v_;
+text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_;
+text: .text%__1cLConvL2DNodeGOpcode6kM_i_;
+text: .text%__1cQThreadStatistics2t6M_v_;
+text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_;
+text: .text%__1cQshrL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQsubD_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cGThreadFstart6Fp0_v_;
+text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: interp_masm_sparc.o;
+text: .text%__1cPconvI2D_memNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%jni_GetFloatArrayRegion: jni.o;
+text: .text%__1cJMarkSweepMfollow_stack6F_v_;
+text: .text%__1cNimmP_pollOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cRtestI_reg_immNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cJMemRegionMintersection6kMk0_0_;
+text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_;
+text: .text%__1cKJavaThreadDrun6M_v_;
+text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o;
+text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__;
+text: .text%JVM_IsArrayClass;
+text: .text%jni_CallStaticVoidMethod: jni.o;
+text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__;
+text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_;
+text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_;
+text: .text%__1cKstoreBNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cFKlassNexternal_name6kM_pkc_;
+text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_;
+text: .text%__1cKstoreLNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOGenerateOopMapKinterp_all6M_v_;
+text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_;
+text: .text%__1cTloadD_unalignedNodeIpipeline6kM_pknIPipeline__;
+text: .text%JVM_GetClassName;
+text: .text%__1cOloadI_fregNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_;
+text: .text%__1cOGenerateOopMapKinit_state6M_v_;
+text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_;
+text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_;
+text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_;
+text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__;
+text: .text%__1cOcmovIF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__;
+text: .text%__1cLConvD2INodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cOcmovIL_immNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o;
+text: .text%__1cINodeHashEgrow6M_v_;
+text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_;
+text: .text%__1cOcmovPP_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cMloadConDNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_;
+text: .text%__1cJloadSNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_;
+text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%JVM_Open;
+text: .text%__1cRInvocationCounterFreset6M_v_;
+text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_;
+text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_;
+text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_;
+text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_;
+text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_;
+text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_;
+text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_;
+text: .text%__1cSmulL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSdivL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_;
+text: .text%JVM_StartThread;
+text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o;
+text: .text%jni_GetStaticObjectField: jni.o;
+text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o;
+text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_;
+text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_;
+text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o;
+text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__;
+text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_;
+text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_;
+text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_;
+text: .text%__1cTLoadD_unalignedNodeGOpcode6kM_i_;
+text: .text%__1cQshrI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%JVM_FreeMemory;
+text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_;
+text: .text%JVM_TotalMemory;
+text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_;
+text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQdivL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOcmovIL_immNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPconvI2D_memNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSandL_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cHThreadsGremove6FpnKJavaThread__v_;
+text: .text%__1cIOSThread2T6M_v_;
+text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_;
+text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_;
+text: .text%__1cQandI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_;
+text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_;
+text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cIOSThreadKpd_destroy6M_v_;
+text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_;
+text: .text%__1cKJavaThread2T6M_v_;
+text: .text%__1cGThread2T5B6M_v_;
+text: .text%__1cCosLfree_thread6FpnIOSThread__v_;
+text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_;
+text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_;
+text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o;
+text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_;
+text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_;
+text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQsubF_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cRNativeMovConstRegEdata6kM_i_;
+text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cLcmpF_ccNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_;
+text: .text%jni_CallObjectMethod: jni.o;
+text: .text%__1cQaddD_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPconvD2F_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__;
+text: .text%__1cQdivD_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cZInterpreterMacroAssemblerbEset_method_data_pointer_offset6MpnMRegisterImpl__v_;
+text: .text%__1cIMaxINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o;
+text: .text%__1cHTypeInt2t6Miii_v_;
+text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_;
+text: .text%__1cOcmovIL_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cSandL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNloadRangeNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRshlI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_;
+text: .text%__1cQregL_to_stkLNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_;
+text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRT_sparc.o;
+text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_;
+text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__;
+text: .text%__1cHTypePtrFxdual6kM_pknEType__;
+text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%JVM_MonitorNotifyAll;
+text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cKCMoveLNodeGOpcode6kM_i_;
+text: .text%__1cRshlL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_;
+text: .text%__1cTloadD_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJloadDNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNiRegIsafeOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cNloadConP0NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o;
+text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cMnegD_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSandL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o;
+text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__;
+text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o;
+text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_;
+text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o;
+text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o;
+text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o;
+text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o;
+text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o;
+text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o;
+text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o;
+text: .text%__1cSsubL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSmulL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSdivL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o;
+text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o;
+text: .text%__1cOloadI_fregNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRtestI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_;
+text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_: classes.o;
+text: .text%__1cLstoreF0NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_;
+text: .text%JVM_GetInheritedAccessControlContext;
+text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__;
+text: .text%__1cNmaxI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%JVM_NativePath;
+text: .text%__1cOMacroAssemblerNflush_windows6M_v_;
+text: .text%__1cSsubD_regD_regDNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_;
+text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_;
+text: .text%__1cHCompileKinit_start6MpnJStartNode__v_;
+text: .text%__1cKg3RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cVinline_cache_regPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cKstorePNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cQObjectStartArrayFreset6M_v_;
+text: .text%__1cPconvI2D_memNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_;
+text: .text%__1cQaddD_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLConvF2INodeGOpcode6kM_i_;
+text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_;
+text: .text%__1cIPSOldGenPadjust_pointers6M_v_;
+text: .text%__1cVCallRuntimeDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cOcmovPI_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIPSOldGenHcompact6M_v_;
+text: .text%__1cMtlsLoadPNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLcmpF_ccNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Mi_v_;
+text: .text%__1cKimmI11OperIconstant6kM_i_: ad_sparc_clone.o;
+text: .text%__1cQcmovI_reg_gtNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLstoreP0NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOcmovIF_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovLL_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%jni_GetStaticMethodID: jni.o;
+text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MipnMRegisterImpl__v_;
+text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_;
+text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_;
+text: .text%__1cOcmovLL_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%jint_cmp: parse2.o;
+text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__;
+text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_;
+text: .text%__1cVMoveL2D_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o;
+text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_;
+text: .text%__1cOcmovLL_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLConvD2FNodeGOpcode6kM_i_;
+text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_;
+text: .text%__1cWloadConI_x41f00000NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKcmpOpFOperFccode6kM_i_: ad_sparc_clone.o;
+text: .text%__1cLstoreC0NodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cQregL_to_stkLNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cZregDHi_regDLo_to_regDNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOcmovIF_immNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovDF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQaddL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cZregDHi_regDLo_to_regDNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%JVM_Close;
+text: .text%__1cSmulD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQsubL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIMulDNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSsubD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSaddD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSaddP_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cXconvI2D_regDHi_regDNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__;
+text: .text%__1cOMacroAssemblerNget_vm_result6MpnMRegisterImpl__v_;
+text: .text%__1cQsubF_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cZInterpreterMacroAssemblerbIcompute_extra_locals_size_in_bytes6MpnMRegisterImpl_22_v_;
+text: .text%__1cLcmpF_ccNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_;
+text: .text%__1cPorI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cSxorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPconvI2D_memNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQdivI_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLconvI2BNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cWloadConI_x43300000NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cWloadConI_x41f00000NodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSmulI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o;
+text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_;
+text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cFParseNdo_instanceof6M_v_;
+text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_;
+text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cRshrL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cJloadBNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cQdivI_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cSmulD_regD_regDNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOstackSlotLOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cQshlI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_;
+text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_;
+text: .text%__1cJloadDNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOcmovPP_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQsubF_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%jni_NewObjectV: jni.o;
+text: .text%__1cOcmovLI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__;
+text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_;
+text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%jni_EnsureLocalCapacity;
+text: .text%__1cLstoreI0NodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o;
+text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__;
+text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_;
+text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__;
+text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSaddD_regD_regDNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_;
+text: .text%__1cQsubD_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovPP_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__;
+text: .text%__1cJloadFNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSaddI_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cFParsePdo_monitor_exit6M_v_;
+text: .text%__1cObranchConFNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cObranchConFNodeJlabel_set6MrnFLabel_I_v_;
+text: .text%__1cSconvF2I_helperNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__;
+text: .text%__1cObranchConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLcmpD_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cJloadLNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_;
+text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_;
+text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__;
+text: .text%__1cFTypeFFxdual6kM_pknEType__;
+text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cKVtableStubRpd_code_alignment6F_i_;
+text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__;
+text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cTloadL_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cOcmovLL_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cTloadL_unalignedNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cTloadL_unalignedNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cXconvI2D_regDHi_regDNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cZInterpreterMacroAssemblerbFtest_invocation_counter_for_mdp6MpnMRegisterImpl_22rnFLabel__v_;
+text: .text%__1cXconvI2D_regDHi_regDNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_;
+text: .text%__1cFTypeDFxdual6kM_pknEType__;
+text: .text%__1cSaddD_regD_regDNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cZInterpreterMacroAssemblerbAincrement_backedge_counter6MpnMRegisterImpl_2_v_;
+text: .text%__1cZInterpreterMacroAssemblerbBtest_backedge_count_for_osr6MpnMRegisterImpl_22_v_;
+text: .text%__1cSmulL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cOcmovPI_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKEntryPoint2t6M_v_;
+text: .text%__1cTloadD_unalignedNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cZregDHi_regDLo_to_regDNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____;
+text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__;
+text: .text%__1cHciKlassOsuper_of_depth6MI_p0_;
+text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__;
+text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__;
+text: .text%__1cJimmP0OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cOcompiledVFrameHraw_bci6kM_i_;
+text: .text%__1cQshrI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cWloadConI_x43300000NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_;
+text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_;
+text: .text%__1cWloadConI_x41f00000NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_;
+text: .text%__1cIimmDOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cFframeZinterpreter_frame_set_mdx6Mi_v_;
+text: .text%__1cOstackSlotLOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cOstackSlotLOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cTloadD_unalignedNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cSmulD_regD_regDNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cINegFNodeGOpcode6kM_i_;
+text: .text%__1cSsubD_regD_regDNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____;
+text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____;
+text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____;
+text: .text%JVM_GetComponentType;
+text: .text%__1cQdivI_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%Unsafe_DefineClass1;
+text: .text%__1cOcmovII_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_;
+text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_;
+text: .text%__1cLConvF2DNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cSvframeArrayElementDbci6kM_i_;
+text: .text%__1cVMoveF2I_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%JVM_GetCPFieldModifiers;
+text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_;
+text: .text%__1cNnmethodLocker2t6MpC_v_;
+text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_;
+text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__;
+text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_;
+text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__;
+text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__;
+text: .text%__1cZInterpreterMacroAssemblerXindex_check_without_pop6MpnMRegisterImpl_2i22_v_;
+text: .text%__1cRSignatureIteratorKparse_type6M_i_;
+text: .text%__1cPconvD2F_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__;
+text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_;
+text: .text%__1cQsubD_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%JVM_DefineClass;
+text: .text%JVM_InvokeMethod;
+text: .text%__1cOcmovPP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%jni_NewDirectByteBuffer;
+text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o;
+text: .text%jni_AllocObject: jni.o;
+text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_;
+text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cMnegD_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%Unsafe_AllocateInstance;
+text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o;
+text: .text%__1cQstkI_to_regINodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_;
+text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_;
+text: .text%__1cYinternal_word_RelocationGtarget6M_pC_;
+text: .text%__1cJStubQdDueueKremove_all6M_v_;
+text: .text%__1cMloadConFNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cPconvI2D_memNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPorL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_;
+text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_;
+text: .text%__1cSaddL_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovPI_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o;
+text: .text%__1cKstfSSFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_;
+text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_;
+text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPconvI2L_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovII_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_;
+text: .text%__1cJCmpF3NodeGOpcode6kM_i_;
+text: .text%__1cLMoveL2DNodeGOpcode6kM_i_;
+text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_;
+text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__;
+text: .text%__1cOcmovII_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIAddFNodeJideal_reg6kM_I_: classes.o;
+text: .text%JVM_NewArray;
+text: .text%__1cHOrLNodeGOpcode6kM_i_;
+text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cLOopMapCache2t6M_v_;
+text: .text%__1cNTemplateTableHconvert6F_v_;
+text: .text%__1cOcmovDF_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_;
+text: .text%__1cOcmovLI_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_;
+text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o;
+text: .text%__1cKPSYoungGenKprecompact6M_v_;
+text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_;
+text: .text%__1cSconvD2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHThreadsLgc_prologue6F_v_;
+text: .text%__1cHThreadsLgc_epilogue6F_v_;
+text: .text%__1cPconvI2L_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cPconvD2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_;
+text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_;
+text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_;
+text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_;
+text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_;
+text: .text%__1cLconvP2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o;
+text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_;
+text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__;
+text: .text%__1cLMoveF2INodeGOpcode6kM_i_;
+text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_;
+text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__;
+text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_;
+text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_;
+text: .text%__1cOMacroAssemblerPbreakpoint_trap6M_v_;
+text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_;
+text: .text%__1cJMarkSweepNrestore_marks6F_v_;
+text: .text%__1cJMarkSweepMadjust_marks6F_v_;
+text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_;
+text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_;
+text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_;
+text: .text%__1cMStubCodeMark2T6M_v_;
+text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_;
+text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__;
+text: .text%__1cJPSPermGenKprecompact6M_v_;
+text: .text%JVM_GC;
+text: .text%__1cIPSOldGenKprecompact6M_v_;
+text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_;
+text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_;
+text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_;
+text: .text%__1cQmulL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MInHGCCauseFCause__v_;
+text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_;
+text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_;
+text: .text%__1cJPSPermGenQcompute_new_size6MI_v_;
+text: .text%__1cKPSYoungGenHcompact6M_v_;
+text: .text%JVM_GetSystemPackage;
+text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_;
+text: .text%__1cKPSYoungGenPadjust_pointers6M_v_;
+text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_: codeBlob.o;
+text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o;
+text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_: codeBlob.o;
+text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_;
+text: .text%__1cJCodeCacheLgc_prologue6F_v_;
+text: .text%__1cJCodeCacheLgc_epilogue6F_v_;
+text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_;
+text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cQregL_to_stkLNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cKcmpOpFOperKless_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cOcmovPI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSmulL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cOcmovIF_immNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cKCMoveDNodeGOpcode6kM_i_;
+text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cIMulFNodeGmul_id6kM_pknEType__: classes.o;
+text: .text%__1cNStubGeneratorLstub_prolog6MpnMStubCodeDesc__v_: stubGenerator_sparc.o;
+text: .text%__1cQaddL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%jni_GetStringRegion: jni.o;
+text: .text%JVM_RawMonitorCreate;
+text: .text%__1cJloadLNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_;
+text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_;
+text: .text%JVM_Sleep;
+text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cQstkI_to_regFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o;
+text: .text%__1cRorI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%Unsafe_CompareAndSwapInt;
+text: .text%JVM_Lseek;
+text: .text%__1cNloadRangeNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cPconvD2F_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o;
+text: .text%__1cPconvF2D_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQmulI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQmulF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cMnegF_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cSconvF2I_helperNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQmulD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOcmovLI_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_;
+text: .text%__1cQregP_to_stkPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cZInterpreterMacroAssemblerQtest_mdp_data_at6MipnMRegisterImpl_rnFLabel_2_v_;
+text: .text%__1cQstkI_to_regINodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovLI_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cGciType2t6MnJBasicType__v_;
+text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_: classes.o;
+text: .text%__1cQaddF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_;
+text: .text%__1cSconvF2I_helperNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cRsarL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%jni_GetEnv;
+text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cQstkI_to_regINodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o;
+text: .text%Unsafe_GetNativeByte;
+text: .text%JVM_NanoTime;
+text: .text%__1cCosNjavaTimeNanos6F_x_;
+text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_;
+text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cQandL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cIimmFOperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cHThreadsLnmethods_do6F_v_;
+text: .text%__1cKcmpOpFOperGnegate6M_v_: ad_sparc_clone.o;
+text: .text%__1cICodeBlobFflush6M_v_;
+text: .text%__1cFParseMdo_anewarray6M_v_;
+text: .text%__1cSdivL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%jni_CallVoidMethod: jni.o;
+text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__;
+text: .text%__1cObranchConFNodeGnegate6M_v_: ad_sparc_misc.o;
+text: .text%__1cFParseOdo_tableswitch6M_v_;
+text: .text%__1cOcmovIF_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cSaddL_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLstoreC0NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%Unsafe_GetNativeFloat;
+text: .text%__1cOstackSlotFOperEtype6kM_pknEType__: ad_sparc.o;
+text: .text%__1cHnmethodFflush6M_v_;
+text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_;
+text: .text%__1cKo2RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cQregI_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_;
+text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_;
+text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_;
+text: .text%__1cWloadConI_x43300000NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cFParseQdo_monitor_enter6M_v_;
+text: .text%__1cPorL_reg_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cLstoreC0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%JVM_FindPrimitiveClass;
+text: .text%__1cVMoveL2D_stack_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_;
+text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_;
+text: .text%__1cSmodL_reg_imm13NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cRshrI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_;
+text: .text%__1cSsubL_reg_reg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cUmulL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cPconvI2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__;
+text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cUdivL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cRSignatureIteratorHiterate6M_v_;
+text: .text%__1cOcmovLL_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJname2type6Fpkc_nJBasicType__;
+text: .text%__1cSmulL_reg_imm13NodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__;
+text: .text%__1cOloadConL13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cKcmpOpFOperHgreater6kM_i_: ad_sparc_clone.o;
+text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cOMacroAssemblerKget_thread6M_v_;
+text: .text%__1cOcmovDF_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovIF_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cSconvI2F_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cKVtableStub2n6FIi_pv_;
+text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_;
+text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o;
+text: .text%__1cPconvD2F_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cIciMethodMnative_entry6M_pC_;
+text: .text%__1cVMoveF2I_stack_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__;
+text: .text%__1cPorL_reg_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cPconvD2F_regNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cIciSymbolHas_utf86M_pkc_;
+text: .text%__1cQandI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_;
+text: .text%__1cMnegD_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_;
+text: .text%__1cQmulD_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOMacroAssemblerZtotal_frame_size_in_bytes6Mi_i_;
+text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_;
+text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_;
+text: .text%Unsafe_StaticFieldOffset;
+text: .text%__1cQmulI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_;
+text: .text%__1cQaddI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOcmovLI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%JVM_GetClassContext;
+text: .text%Unsafe_StaticFieldBaseFromField;
+text: .text%Unsafe_EnsureClassInitialized;
+text: .text%__1cOcmovIF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pCi_v_;
+text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_;
+text: .text%Unsafe_GetObjectVolatile;
+text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_;
+text: .text%__1cKstoreFNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cVMoveL2D_stack_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_: classes.o;
+text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__;
+text: .text%__1cOloadConL13NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_;
+text: .text%__1cLstoreF0NodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cPconvI2D_memNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cETypeFxdual6kM_pk0_;
+text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__;
+text: .text%__1cKimmU13OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_;
+text: .text%__1cZInterpreterMacroAssemblerbCincrement_invocation_counter6MpnMRegisterImpl_2_v_;
+text: .text%__1cZInterpreterMacroAssemblerQaccess_local_int6MpnMRegisterImpl_2_v_;
+text: .text%__1cZInterpreterMacroAssemblerWempty_expression_stack6M_v_;
+text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_;
+text: .text%__1cOcmovIL_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_;
+text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_;
+text: .text%__1cCosEstat6FpkcpnEstat__i_;
+text: .text%__1cQregF_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o;
+text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o;
+text: .text%__1cMMonitorChunk2t6Mi_v_;
+text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__;
+text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__;
+text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o;
+text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_;
+text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_;
+text: .text%__1cPorL_reg_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__;
+text: .text%jni_SetStaticObjectField: jni.o;
+text: .text%jni_RegisterNatives: jni.o;
+text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_;
+text: .text%__1cQshlL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%JVM_GetClassDeclaredFields;
+text: .text%__1cCosMuser_handler6F_pv_;
+text: .text%JVM_IsSameClassPackage;
+text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_;
+text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_;
+text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_;
+text: .text%__1cVMoveL2D_stack_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNTemplateTableGiconst6Fi_v_;
+text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%JVM_LoadLibrary;
+text: .text%JVM_IsSupportedJNIVersion;
+text: .text%Unsafe_ObjectFieldOffset;
+text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MrnFLabel__v_;
+text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_;
+text: .text%__1cZInterpreterMacroAssemblerSget_cpool_and_tags6MpnMRegisterImpl_2_v_;
+text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o;
+text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_;
+text: .text%__1cNTemplateTableH_return6FnITosState__v_;
+text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cKimmP13OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_;
+text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_;
+text: .text%__1cNSharedRuntimeEdrem6Fdd_d_;
+text: .text%__1cPstoreI_FregNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cTloadD_unalignedNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cOloadI_fregNodeOmemory_operand6kM_pknIMachOper__;
+text: .text%__1cLconvP2BNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cCosZvm_allocation_granularity6F_i_;
+text: .text%__1cMTailJumpNodeGOpcode6kM_i_;
+text: .text%__1cTloadD_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_;
+text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o;
+text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_;
+text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_;
+text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_;
+text: .text%__1cRtestI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_;
+text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_;
+text: .text%__1cWImplicitExceptionTableCat6kMI_I_;
+text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_;
+text: .text%jni_GetJavaVM;
+text: .text%__1cOcmovDF_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%jni_MonitorEnter: jni.o;
+text: .text%jni_MonitorExit: jni.o;
+text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cULinearLeastSquareFit2t6MI_v_;
+text: .text%__1cQdivL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__;
+text: .text%__1cNReservedSpace2t6MI_v_;
+text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_;
+text: .text%__1cOloadI_fregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_;
+text: .text%__1cIAddDNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cJloadFNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cKConv2BNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cLConvI2DNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cSconvD2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%jni_Throw: jni.o;
+text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_;
+text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cIDivINodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cISubDNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cPstoreI_FregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cINegFNodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_;
+text: .text%__1cOMacroAssemblerEfneg6MnRFloatRegisterImplFWidth_p13_v_;
+text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o;
+text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNSpaceCounters2t6MpkciIpnMMutableSpace_pnSGenerationCounters__v_;
+text: .text%__1cLcmpF_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_;
+text: .text%jni_SetObjectField: jni.o;
+text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__;
+text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_;
+text: .text%bootstrap_flush_windows;
+text: .text%__1cSdivL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cZInterpreterMacroAssemblerbCverify_oop_or_return_address6MpnMRegisterImpl_2_v_;
+text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_;
+text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__;
+text: .text%__1cSmulL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_;
+text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_;
+text: .text%__1cSsubL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_;
+text: .text%__1cQmulD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%Unsafe_AllocateMemory;
+text: .text%__1cSandL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%JVM_GetLastErrorString;
+text: .text%__1cQmodL_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_;
+text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_;
+text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_;
+text: .text%__1cPstoreI_FregNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_;
+text: .text%__1cSandI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNciMethodKlassEmake6F_p0_;
+text: .text%__1cNTemplateTableGlstore6Fi_v_;
+text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_;
+text: .text%__1cRcompL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cSconvD2I_helperNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRsubI_zero_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKstfSSFNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cOClassPathEntry2t6M_v_;
+text: .text%__1cZInterpreterMacroAssemblerQaccess_local_ptr6MpnMRegisterImpl_2_v_;
+text: .text%__1cNTemplateTableGistore6Fi_v_;
+text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__;
+text: .text%__1cPconvL2I_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cUcompI_iReg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRsarI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNTemplateTableGastore6Fi_v_;
+text: .text%__1cIRetTableHadd_jsr6Mii_v_;
+text: .text%__1cMnegF_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQregF_to_stkINodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o;
+text: .text%__1cNTemplateTableGdstore6Fi_v_;
+text: .text%__1cNTemplateTableGfstore6Fi_v_;
+text: .text%jni_CallStaticObjectMethod: jni.o;
+text: .text%__1cOcmovLL_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cODeoptimizationLUnrollBlockOsize_of_frames6kM_i_;
+text: .text%__1cCosGsignal6Fipv_1_;
+text: .text%__1cQaddD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cISubDNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNTemplateTableFlload6Fi_v_;
+text: .text%__1cNTemplateTableFiload6Fi_v_;
+text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_;
+text: .text%__1cLconvP2BNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cVMoveF2I_stack_regNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_;
+text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_;
+text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_;
+text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_;
+text: .text%__1cPconvI2D_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%Unsafe_SetMemory;
+text: .text%__1cKstfSSFNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_;
+text: .text%__1cVMoveF2I_stack_regNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cHTypePtrKadd_offset6kMi_pk0_;
+text: .text%__1cOcmovLI_regNodeHsize_of6kM_I_: ad_sparc_misc.o;
+text: .text%__1cNloadConL0NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOcmovPI_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOcmovDF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o;
+text: .text%__1cQsubF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_;
+text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_icc6MnJAssemblerJCondition_pCpnMRegisterImpl__v_;
+text: .text%__1cNTemplateTableFfload6Fi_v_;
+text: .text%__1cFParsePdo_lookupswitch6M_v_;
+text: .text%__1cNTemplateTableFdload6Fi_v_;
+text: .text%__1cKstfSSFNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cINegDNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNTemplateTableFaload6Fi_v_;
+text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_sparc.o;
+text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_;
+text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_;
+text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_;
+text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%jni_CallStaticObjectMethodV: jni.o;
+text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_;
+text: .text%__1cJMemRegionFminus6kMk0_0_;
+text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__;
+text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_;
+text: .text%__1cNMemoryManager2t6M_v_;
+text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_;
+text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_;
+text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_;
+text: .text%__1cCosFyield6F_v_;
+text: .text%__1cQsubD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRT_sparc.o;
+text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cFParseRdo_multianewarray6M_v_;
+text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__;
+text: .text%__1cZInterpreterMacroAssemblerRget_constant_pool6MpnMRegisterImpl__v_;
+text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cOcmovIF_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__: classes.o;
+text: .text%__1cSconvI2D_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLstoreF0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl_2_v_;
+text: .text%__1cPstoreI_FregNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOcmovLL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i2_v_;
+text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_;
+text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__;
+text: .text%JVM_GetInterfaceVersion;
+text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_2222rnFLabel__v_;
+text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNTemplateTableGfconst6Fi_v_;
+text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_;
+text: .text%__1cOcmovPI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_;
+text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_;
+text: .text%JVM_RegisterSignal;
+text: .text%JVM_FindSignal;
+text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o;
+text: .text%jio_vsnprintf;
+text: .text%__1cQshrL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_222_v_;
+text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_;
+text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_I_v_;
+text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o;
+text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_;
+text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_;
+text: .text%jni_GetDoubleArrayRegion: jni.o;
+text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_;
+text: .text%__1cLconvP2BNodeErule6kM_I_: ad_sparc_misc.o;
+text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o;
+text: .text%JVM_Available;
+text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_;
+text: .text%__1cQshlL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cZInterpreterMacroAssemblerQtop_most_monitor6M_nHAddress__;
+text: .text%__1cLstoreF0NodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_;
+text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_;
+text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_;
+text: .text%__1cSconvF2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_;
+text: .text%__1cbAconvL2D_reg_slow_fxtofNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o;
+text: .text%__1cPconvF2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cNTemplateTableGlconst6Fi_v_;
+text: .text%__1cLstoreC0NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cMPeriodicTaskGenroll6M_v_;
+text: .text%__1cMPeriodicTask2t6MI_v_;
+text: .text%__1cNTemplateTableHcastore6F_v_;
+text: .text%Unsafe_CompareAndSwapObject;
+text: .text%__1cLNamedThread2t6M_v_;
+text: .text%__1cLNamedThreadIset_name6MpkcE_v_;
+text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQdivD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cWloadConI_x43300000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNTemplateTableKinitialize6F_v_;
+text: .text%__1cKcmpOpFOperJnot_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cPconvD2F_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_;
+text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_;
+text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_;
+text: .text%__1cNTemplateTableGdconst6Fi_v_;
+text: .text%__1cSconvF2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOcmovIF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOcmovIF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cJimmL0OperJnum_edges6kM_I_: ad_sparc_clone.o;
+text: .text%__1cSaddD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cSsubD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQregF_to_stkINodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cNTemplateTableTinvokevfinal_helper6FpnMRegisterImpl_2_v_;
+text: .text%__1cSmulD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cNTemplateTableUgenerate_vtable_call6FpnMRegisterImpl_22_v_;
+text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_;
+text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_;
+text: .text%__1cNVM_DeoptimizeEdoit6M_v_;
+text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQsubL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cMVirtualSpace2t6M_v_;
+text: .text%__1cWloadConI_x41f00000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQdivI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cZregDHi_regDLo_to_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cXconvI2D_regDHi_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cKloadUBNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cNTemplateTableEidiv6F_v_;
+text: .text%__1cQstkI_to_regINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__;
+text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_;
+text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__;
+text: .text%__1cLOptoRuntimeIl2f_Type6F_pknITypeFunc__;
+text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_;
+text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_;
+text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_2_v_;
+text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_;
+text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_;
+text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MnITosState_pnMRegisterImpl__v_;
+text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_;
+text: .text%__1cUInterpreterGeneratorLlock_method6M_v_;
+text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_26MpCpnMRegisterImpl_rnFLabel__v_;
+text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_1_x6MnJAssemblerJCondition_rnFLabel__v_;
+text: .text%__1cZInterpreterMacroAssemblerZget_4_byte_integer_at_bcp6MipnMRegisterImpl_2n0AKsetCCOrNot__v_;
+text: .text%__1cCosHrealloc6FpvI_1_;
+text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_;
+text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_;
+text: .text%__1cZInterpreterMacroAssemblerRaccess_local_long6MpnMRegisterImpl_2_v_;
+text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_;
+text: .text%__1cCosIjvm_path6Fpci_v_;
+text: .text%__1cCosNsigexitnum_pd6F_i_;
+text: .text%__1cCosScurrent_process_id6F_i_;
+text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_;
+text: .text%__1cLConvL2DNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cLConvF2INodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cLConvD2FNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__;
+text: .text%__1cZInterpreterMacroAssemblerSaccess_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_;
+text: .text%__1cZInterpreterMacroAssemblerTaccess_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_;
+text: .text%__1cZInterpreterMacroAssemblerPstore_local_int6MpnMRegisterImpl_2_v_;
+text: .text%__1cZInterpreterMacroAssemblerQstore_local_long6MpnMRegisterImpl_2_v_;
+text: .text%__1cZInterpreterMacroAssemblerRstore_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_;
+text: .text%__1cZInterpreterMacroAssemblerSstore_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_;
+text: .text%__1cCosWactive_processor_count6F_i_;
+text: .text%__1cTAbstractInterpreterKinitialize6F_v_;
+text: .text%jni_NewWeakGlobalRef: jni.o;
+text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o;
+text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o;
+text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_;
+text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_;
+text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_;
+text: .text%__1cOPSVirtualSpace2t6M_v_;
+text: .text%jni_IsInstanceOf: jni.o;
+text: .text%__1cMGCTaskThreadDrun6M_v_;
+text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_;
+text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o;
+text: .text%jni_CallStaticVoidMethodV: jni.o;
+text: .text%jni_CallStaticBooleanMethod: jni.o;
+text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_;
+text: .text%__1cOtailjmpIndNodeIpipeline6kM_pknIPipeline__;
+text: .text%__1cMGCTaskThreadFstart6M_v_;
+text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_;
+text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_;
+text: .text%__1cZInterpreterMacroAssemblerbAdispatch_next_noverify_oop6MnITosState_i_v_;
+text: .text%__1cRCollectorCounters2t6Mpkci_v_;
+text: .text%__1cFParseDl2f6M_v_;
+text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_;
+text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_;
+text: .text%__1cPGCMemoryManager2t6M_v_;
+text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o;
+text: .text%__1cSInterpreterRuntimeWcreate_klass_exception6FpnKJavaThread_pcpnHoopDesc__v_;
+text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o;
+text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_;
+text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_;
+text: .text%__1cPorL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_;
+text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRT_sparc.o;
+text: .text%__1cCosHSolarisQsignal_sets_init6F_v_;
+text: .text%__1cCosbDallocate_thread_local_storage6F_i_;
+text: .text%__1cUInterpreterGeneratorVrestore_native_result6M_v_;
+text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_;
+text: .text%__1cLconvP2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cVshrL_reg_imm6_L2INodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_;
+text: .text%__1cCosGstrdup6Fpkc_pc_;
+text: .text%__1cCosLinit_random6Fl_v_;
+text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_;
+text: .text%__1cCosXterminate_signal_thread6F_v_;
+text: .text%__1cCosLsignal_init6F_v_;
+text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o;
+text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_;
+text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_;
+text: .text%__1cCosbDinit_system_properties_values6F_v_;
+text: .text%__1cCosPphysical_memory6F_X_;
+text: .text%__1cHvm_exit6Fi_v_;
+text: .text%__1cLbefore_exit6FpnKJavaThread__v_;
+text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_;
+text: .text%__1cSThreadLocalStorageHpd_init6F_v_;
+text: .text%__1cVMoveF2I_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cVMoveL2D_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cWinvocationCounter_init6F_v_;
+text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_;
+text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__;
+text: .text%__1cFParseMjump_if_join6MpnENode_2_2_;
+text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o;
+text: .text%__1cLconvP2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__;
+text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_;
+text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_;
+text: .text%__1cVInterfaceSupport_init6F_v_;
+text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpnMRegisterImpl_pC2_v_;
+text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o;
+text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_;
+text: .text%__1cJTimeStampMmilliseconds6kM_x_;
+text: .text%__1cDhpiZinitialize_socket_library6F_i_;
+text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_;
+text: .text%__1cWInlineCacheBuffer_init6F_v_;
+text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_;
+text: .text%__1cPGlobalTLABStats2t6M_v_;
+text: .text%__1cLicache_init6F_v_;
+text: .text%__1cSThreadLocalStorageEinit6F_v_;
+text: .text%__1cNThreadServiceEinit6F_v_;
+text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o;
+text: .text%__1cPvm_init_globals6F_v_;
+text: .text%__1cMinit_globals6F_i_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_expand.o;
+text: .text%__1cMexit_globals6F_v_;
+text: .text%__1cSset_init_completed6F_v_;
+text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_;
+text: .text%__1cJTimeStampJupdate_to6Mx_v_;
+text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o;
+text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interp_masm_sparc.o;
+text: .text%__1cQinterpreter_init6F_v_;
+text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_;
+text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o;
+text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o;
+text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_;
+text: .text%__1cCosLsignal_wait6F_i_;
+text: .text%__1cCosNsignal_notify6Fi_v_;
+text: .text%__1cCosOsignal_init_pd6F_v_;
+text: .text%__1cCosHSolarisPinit_signal_mem6F_v_;
+text: .text%__1cCosSget_temp_directory6F_pkc_;
+text: .text%__1cCosHSolarisOlibthread_init6F_v_;
+text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o;
+text: .text%__1cUParallelScavengeHeapEheap6F_p0_;
+text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_;
+text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_;
+text: .text%__1cKcmpOpFOperNgreater_equal6kM_i_: ad_sparc_clone.o;
+text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_I_;
+text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_;
+text: .text%__1cUParallelScavengeHeapKinitialize6M_i_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o;
+text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_;
+text: .text%__SLIP.DELETER__C: ostream.o;
+text: .text%__1cMostream_exit6F_v_;
+text: .text%__1cQostream_init_log6F_v_;
+text: .text%__1cMostream_init6F_v_;
+text: .text%__1cCosXnon_memory_address_word6F_pc_;
+text: .text%__1cCosGinit_26F_i_;
+text: .text%__1cCosEinit6F_v_;
+text: .text%__1cCosHSolarisUsynchronization_init6F_v_;
+text: .text%__1cVjni_GetLongField_addr6F_pC_;
+text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_;
+text: .text%__1cRLowMemoryDetectorKinitialize6F_v_;
+text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_;
+text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_;
+text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_;
+text: .text%__1cTloadL_unalignedNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o;
+text: .text%__1cPmanagement_init6F_v_;
+text: .text%__1cOvmStructs_init6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o;
+text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_;
+text: .text%__1cKManagementKinitialize6FpnGThread__v_;
+text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_;
+text: .text%__1cIVMThreadGcreate6F_v_;
+text: .text%__1cIVMThreadDrun6M_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o;
+text: .text%__1cLJvmtiExportNpost_vm_start6F_v_;
+text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_;
+text: .text%__1cLJvmtiExportNpost_vm_death6F_v_;
+text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_;
+text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o;
+text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o;
+text: .text%__1cVLoaderConstraintTable2t6Mi_v_;
+text: .text%__1cQregL_to_stkLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_;
+text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_;
+text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o;
+text: .text%__1cPVM_Version_init6F_v_;
+text: .text%__1cKVM_VersionKinitialize6F_v_;
+text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_;
+text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o;
+text: .text%__1cQvtableStubs_init6F_v_;
+text: .text%__1cKi0RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cKg1RegPOperKin_RegMask6kMi_pknHRegMask__;
+text: .text%__1cFVTuneEexit6F_v_;
+text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o;
+text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_;
+text: .text%__1cKvtune_init6F_v_;
+text: .text%__1cKmutex_init6F_v_;
+text: .text%__1cQaccessFlags_init6F_v_;
+text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_;
+text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_;
+text: .text%__1cOmarksweep_init6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o;
+text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_;
+text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__;
+text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__;
+text: .text%__1cHVM_ExitEdoit6M_v_;
+text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_;
+text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o;
+text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o;
+text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o;
+text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_;
+text: .text%__1cLstoreF0NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%JNI_CreateJavaVM;
+text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_;
+text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_;
+text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_;
+text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_;
+text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_;
+text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_;
+text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o;
+text: .text%__1cIUniversePcheck_alignment6FIIpkc_v_;
+text: .text%__1cIUniverseHgenesis6FpnGThread__v_;
+text: .text%__1cVquicken_jni_functions6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o;
+text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_;
+text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_;
+text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_;
+text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_;
+text: .text%__1cQdivD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_;
+text: .text%__1cQjavaClasses_init6F_v_;
+text: .text%jni_ToReflectedMethod: jni.o;
+text: .text%__1cQsubD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cYjni_GetBooleanField_addr6F_pC_;
+text: .text%__1cVjni_GetByteField_addr6F_pC_;
+text: .text%__1cQaddF_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cVjni_GetCharField_addr6F_pC_;
+text: .text%__1cWjni_GetShortField_addr6F_pC_;
+text: .text%__1cUjni_GetIntField_addr6F_pC_;
+text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_;
+text: .text%__1cWjni_GetFloatField_addr6F_pC_;
+text: .text%__1cRsarL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cXjni_GetDoubleField_addr6F_pC_;
+text: .text%__1cQshlI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_;
+text: .text%JVM_InitializeSocketLibrary;
+text: .text%JVM_RegisterUnsafeMethods;
+text: .text%__1cOcmovLI_regNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cOcmovLI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cOcmovDF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%JVM_Socket;
+text: .text%__1cbEinitialize_converter_functions6F_v_;
+text: .text%JVM_SupportsCX8;
+text: .text%__1cOcmovIF_immNodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cUJvmtiEventControllerIvm_start6F_v_;
+text: .text%__1cUJvmtiEventControllerHvm_init6F_v_;
+text: .text%__1cUJvmtiEventControllerIvm_death6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o;
+text: .text%__1cKstfSSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cLJvmtiExportRenter_start_phase6F_v_;
+text: .text%__1cLJvmtiExportQenter_live_phase6F_v_;
+text: .text%__1cSmulL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_;
+text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_;
+text: .text%__1cSmulI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_;
+text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_;
+text: .text%__1cNuniverse_init6F_i_;
+text: .text%__1cOuniverse2_init6F_v_;
+text: .text%__1cQjni_handles_init6F_v_;
+text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o;
+text: .text%Unsafe_SetNativeLong;
+text: .text%JVM_InitProperties;
+text: .text%JVM_Halt;
+text: .text%Unsafe_FreeMemory;
+text: .text%Unsafe_PageSize;
+text: .text%JVM_MaxMemory;
+text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__;
+text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%JVM_GetClassDeclaredMethods;
+text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__;
+text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_;
+text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_;
+text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_;
+text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_;
+text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_;
+text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_;
+text: .text%__1cLClassLoaderQload_zip_library6F_v_;
+text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_;
+text: .text%__1cLClassLoaderKinitialize6F_v_;
+text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_;
+text: .text%__1cMPeriodicTask2T5B6M_v_;
+text: .text%__1cQclassLoader_init6F_v_;
+text: .text%__1cMPeriodicTaskJdisenroll6M_v_;
+text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o;
+text: .text%__1cTClassLoadingServiceEinit6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o;
+text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_;
+text: .text%__1cVRegistersForDebuggingRrestore_registers6FpnOMacroAssembler_pnMRegisterImpl__v_: assembler_sparc.o;
+text: .text%__1cVRegistersForDebuggingOsave_registers6FpnOMacroAssembler__v_: assembler_sparc.o;
+text: .text%__1cJBytecodesKinitialize6F_v_;
+text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_;
+text: .text%__1cObytecodes_init6F_v_;
+text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_;
+text: .text%__1cJBytecodesNpd_initialize6F_v_;
+text: .text%__1cHCompileRpd_compiler2_init6F_v_;
+text: .text%__1cKC2CompilerKinitialize6M_v_;
+text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_;
+text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_;
+text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o;
+text: .text%__1cMciKlassKlassEmake6F_p0_;
+text: .text%__1cIciMethodMvtable_index6M_i_;
+text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_;
+text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o;
+text: .text%__1cNTemplateTableGsipush6F_v_;
+text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_;
+text: .text%__1cNTemplateTableGldc2_w6F_v_;
+text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_;
+text: .text%__1cNTemplateTableFiload6F_v_;
+text: .text%__1cNTemplateTableLfast_iload26F_v_;
+text: .text%__1cNTemplateTableKfast_iload6F_v_;
+text: .text%__1cNTemplateTableFlload6F_v_;
+text: .text%__1cNTemplateTableFfload6F_v_;
+text: .text%__1cNTemplateTableFdload6F_v_;
+text: .text%__1cNTemplateTableFaload6F_v_;
+text: .text%__1cNTemplateTableKwide_iload6F_v_;
+text: .text%__1cNTemplateTableKwide_lload6F_v_;
+text: .text%__1cNTemplateTableKwide_fload6F_v_;
+text: .text%__1cNTemplateTableKwide_dload6F_v_;
+text: .text%__1cNTemplateTableKwide_aload6F_v_;
+text: .text%__1cNTemplateTableGiaload6F_v_;
+text: .text%__1cNTemplateTableGlaload6F_v_;
+text: .text%__1cNTemplateTableGfaload6F_v_;
+text: .text%__1cNTemplateTableGdaload6F_v_;
+text: .text%__1cNTemplateTableGbipush6F_v_;
+text: .text%__1cLMoveF2INodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_;
+text: .text%__1cHOrLNodeGadd_id6kM_pknEType__: classes.o;
+text: .text%__1cHOrLNodeJideal_reg6kM_I_: classes.o;
+text: .text%__1cNTemplateTableF_goto6F_v_;
+text: .text%__1cNTemplateTableGgoto_w6F_v_;
+text: .text%__1cNTemplateTableFjsr_w6F_v_;
+text: .text%__1cNTemplateTableDjsr6F_v_;
+text: .text%__1cXreferenceProcessor_init6F_v_;
+text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_;
+text: .text%__1cStemplateTable_init6F_v_;
+text: .text%__1cNTemplateTableNpd_initialize6F_v_;
+text: .text%__1cNTemplateTableDnop6F_v_;
+text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_;
+text: .text%__1cNTemplateTableLaconst_null6F_v_;
+text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_;
+text: .text%__1cKPSYoungGenQlimit_gen_shrink6MI_I_;
+text: .text%__1cKPSYoungGenRavailable_to_live6M_I_;
+text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_;
+text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_pipeline.o;
+text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_IIIIIII_v_;
+text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_III_v_;
+text: .text%__1cOchunkpool_init6F_v_;
+text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_;
+text: .text%__1cJArgumentsWinit_system_properties6F_v_;
+text: .text%__1cMSysClassPathPexpand_endorsed6M_v_;
+text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_;
+text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_;
+text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_;
+text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_;
+text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_;
+text: .text%__1cLStatSamplerGengage6F_v_;
+text: .text%__1cNStubGeneratorbNgenerate_flush_callers_register_windows6M_pC_: stubGenerator_sparc.o;
+text: .text%__1cSstubRoutines_init16F_v_;
+text: .text%__1cSstubRoutines_init26F_v_;
+text: .text%__1cNStubGeneratorbIgenerate_handler_for_unsafe_access6M_pC_: stubGenerator_sparc.o;
+text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_sparc.o;
+text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_sparc.o;
+text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_sparc.o;
+text: .text%__1cNStubGeneratorSgenerate_test_stop6M_pC_: stubGenerator_sparc.o;
+text: .text%__1cNStubGeneratorbEgenerate_partial_subtype_check6M_pC_: stubGenerator_sparc.o;
+text: .text%__1cISubFNodeDsub6kMpknEType_3_3_;
+text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_;
+text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_;
+text: .text%__1cLStatSamplerHdestroy6F_v_;
+text: .text%__1cLStatSamplerJdisengage6F_v_;
+text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o;
+text: .text%__1cORuntimeServiceYrecord_application_start6F_v_;
+text: .text%__1cOMacroAssemblerNset_vm_result6MpnMRegisterImpl__v_;
+text: .text%__1cORuntimeServiceEinit6F_v_;
+text: .text%__1cOMacroAssemblerVverify_oop_subroutine6M_v_;
+text: .text%__1cOMacroAssemblerPstop_subroutine6M_v_;
+text: .text%__1cOMacroAssemblerElcmp6MpnMRegisterImpl_2222_v_;
+text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_;
+text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_22222_v_;
+text: .text%__1cOMacroAssemblerElshr6MpnMRegisterImpl_22222_v_;
+text: .text%__1cOMacroAssemblerFlushr6MpnMRegisterImpl_22222_v_;
+text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__;
+text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__;
+text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__;
+text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o;
+text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_;
+text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o;
+text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o;
+text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o;
+text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpnMRegisterImpl_pCi_v_;
+text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_;
+text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o;
+text: .text%__1cNTemplateTableGaaload6F_v_;
+text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o;
+text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o;
+text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_;
+text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o;
+text: .text%__1cQPlaceholderTable2t6Mi_v_;
+text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o;
+text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o;
+text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o;
+text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o;
+text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_;
+text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_;
+text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o;
+text: .text%__1cNTemplateTableNinvokespecial6Fi_v_;
+text: .text%__1cNTemplateTableMinvokestatic6Fi_v_;
+text: .text%__1cNTemplateTablebDinvokeinterface_object_method6FpnMRegisterImpl_222_v_;
+text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_;
+text: .text%__1cNTemplateTableE_new6F_v_;
+text: .text%__1cNTemplateTableInewarray6F_v_;
+text: .text%__1cNTemplateTableJanewarray6F_v_;
+text: .text%__1cNTemplateTableLarraylength6F_v_;
+text: .text%__1cNTemplateTableJcheckcast6F_v_;
+text: .text%__1cNTemplateTableKinstanceof6F_v_;
+text: .text%__1cNTemplateTableL_breakpoint6F_v_;
+text: .text%__1cNTemplateTableGathrow6F_v_;
+text: .text%__1cNTemplateTableMmonitorenter6F_v_;
+text: .text%__1cNTemplateTableLmonitorexit6F_v_;
+text: .text%__1cNTemplateTableEwide6F_v_;
+text: .text%__1cNTemplateTableOmultianewarray6F_v_;
+text: .text%__1cTcompilerOracle_init6F_v_;
+text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__;
+text: .text%__1cZCompiledArgumentOopFinderRhandle_oop_offset6M_v_: frame.o;
+text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_;
+text: .text%__1cHGCStats2t6M_v_;
+text: .text%__1cNGCTaskManager2t6MI_v_;
+text: .text%__1cNGCTaskManagerKinitialize6M_v_;
+text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_;
+text: .text%__1cPPerfDataManagerHdestroy6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o;
+text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_;
+text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o;
+text: .text%__1cOThreadCriticalKinitialize6F_v_;
+text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_;
+text: .text%__1cICodeHeap2t6M_v_;
+text: .text%__1cDhpiKinitialize6F_i_;
+text: .text%__1cMPerfDataList2T6M_v_;
+text: .text%__1cNWatcherThreadDrun6M_v_;
+text: .text%__1cNWatcherThreadEstop6F_v_;
+text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o;
+text: .text%__1cFStateO_sub_Op_CMoveD6MpknENode__v_;
+text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_;
+text: .text%__1cKDictionary2t6Mi_v_;
+text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_;
+text: .text%__1cNeventlog_init6F_v_;
+text: .text%__1cScheck_ThreadShadow6F_v_;
+text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o;
+text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o;
+text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_;
+text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_;
+text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o;
+text: .text%__1cPperfMemory_exit6F_v_;
+text: .text%__1cPperfMemory_init6F_v_;
+text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_;
+text: .text%__1cNTemplateTableHfastore6F_v_;
+text: .text%__1cNTemplateTableHdastore6F_v_;
+text: .text%__1cNTemplateTableHaastore6F_v_;
+text: .text%__1cNTemplateTableHbastore6F_v_;
+text: .text%__1cNTemplateTableHsastore6F_v_;
+text: .text%__1cOcodeCache_init6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o;
+text: .text%__1cNTemplateTableDpop6F_v_;
+text: .text%__1cNTemplateTableEpop26F_v_;
+text: .text%__1cNTemplateTableDdup6F_v_;
+text: .text%__1cNTemplateTableGdup_x16F_v_;
+text: .text%__1cNTemplateTableGdup_x26F_v_;
+text: .text%__1cNTemplateTableEdup26F_v_;
+text: .text%__1cNTemplateTableHdup2_x16F_v_;
+text: .text%__1cNTemplateTableHdup2_x26F_v_;
+text: .text%__1cNTemplateTableEswap6F_v_;
+text: .text%__1cNCollectedHeap2t6M_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o;
+text: .text%__1cNTemplateTableEirem6F_v_;
+text: .text%__1cNTemplateTableElmul6F_v_;
+text: .text%__1cNTemplateTableHlastore6F_v_;
+text: .text%__1cNTemplateTableGbaload6F_v_;
+text: .text%__1cNTemplateTableGcaload6F_v_;
+text: .text%__1cNTemplateTableMfast_icaload6F_v_;
+text: .text%__1cNTemplateTableGsaload6F_v_;
+text: .text%__1cKPSYoungGenPinitialize_work6M_v_;
+text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_I_v_;
+text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_I_v_;
+text: .text%__1cKPSYoungGen2t6MIII_v_;
+text: .text%__1cNTemplateTableHaload_06F_v_;
+text: .text%__1cNTemplateTableGistore6F_v_;
+text: .text%__1cNTemplateTableGlstore6F_v_;
+text: .text%__1cNTemplateTableGfstore6F_v_;
+text: .text%__1cNTemplateTableGdstore6F_v_;
+text: .text%__1cNTemplateTableGastore6F_v_;
+text: .text%__1cNTemplateTableLwide_istore6F_v_;
+text: .text%__1cNTemplateTableLwide_lstore6F_v_;
+text: .text%__1cNTemplateTableLwide_fstore6F_v_;
+text: .text%__1cNTemplateTableLwide_dstore6F_v_;
+text: .text%__1cNTemplateTableLwide_astore6F_v_;
+text: .text%__1cNTemplateTableHiastore6F_v_;
+text: .text%__1cNTemplateTableEldiv6F_v_;
+text: .text%__1cNTemplateTableLtableswitch6F_v_;
+text: .text%__1cNTemplateTableMlookupswitch6F_v_;
+text: .text%__1cNTemplateTableRfast_linearswitch6F_v_;
+text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_;
+text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_;
+text: .text%__1cJPSPermGen2t6MnNReservedSpace_IIIIpkci_v_;
+text: .text%__1cNCompileBrokerQset_should_block6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o;
+text: .text%__1cNTemplateTableIgetfield6Fi_v_;
+text: .text%__1cNTemplateTableJgetstatic6Fi_v_;
+text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Ipkci_v_;
+text: .text%__1cIPSOldGen2t6MIIIpkci_v_;
+text: .text%__1cIPSOldGen2t6MnNReservedSpace_IIIIpkci_v_;
+text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o;
+text: .text%__1cNTemplateTableIputfield6Fi_v_;
+text: .text%__1cNTemplateTableJputstatic6Fi_v_;
+text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o;
+text: .text%__1cLPSMarkSweepKinitialize6F_v_;
+text: .text%__1cNTemplateTableIwide_ret6F_v_;
+text: .text%__1cNTemplateTableElrem6F_v_;
+text: .text%__1cNTemplateTableElshl6F_v_;
+text: .text%__1cNTemplateTableElshr6F_v_;
+text: .text%__1cNTemplateTableFlushr6F_v_;
+text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_;
+text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_;
+text: .text%__1cNTemplateTableEineg6F_v_;
+text: .text%__1cNTemplateTableElneg6F_v_;
+text: .text%__1cNTemplateTableEfneg6F_v_;
+text: .text%__1cNTemplateTableEdneg6F_v_;
+text: .text%__1cNTemplateTableEiinc6F_v_;
+text: .text%__1cNTemplateTableJwide_iinc6F_v_;
+text: .text%__1cKPSScavengeKinitialize6F_v_;
+text: .text%__1cNTemplateTableElcmp6F_v_;
+text: .text%__1cWcompilationPolicy_init6F_v_;
+text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_;
+text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o;
+text: .text%__1cSPSPromotionManagerKinitialize6F_v_;
+text: .text%__1cNTemplateTableDret6F_v_;
--- a/hotspot/make/windows/build.make Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/make/windows/build.make Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -19,7 +19,7 @@
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
-#
+#
#
# Note: this makefile is invoked both from build.bat and from the J2SE
@@ -72,13 +72,11 @@
!endif
!endif
-!if "$(BUILDARCH)" != "amd64"
!if "$(BUILDARCH)" != "ia64"
!ifndef CC_INTERP
FORCE_TIERED=1
!endif
!endif
-!endif
!if "$(BUILDARCH)" == "amd64"
Platform_arch=x86
@@ -135,7 +133,7 @@
# We can have update versions like "01a", but Windows requires
# we use only integers in the file version field. So:
# JDK_UPDATE_VER = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION
-#
+#
JDK_UPDATE_VER=0
JDK_BUILD_NUMBER=0
@@ -148,7 +146,7 @@
# 1.6.0_01a-b02 will be 6.0.11.2
#
# JDK_* variables are defined in make/hotspot_version or on command line
-#
+#
JDK_VER=$(JDK_MINOR_VER),$(JDK_MICRO_VER),$(JDK_UPDATE_VER),$(JDK_BUILD_NUMBER)
JDK_DOTVER=$(JDK_MINOR_VER).$(JDK_MICRO_VER).$(JDK_UPDATE_VER).$(JDK_BUILD_NUMBER)
!if "$(JRE_RELEASE_VERSION)" == ""
@@ -162,7 +160,7 @@
# Hotspot Express VM FileVersion:
# 10.0-b<yz> will have DLL version 10.0.0.yz (need 4 numbers).
-#
+#
# HS_* variables are defined in make/hotspot_version
#
HS_VER=$(HS_MAJOR_VER),$(HS_MINOR_VER),0,$(HS_BUILD_NUMBER)
@@ -182,7 +180,7 @@
# We don't support SA on ia64, and we can't
-# build it if we are using a version of Vis Studio
+# build it if we are using a version of Vis Studio
# older than .Net 2003.
# SA_INCLUDE and SA_LIB are hold-overs from a previous
# implementation in which we could build SA using
--- a/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -57,13 +57,12 @@
#endif
}
-#ifdef TIERED
void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
__ set(_bci, G4);
__ call(Runtime1::entry_for(Runtime1::counter_overflow_id), relocInfo::runtime_call_type);
- __ delayed()->nop();
+ __ delayed()->mov_or_nop(_method->as_register(), G5);
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
@@ -71,7 +70,6 @@
__ delayed()->nop();
}
-#endif // TIERED
void DivByZeroStub::emit_code(LIR_Assembler* ce) {
if (_offset != -1) {
--- a/hotspot/src/cpu/sparc/vm/c1_FrameMap_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_FrameMap_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -73,6 +73,7 @@
// some useful constant RInfo's:
LIR_Opr FrameMap::in_long_opr;
LIR_Opr FrameMap::out_long_opr;
+LIR_Opr FrameMap::g1_long_single_opr;
LIR_Opr FrameMap::F0_opr;
LIR_Opr FrameMap::F0_double_opr;
@@ -238,6 +239,7 @@
in_long_opr = as_long_opr(I0);
out_long_opr = as_long_opr(O0);
+ g1_long_single_opr = as_long_single_opr(G1);
G0_opr = as_opr(G0);
G1_opr = as_opr(G1);
--- a/hotspot/src/cpu/sparc/vm/c1_FrameMap_sparc.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_FrameMap_sparc.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -103,6 +103,7 @@
static LIR_Opr in_long_opr;
static LIR_Opr out_long_opr;
+ static LIR_Opr g1_long_single_opr;
static LIR_Opr F0_opr;
static LIR_Opr F0_double_opr;
@@ -113,18 +114,25 @@
private:
static FloatRegister _fpu_regs [nof_fpu_regs];
+ static LIR_Opr as_long_single_opr(Register r) {
+ return LIR_OprFact::double_cpu(cpu_reg2rnr(r), cpu_reg2rnr(r));
+ }
+ static LIR_Opr as_long_pair_opr(Register r) {
+ return LIR_OprFact::double_cpu(cpu_reg2rnr(r->successor()), cpu_reg2rnr(r));
+ }
+
public:
#ifdef _LP64
static LIR_Opr as_long_opr(Register r) {
- return LIR_OprFact::double_cpu(cpu_reg2rnr(r), cpu_reg2rnr(r));
+ return as_long_single_opr(r);
}
static LIR_Opr as_pointer_opr(Register r) {
- return LIR_OprFact::double_cpu(cpu_reg2rnr(r), cpu_reg2rnr(r));
+ return as_long_single_opr(r);
}
#else
static LIR_Opr as_long_opr(Register r) {
- return LIR_OprFact::double_cpu(cpu_reg2rnr(r->successor()), cpu_reg2rnr(r));
+ return as_long_pair_opr(r);
}
static LIR_Opr as_pointer_opr(Register r) {
return as_opr(r);
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1625,13 +1625,18 @@
void LIR_Assembler::return_op(LIR_Opr result) {
// the poll may need a register so just pick one that isn't the return register
-#ifdef TIERED
+#if defined(TIERED) && !defined(_LP64)
if (result->type_field() == LIR_OprDesc::long_type) {
// Must move the result to G1
// Must leave proper result in O0,O1 and G1 (TIERED only)
__ sllx(I0, 32, G1); // Shift bits into high G1
__ srl (I1, 0, I1); // Zero extend O1 (harmless?)
__ or3 (I1, G1, G1); // OR 64 bits into G1
+#ifdef ASSERT
+ // mangle it so any problems will show up
+ __ set(0xdeadbeef, I0);
+ __ set(0xdeadbeef, I1);
+#endif
}
#endif // TIERED
__ set((intptr_t)os::get_polling_page(), L0);
@@ -2424,6 +2429,195 @@
}
+void LIR_Assembler::type_profile_helper(Register mdo, int mdo_offset_bias,
+ ciMethodData *md, ciProfileData *data,
+ Register recv, Register tmp1, Label* update_done) {
+ uint i;
+ for (i = 0; i < VirtualCallData::row_limit(); i++) {
+ Label next_test;
+ // See if the receiver is receiver[n].
+ Address receiver_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) -
+ mdo_offset_bias);
+ __ ld_ptr(receiver_addr, tmp1);
+ __ verify_oop(tmp1);
+ __ cmp(recv, tmp1);
+ __ brx(Assembler::notEqual, false, Assembler::pt, next_test);
+ __ delayed()->nop();
+ Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)) -
+ mdo_offset_bias);
+ __ ld_ptr(data_addr, tmp1);
+ __ add(tmp1, DataLayout::counter_increment, tmp1);
+ __ st_ptr(tmp1, data_addr);
+ __ ba(false, *update_done);
+ __ delayed()->nop();
+ __ bind(next_test);
+ }
+
+ // Didn't find receiver; find next empty slot and fill it in
+ for (i = 0; i < VirtualCallData::row_limit(); i++) {
+ Label next_test;
+ Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) -
+ mdo_offset_bias);
+ load(recv_addr, tmp1, T_OBJECT);
+ __ br_notnull(tmp1, false, Assembler::pt, next_test);
+ __ delayed()->nop();
+ __ st_ptr(recv, recv_addr);
+ __ set(DataLayout::counter_increment, tmp1);
+ __ st_ptr(tmp1, mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)) -
+ mdo_offset_bias);
+ __ ba(false, *update_done);
+ __ delayed()->nop();
+ __ bind(next_test);
+ }
+}
+
+void LIR_Assembler::emit_checkcast(LIR_OpTypeCheck *op) {
+ assert(op->code() == lir_checkcast, "Invalid operation");
+ // we always need a stub for the failure case.
+ CodeStub* stub = op->stub();
+ Register obj = op->object()->as_register();
+ Register k_RInfo = op->tmp1()->as_register();
+ Register klass_RInfo = op->tmp2()->as_register();
+ Register dst = op->result_opr()->as_register();
+ Register Rtmp1 = op->tmp3()->as_register();
+ ciKlass* k = op->klass();
+
+
+ if (obj == k_RInfo) {
+ k_RInfo = klass_RInfo;
+ klass_RInfo = obj;
+ }
+
+ ciMethodData* md;
+ ciProfileData* data;
+ int mdo_offset_bias = 0;
+ if (op->should_profile()) {
+ ciMethod* method = op->profiled_method();
+ assert(method != NULL, "Should have method");
+ int bci = op->profiled_bci();
+ md = method->method_data();
+ if (md == NULL) {
+ bailout("out of memory building methodDataOop");
+ return;
+ }
+ data = md->bci_to_data(bci);
+ assert(data != NULL, "need data for checkcast");
+ assert(data->is_ReceiverTypeData(), "need ReceiverTypeData for checkcast");
+ if (!Assembler::is_simm13(md->byte_offset_of_slot(data, DataLayout::header_offset()) + data->size_in_bytes())) {
+ // The offset is large so bias the mdo by the base of the slot so
+ // that the ld can use simm13s to reference the slots of the data
+ mdo_offset_bias = md->byte_offset_of_slot(data, DataLayout::header_offset());
+ }
+
+ // We need two temporaries to perform this operation on SPARC,
+ // so to keep things simple we perform a redundant test here
+ Label profile_done;
+ __ br_notnull(obj, false, Assembler::pn, profile_done);
+ __ delayed()->nop();
+ Register mdo = k_RInfo;
+ Register data_val = Rtmp1;
+ jobject2reg(md->constant_encoding(), mdo);
+ if (mdo_offset_bias > 0) {
+ __ set(mdo_offset_bias, data_val);
+ __ add(mdo, data_val, mdo);
+ }
+ Address flags_addr(mdo, md->byte_offset_of_slot(data, DataLayout::flags_offset()) - mdo_offset_bias);
+ __ ldub(flags_addr, data_val);
+ __ or3(data_val, BitData::null_seen_byte_constant(), data_val);
+ __ stb(data_val, flags_addr);
+ __ bind(profile_done);
+ }
+ Label profile_cast_failure;
+
+ Label done, done_null;
+ // Where to go in case of cast failure
+ Label *failure_target = op->should_profile() ? &profile_cast_failure : stub->entry();
+
+ // patching may screw with our temporaries on sparc,
+ // so let's do it before loading the class
+ if (k->is_loaded()) {
+ jobject2reg(k->constant_encoding(), k_RInfo);
+ } else {
+ jobject2reg_with_patching(k_RInfo, op->info_for_patch());
+ }
+ assert(obj != k_RInfo, "must be different");
+ __ br_null(obj, false, Assembler::pn, done_null);
+ __ delayed()->nop();
+
+ // get object class
+ // not a safepoint as obj null check happens earlier
+ load(obj, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
+ if (op->fast_check()) {
+ assert_different_registers(klass_RInfo, k_RInfo);
+ __ cmp(k_RInfo, klass_RInfo);
+ __ brx(Assembler::notEqual, false, Assembler::pt, *failure_target);
+ __ delayed()->nop();
+ } else {
+ bool need_slow_path = true;
+ if (k->is_loaded()) {
+ if (k->super_check_offset() != sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes())
+ need_slow_path = false;
+ // perform the fast part of the checking logic
+ __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, noreg,
+ (need_slow_path ? &done : NULL),
+ failure_target, NULL,
+ RegisterOrConstant(k->super_check_offset()));
+ } else {
+ // perform the fast part of the checking logic
+ __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, O7, &done,
+ failure_target, NULL);
+ }
+ if (need_slow_path) {
+ // call out-of-line instance of __ check_klass_subtype_slow_path(...):
+ assert(klass_RInfo == G3 && k_RInfo == G1, "incorrect call setup");
+ __ call(Runtime1::entry_for(Runtime1::slow_subtype_check_id), relocInfo::runtime_call_type);
+ __ delayed()->nop();
+ __ cmp(G3, 0);
+ __ br(Assembler::equal, false, Assembler::pn, *failure_target);
+ __ delayed()->nop();
+ }
+ }
+ __ bind(done);
+
+ if (op->should_profile()) {
+ Register mdo = klass_RInfo, recv = k_RInfo, tmp1 = Rtmp1;
+ assert_different_registers(obj, mdo, recv, tmp1);
+
+ jobject2reg(md->constant_encoding(), mdo);
+ if (mdo_offset_bias > 0) {
+ __ set(mdo_offset_bias, tmp1);
+ __ add(mdo, tmp1, mdo);
+ }
+ Label update_done;
+ load(Address(obj, oopDesc::klass_offset_in_bytes()), recv, T_OBJECT);
+ type_profile_helper(mdo, mdo_offset_bias, md, data, recv, tmp1, &update_done);
+ // Jump over the failure case
+ __ ba(false, update_done);
+ __ delayed()->nop();
+
+
+ // Cast failure case
+ __ bind(profile_cast_failure);
+ jobject2reg(md->constant_encoding(), mdo);
+ if (mdo_offset_bias > 0) {
+ __ set(mdo_offset_bias, tmp1);
+ __ add(mdo, tmp1, mdo);
+ }
+ Address data_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()) - mdo_offset_bias);
+ __ ld_ptr(data_addr, tmp1);
+ __ sub(tmp1, DataLayout::counter_increment, tmp1);
+ __ st_ptr(tmp1, data_addr);
+ __ ba(false, *stub->entry());
+ __ delayed()->nop();
+
+ __ bind(update_done);
+ }
+
+ __ bind(done_null);
+ __ mov(obj, dst);
+}
+
+
void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) {
LIR_Code code = op->code();
if (code == lir_store_check) {
@@ -2437,8 +2631,7 @@
CodeStub* stub = op->stub();
Label done;
- __ cmp(value, 0);
- __ br(Assembler::equal, false, Assembler::pn, done);
+ __ br_null(value, false, Assembler::pn, done);
__ delayed()->nop();
load(array, oopDesc::klass_offset_in_bytes(), k_RInfo, T_OBJECT, op->info_for_exception());
load(value, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
@@ -2456,109 +2649,6 @@
__ br(Assembler::equal, false, Assembler::pn, *stub->entry());
__ delayed()->nop();
__ bind(done);
- } else if (op->code() == lir_checkcast) {
- // we always need a stub for the failure case.
- CodeStub* stub = op->stub();
- Register obj = op->object()->as_register();
- Register k_RInfo = op->tmp1()->as_register();
- Register klass_RInfo = op->tmp2()->as_register();
- Register dst = op->result_opr()->as_register();
- Register Rtmp1 = op->tmp3()->as_register();
- ciKlass* k = op->klass();
-
- if (obj == k_RInfo) {
- k_RInfo = klass_RInfo;
- klass_RInfo = obj;
- }
- if (op->profiled_method() != NULL) {
- ciMethod* method = op->profiled_method();
- int bci = op->profiled_bci();
-
- // We need two temporaries to perform this operation on SPARC,
- // so to keep things simple we perform a redundant test here
- Label profile_done;
- __ cmp(obj, 0);
- __ br(Assembler::notEqual, false, Assembler::pn, profile_done);
- __ delayed()->nop();
- // Object is null; update methodDataOop
- ciMethodData* md = method->method_data();
- if (md == NULL) {
- bailout("out of memory building methodDataOop");
- return;
- }
- ciProfileData* data = md->bci_to_data(bci);
- assert(data != NULL, "need data for checkcast");
- assert(data->is_BitData(), "need BitData for checkcast");
- Register mdo = k_RInfo;
- Register data_val = Rtmp1;
- jobject2reg(md->constant_encoding(), mdo);
-
- int mdo_offset_bias = 0;
- if (!Assembler::is_simm13(md->byte_offset_of_slot(data, DataLayout::header_offset()) + data->size_in_bytes())) {
- // The offset is large so bias the mdo by the base of the slot so
- // that the ld can use simm13s to reference the slots of the data
- mdo_offset_bias = md->byte_offset_of_slot(data, DataLayout::header_offset());
- __ set(mdo_offset_bias, data_val);
- __ add(mdo, data_val, mdo);
- }
-
-
- Address flags_addr(mdo, md->byte_offset_of_slot(data, DataLayout::flags_offset()) - mdo_offset_bias);
- __ ldub(flags_addr, data_val);
- __ or3(data_val, BitData::null_seen_byte_constant(), data_val);
- __ stb(data_val, flags_addr);
- __ bind(profile_done);
- }
-
- Label done;
- // patching may screw with our temporaries on sparc,
- // so let's do it before loading the class
- if (k->is_loaded()) {
- jobject2reg(k->constant_encoding(), k_RInfo);
- } else {
- jobject2reg_with_patching(k_RInfo, op->info_for_patch());
- }
- assert(obj != k_RInfo, "must be different");
- __ cmp(obj, 0);
- __ br(Assembler::equal, false, Assembler::pn, done);
- __ delayed()->nop();
-
- // get object class
- // not a safepoint as obj null check happens earlier
- load(obj, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
- if (op->fast_check()) {
- assert_different_registers(klass_RInfo, k_RInfo);
- __ cmp(k_RInfo, klass_RInfo);
- __ br(Assembler::notEqual, false, Assembler::pt, *stub->entry());
- __ delayed()->nop();
- __ bind(done);
- } else {
- bool need_slow_path = true;
- if (k->is_loaded()) {
- if (k->super_check_offset() != sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes())
- need_slow_path = false;
- // perform the fast part of the checking logic
- __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, noreg,
- (need_slow_path ? &done : NULL),
- stub->entry(), NULL,
- RegisterOrConstant(k->super_check_offset()));
- } else {
- // perform the fast part of the checking logic
- __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, O7,
- &done, stub->entry(), NULL);
- }
- if (need_slow_path) {
- // call out-of-line instance of __ check_klass_subtype_slow_path(...):
- assert(klass_RInfo == G3 && k_RInfo == G1, "incorrect call setup");
- __ call(Runtime1::entry_for(Runtime1::slow_subtype_check_id), relocInfo::runtime_call_type);
- __ delayed()->nop();
- __ cmp(G3, 0);
- __ br(Assembler::equal, false, Assembler::pn, *stub->entry());
- __ delayed()->nop();
- }
- __ bind(done);
- }
- __ mov(obj, dst);
} else if (code == lir_instanceof) {
Register obj = op->object()->as_register();
Register k_RInfo = op->tmp1()->as_register();
@@ -2580,8 +2670,7 @@
jobject2reg_with_patching(k_RInfo, op->info_for_patch());
}
assert(obj != k_RInfo, "must be different");
- __ cmp(obj, 0);
- __ br(Assembler::equal, true, Assembler::pn, done);
+ __ br_null(obj, true, Assembler::pn, done);
__ delayed()->set(0, dst);
// get object class
@@ -2589,7 +2678,7 @@
load(obj, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
if (op->fast_check()) {
__ cmp(k_RInfo, klass_RInfo);
- __ br(Assembler::equal, true, Assembler::pt, done);
+ __ brx(Assembler::equal, true, Assembler::pt, done);
__ delayed()->set(1, dst);
__ set(0, dst);
__ bind(done);
@@ -2776,9 +2865,14 @@
ciProfileData* data = md->bci_to_data(bci);
assert(data->is_CounterData(), "need CounterData for calls");
assert(op->mdo()->is_single_cpu(), "mdo must be allocated");
+ Register mdo = op->mdo()->as_register();
+#ifdef _LP64
+ assert(op->tmp1()->is_double_cpu(), "tmp1 must be allocated");
+ Register tmp1 = op->tmp1()->as_register_lo();
+#else
assert(op->tmp1()->is_single_cpu(), "tmp1 must be allocated");
- Register mdo = op->mdo()->as_register();
Register tmp1 = op->tmp1()->as_register();
+#endif
jobject2reg(md->constant_encoding(), mdo);
int mdo_offset_bias = 0;
if (!Assembler::is_simm13(md->byte_offset_of_slot(data, CounterData::count_offset()) +
@@ -2795,13 +2889,13 @@
// Perform additional virtual call profiling for invokevirtual and
// invokeinterface bytecodes
if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) &&
- Tier1ProfileVirtualCalls) {
+ C1ProfileVirtualCalls) {
assert(op->recv()->is_single_cpu(), "recv must be allocated");
Register recv = op->recv()->as_register();
assert_different_registers(mdo, tmp1, recv);
assert(data->is_VirtualCallData(), "need VirtualCallData for virtual calls");
ciKlass* known_klass = op->known_holder();
- if (Tier1OptimizeVirtualCallProfiling && known_klass != NULL) {
+ if (C1OptimizeVirtualCallProfiling && known_klass != NULL) {
// We know the type that will be seen at this call site; we can
// statically update the methodDataOop rather than needing to do
// dynamic tests on the receiver type
@@ -2816,9 +2910,9 @@
Address data_addr(mdo, md->byte_offset_of_slot(data,
VirtualCallData::receiver_count_offset(i)) -
mdo_offset_bias);
- __ lduw(data_addr, tmp1);
+ __ ld_ptr(data_addr, tmp1);
__ add(tmp1, DataLayout::counter_increment, tmp1);
- __ stw(tmp1, data_addr);
+ __ st_ptr(tmp1, data_addr);
return;
}
}
@@ -2837,70 +2931,32 @@
__ st_ptr(tmp1, recv_addr);
Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) -
mdo_offset_bias);
- __ lduw(data_addr, tmp1);
+ __ ld_ptr(data_addr, tmp1);
__ add(tmp1, DataLayout::counter_increment, tmp1);
- __ stw(tmp1, data_addr);
+ __ st_ptr(tmp1, data_addr);
return;
}
}
} else {
load(Address(recv, oopDesc::klass_offset_in_bytes()), recv, T_OBJECT);
Label update_done;
- uint i;
- for (i = 0; i < VirtualCallData::row_limit(); i++) {
- Label next_test;
- // See if the receiver is receiver[n].
- Address receiver_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)) -
- mdo_offset_bias);
- __ ld_ptr(receiver_addr, tmp1);
- __ verify_oop(tmp1);
- __ cmp(recv, tmp1);
- __ brx(Assembler::notEqual, false, Assembler::pt, next_test);
- __ delayed()->nop();
- Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) -
- mdo_offset_bias);
- __ lduw(data_addr, tmp1);
- __ add(tmp1, DataLayout::counter_increment, tmp1);
- __ stw(tmp1, data_addr);
- __ br(Assembler::always, false, Assembler::pt, update_done);
- __ delayed()->nop();
- __ bind(next_test);
- }
-
- // Didn't find receiver; find next empty slot and fill it in
- for (i = 0; i < VirtualCallData::row_limit(); i++) {
- Label next_test;
- Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)) -
- mdo_offset_bias);
- load(recv_addr, tmp1, T_OBJECT);
- __ tst(tmp1);
- __ brx(Assembler::notEqual, false, Assembler::pt, next_test);
- __ delayed()->nop();
- __ st_ptr(recv, recv_addr);
- __ set(DataLayout::counter_increment, tmp1);
- __ st_ptr(tmp1, mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) -
- mdo_offset_bias);
- __ br(Assembler::always, false, Assembler::pt, update_done);
- __ delayed()->nop();
- __ bind(next_test);
- }
+ type_profile_helper(mdo, mdo_offset_bias, md, data, recv, tmp1, &update_done);
// Receiver did not match any saved receiver and there is no empty row for it.
// Increment total counter to indicate polymorphic case.
- __ lduw(counter_addr, tmp1);
+ __ ld_ptr(counter_addr, tmp1);
__ add(tmp1, DataLayout::counter_increment, tmp1);
- __ stw(tmp1, counter_addr);
+ __ st_ptr(tmp1, counter_addr);
__ bind(update_done);
}
} else {
// Static call
- __ lduw(counter_addr, tmp1);
+ __ ld_ptr(counter_addr, tmp1);
__ add(tmp1, DataLayout::counter_increment, tmp1);
- __ stw(tmp1, counter_addr);
+ __ st_ptr(tmp1, counter_addr);
}
}
-
void LIR_Assembler::align_backward_branch_target() {
__ align(OptoLoopAlignment);
}
@@ -3093,31 +3149,36 @@
// no-op on TSO
}
-// Macro to Pack two sequential registers containing 32 bit values
+// Pack two sequential registers containing 32 bit values
// into a single 64 bit register.
-// rs and rs->successor() are packed into rd
-// rd and rs may be the same register.
-// Note: rs and rs->successor() are destroyed.
-void LIR_Assembler::pack64( Register rs, Register rd ) {
+// src and src->successor() are packed into dst
+// src and dst may be the same register.
+// Note: src is destroyed
+void LIR_Assembler::pack64(LIR_Opr src, LIR_Opr dst) {
+ Register rs = src->as_register();
+ Register rd = dst->as_register_lo();
__ sllx(rs, 32, rs);
__ srl(rs->successor(), 0, rs->successor());
__ or3(rs, rs->successor(), rd);
}
-// Macro to unpack a 64 bit value in a register into
+// Unpack a 64 bit value in a register into
// two sequential registers.
-// rd is unpacked into rd and rd->successor()
-void LIR_Assembler::unpack64( Register rd ) {
- __ mov(rd, rd->successor());
- __ srax(rd, 32, rd);
- __ sra(rd->successor(), 0, rd->successor());
+// src is unpacked into dst and dst->successor()
+void LIR_Assembler::unpack64(LIR_Opr src, LIR_Opr dst) {
+ Register rs = src->as_register_lo();
+ Register rd = dst->as_register_hi();
+ assert_different_registers(rs, rd, rd->successor());
+ __ srlx(rs, 32, rd);
+ __ srl (rs, 0, rd->successor());
}
void LIR_Assembler::leal(LIR_Opr addr_opr, LIR_Opr dest) {
LIR_Address* addr = addr_opr->as_address_ptr();
assert(addr->index()->is_illegal() && addr->scale() == LIR_Address::times_1 && Assembler::is_simm13(addr->disp()), "can't handle complex addresses yet");
- __ add(addr->base()->as_register(), addr->disp(), dest->as_register());
+
+ __ add(addr->base()->as_pointer_register(), addr->disp(), dest->as_pointer_register());
}
@@ -3188,11 +3249,36 @@
tty->cr();
}
#endif
- continue;
+ } else {
+ LIR_Op* delay_op = new LIR_OpDelay(new LIR_Op0(lir_nop), op->as_OpJavaCall()->info());
+ inst->insert_before(i + 1, delay_op);
+ i++;
}
- LIR_Op* delay_op = new LIR_OpDelay(new LIR_Op0(lir_nop), op->as_OpJavaCall()->info());
- inst->insert_before(i + 1, delay_op);
+#if defined(TIERED) && !defined(_LP64)
+ // fixup the return value from G1 to O0/O1 for long returns.
+ // It's done here instead of in LIRGenerator because there's
+ // such a mismatch between the single reg and double reg
+ // calling convention.
+ LIR_OpJavaCall* callop = op->as_OpJavaCall();
+ if (callop->result_opr() == FrameMap::out_long_opr) {
+ LIR_OpJavaCall* call;
+ LIR_OprList* arguments = new LIR_OprList(callop->arguments()->length());
+ for (int a = 0; a < arguments->length(); a++) {
+ arguments[a] = callop->arguments()[a];
+ }
+ if (op->code() == lir_virtual_call) {
+ call = new LIR_OpJavaCall(op->code(), callop->method(), callop->receiver(), FrameMap::g1_long_single_opr,
+ callop->vtable_offset(), arguments, callop->info());
+ } else {
+ call = new LIR_OpJavaCall(op->code(), callop->method(), callop->receiver(), FrameMap::g1_long_single_opr,
+ callop->addr(), arguments, callop->info());
+ }
+ inst->at_put(i - 1, call);
+ inst->insert_before(i + 1, new LIR_Op1(lir_unpack64, FrameMap::g1_long_single_opr, callop->result_opr(),
+ T_LONG, lir_patch_none, NULL));
+ }
+#endif
break;
}
}
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -71,9 +71,13 @@
static bool is_single_instruction(LIR_Op* op);
+ // Record the type of the receiver in ReceiverTypeData
+ void type_profile_helper(Register mdo, int mdo_offset_bias,
+ ciMethodData *md, ciProfileData *data,
+ Register recv, Register tmp1, Label* update_done);
public:
- void pack64( Register rs, Register rd );
- void unpack64( Register rd );
+ void pack64(LIR_Opr src, LIR_Opr dst);
+ void unpack64(LIR_Opr src, LIR_Opr dst);
enum {
#ifdef _LP64
--- a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -227,29 +227,37 @@
}
}
+LIR_Opr LIRGenerator::load_immediate(int x, BasicType type) {
+ LIR_Opr r;
+ if (type == T_LONG) {
+ r = LIR_OprFact::longConst(x);
+ } else if (type == T_INT) {
+ r = LIR_OprFact::intConst(x);
+ } else {
+ ShouldNotReachHere();
+ }
+ if (!Assembler::is_simm13(x)) {
+ LIR_Opr tmp = new_register(type);
+ __ move(r, tmp);
+ return tmp;
+ }
+ return r;
+}
-void LIRGenerator::increment_counter(address counter, int step) {
+void LIRGenerator::increment_counter(address counter, BasicType type, int step) {
LIR_Opr pointer = new_pointer_register();
__ move(LIR_OprFact::intptrConst(counter), pointer);
- LIR_Address* addr = new LIR_Address(pointer, T_INT);
+ LIR_Address* addr = new LIR_Address(pointer, type);
increment_counter(addr, step);
}
void LIRGenerator::increment_counter(LIR_Address* addr, int step) {
- LIR_Opr temp = new_register(T_INT);
+ LIR_Opr temp = new_register(addr->type());
__ move(addr, temp);
- LIR_Opr c = LIR_OprFact::intConst(step);
- if (Assembler::is_simm13(step)) {
- __ add(temp, c, temp);
- } else {
- LIR_Opr temp2 = new_register(T_INT);
- __ move(c, temp2);
- __ add(temp, temp2, temp);
- }
+ __ add(temp, load_immediate(step, addr->type()), temp);
__ move(temp, addr);
}
-
void LIRGenerator::cmp_mem_int(LIR_Condition condition, LIR_Opr base, int disp, int c, CodeEmitInfo* info) {
LIR_Opr o7opr = FrameMap::O7_opr;
__ load(new LIR_Address(base, disp, T_INT), o7opr, info);
@@ -611,7 +619,6 @@
left.load_item();
right.load_item();
LIR_Opr reg = rlock_result(x);
-
if (x->x()->type()->is_float_kind()) {
Bytecodes::Code code = x->op();
__ fcmp2int(left.result(), right.result(), reg, (code == Bytecodes::_fcmpl || code == Bytecodes::_dcmpl));
@@ -1089,12 +1096,12 @@
// add safepoint before generating condition code so it can be recomputed
if (x->is_safepoint()) {
// increment backedge counter if needed
- increment_backedge_counter(state_for(x, x->state_before()));
-
+ increment_backedge_counter(state_for(x, x->state_before()), x->profiled_bci());
__ safepoint(new_register(T_INT), state_for(x, x->state_before()));
}
__ cmp(lir_cond(cond), left, right);
+ // Generate branch profiling. Profiling code doesn't kill flags.
profile_branch(x, cond);
move_to_phi(x->state());
if (x->x()->type()->is_float_kind()) {
--- a/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -465,12 +465,10 @@
break;
-#ifdef TIERED
case counter_overflow_id:
- // G4 contains bci
- oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), G4);
+ // G4 contains bci, G5 contains method
+ oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), G4, G5);
break;
-#endif // TIERED
case new_type_array_id:
case new_object_array_id:
--- a/hotspot/src/cpu/sparc/vm/c1_globals_sparc.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_globals_sparc.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -34,14 +34,7 @@
define_pd_global(bool, UseOnStackReplacement, true );
define_pd_global(bool, TieredCompilation, false);
define_pd_global(intx, CompileThreshold, 1000 ); // Design center runs on 1.3.1
-define_pd_global(intx, Tier2CompileThreshold, 1500 );
-define_pd_global(intx, Tier3CompileThreshold, 2000 );
-define_pd_global(intx, Tier4CompileThreshold, 2500 );
-
define_pd_global(intx, BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier2BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier3BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier4BackEdgeThreshold, 100000);
define_pd_global(intx, OnStackReplacePercentage, 1400 );
define_pd_global(bool, UseTLAB, true );
--- a/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -37,21 +37,8 @@
define_pd_global(bool, ProfileInterpreter, true);
#endif // CC_INTERP
define_pd_global(bool, TieredCompilation, false);
-#ifdef TIERED
-define_pd_global(intx, CompileThreshold, 1000);
-define_pd_global(intx, BackEdgeThreshold, 14000);
-#else
define_pd_global(intx, CompileThreshold, 10000);
define_pd_global(intx, BackEdgeThreshold, 140000);
-#endif // TIERED
-
-define_pd_global(intx, Tier2CompileThreshold, 10000); // unused level
-define_pd_global(intx, Tier3CompileThreshold, 10000);
-define_pd_global(intx, Tier4CompileThreshold, 40000);
-
-define_pd_global(intx, Tier2BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier3BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier4BackEdgeThreshold, 100000);
define_pd_global(intx, OnStackReplacePercentage, 140);
define_pd_global(intx, ConditionalMoveLimit, 4);
--- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -2431,3 +2431,20 @@
}
#endif // CC_INTERP
}
+
+// Jump if ((*counter_addr += increment) & mask) satisfies the condition.
+void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr,
+ int increment, int mask,
+ Register scratch1, Register scratch2,
+ Condition cond, Label *where) {
+ ld(counter_addr, scratch1);
+ add(scratch1, increment, scratch1);
+ if (is_simm13(mask)) {
+ andcc(scratch1, mask, G0);
+ } else {
+ set(mask, scratch2);
+ andcc(scratch1, scratch2, G0);
+ }
+ br(cond, false, Assembler::pn, *where);
+ delayed()->st(scratch1, counter_addr);
+}
--- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -278,6 +278,10 @@
void increment_mdp_data_at(Register reg, int constant,
Register bumped_count, Register scratch2,
bool decrement = false);
+ void increment_mask_and_jump(Address counter_addr,
+ int increment, int mask,
+ Register scratch1, Register scratch2,
+ Condition cond, Label *where);
void set_mdp_flag_at(int flag_constant, Register scratch);
void test_mdp_data_at(int offset, Register value, Label& not_equal_continue,
Register scratch);
@@ -321,4 +325,5 @@
void save_return_value(TosState state, bool is_native_call);
void restore_return_value(TosState state, bool is_native_call);
+
};
--- a/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -3331,10 +3331,8 @@
__ stf(FloatRegisterImpl::D, Freturn0, saved_Freturn0_addr);
#if !defined(_LP64)
#if defined(COMPILER2)
- if (!TieredCompilation) {
- // 32-bit 1-register longs return longs in G1
- __ stx(Greturn1, saved_Greturn1_addr);
- }
+ // 32-bit 1-register longs return longs in G1
+ __ stx(Greturn1, saved_Greturn1_addr);
#endif
__ set_last_Java_frame(SP, noreg);
__ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, Deoptimization::unpack_frames), G2_thread, G4deopt_mode);
@@ -3347,24 +3345,15 @@
__ reset_last_Java_frame();
__ ldf(FloatRegisterImpl::D, saved_Freturn0_addr, Freturn0);
- // In tiered we never use C2 to compile methods returning longs so
- // the result is where we expect it already.
-
#if !defined(_LP64) && defined(COMPILER2)
// In 32 bit, C2 returns longs in G1 so restore the saved G1 into
- // I0/I1 if the return value is long. In the tiered world there is
- // a mismatch between how C1 and C2 return longs compiles and so
- // currently compilation of methods which return longs is disabled
- // for C2 and so is this code. Eventually C1 and C2 will do the
- // same thing for longs in the tiered world.
- if (!TieredCompilation) {
- Label not_long;
- __ cmp(O0,T_LONG);
- __ br(Assembler::notEqual, false, Assembler::pt, not_long);
- __ delayed()->nop();
- __ ldd(saved_Greturn1_addr,I0);
- __ bind(not_long);
- }
+ // I0/I1 if the return value is long.
+ Label not_long;
+ __ cmp(O0,T_LONG);
+ __ br(Assembler::notEqual, false, Assembler::pt, not_long);
+ __ delayed()->nop();
+ __ ldd(saved_Greturn1_addr,I0);
+ __ bind(not_long);
#endif
__ ret();
__ delayed()->restore();
--- a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -294,34 +294,64 @@
// ??: invocation counter
//
void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) {
- // Update standard invocation counters
- __ increment_invocation_counter(O0, G3_scratch);
- if (ProfileInterpreter) { // %%% Merge this into methodDataOop
- Address interpreter_invocation_counter(Lmethod, methodOopDesc::interpreter_invocation_counter_offset());
- __ ld(interpreter_invocation_counter, G3_scratch);
- __ inc(G3_scratch);
- __ st(G3_scratch, interpreter_invocation_counter);
- }
+ // Note: In tiered we increment either counters in methodOop or in MDO depending if we're profiling or not.
+ if (TieredCompilation) {
+ const int increment = InvocationCounter::count_increment;
+ const int mask = ((1 << Tier0InvokeNotifyFreqLog) - 1) << InvocationCounter::count_shift;
+ Label no_mdo, done;
+ if (ProfileInterpreter) {
+ // If no method data exists, go to profile_continue.
+ __ ld_ptr(Lmethod, methodOopDesc::method_data_offset(), G4_scratch);
+ __ br_null(G4_scratch, false, Assembler::pn, no_mdo);
+ __ delayed()->nop();
+ // Increment counter
+ Address mdo_invocation_counter(G4_scratch,
+ in_bytes(methodDataOopDesc::invocation_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(mdo_invocation_counter, increment, mask,
+ G3_scratch, Lscratch,
+ Assembler::zero, overflow);
+ __ ba(false, done);
+ __ delayed()->nop();
+ }
- if (ProfileInterpreter && profile_method != NULL) {
- // Test to see if we should create a method data oop
- AddressLiteral profile_limit(&InvocationCounter::InterpreterProfileLimit);
- __ sethi(profile_limit, G3_scratch);
- __ ld(G3_scratch, profile_limit.low10(), G3_scratch);
- __ cmp(O0, G3_scratch);
- __ br(Assembler::lessUnsigned, false, Assembler::pn, *profile_method_continue);
- __ delayed()->nop();
+ // Increment counter in methodOop
+ __ bind(no_mdo);
+ Address invocation_counter(Lmethod,
+ in_bytes(methodOopDesc::invocation_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(invocation_counter, increment, mask,
+ G3_scratch, Lscratch,
+ Assembler::zero, overflow);
+ __ bind(done);
+ } else {
+ // Update standard invocation counters
+ __ increment_invocation_counter(O0, G3_scratch);
+ if (ProfileInterpreter) { // %%% Merge this into methodDataOop
+ Address interpreter_invocation_counter(Lmethod,in_bytes(methodOopDesc::interpreter_invocation_counter_offset()));
+ __ ld(interpreter_invocation_counter, G3_scratch);
+ __ inc(G3_scratch);
+ __ st(G3_scratch, interpreter_invocation_counter);
+ }
- // if no method data exists, go to profile_method
- __ test_method_data_pointer(*profile_method);
- }
+ if (ProfileInterpreter && profile_method != NULL) {
+ // Test to see if we should create a method data oop
+ AddressLiteral profile_limit((address)&InvocationCounter::InterpreterProfileLimit);
+ __ load_contents(profile_limit, G3_scratch);
+ __ cmp(O0, G3_scratch);
+ __ br(Assembler::lessUnsigned, false, Assembler::pn, *profile_method_continue);
+ __ delayed()->nop();
- AddressLiteral invocation_limit(&InvocationCounter::InterpreterInvocationLimit);
- __ sethi(invocation_limit, G3_scratch);
- __ ld(G3_scratch, invocation_limit.low10(), G3_scratch);
- __ cmp(O0, G3_scratch);
- __ br(Assembler::greaterEqualUnsigned, false, Assembler::pn, *overflow);
- __ delayed()->nop();
+ // if no method data exists, go to profile_method
+ __ test_method_data_pointer(*profile_method);
+ }
+
+ AddressLiteral invocation_limit((address)&InvocationCounter::InterpreterInvocationLimit);
+ __ load_contents(invocation_limit, G3_scratch);
+ __ cmp(O0, G3_scratch);
+ __ br(Assembler::greaterEqualUnsigned, false, Assembler::pn, *overflow);
+ __ delayed()->nop();
+ }
}
--- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1580,6 +1580,7 @@
const Register O0_cur_bcp = O0;
__ mov( Lbcp, O0_cur_bcp );
+
bool increment_invocation_counter_for_backward_branches = UseCompiler && UseLoopCounter;
if ( increment_invocation_counter_for_backward_branches ) {
Label Lforward;
@@ -1588,17 +1589,84 @@
// Bump bytecode pointer by displacement (take the branch)
__ delayed()->add( O1_disp, Lbcp, Lbcp ); // add to bc addr
- // Update Backedge branch separately from invocations
- const Register G4_invoke_ctr = G4;
- __ increment_backedge_counter(G4_invoke_ctr, G1_scratch);
- if (ProfileInterpreter) {
- __ test_invocation_counter_for_mdp(G4_invoke_ctr, Lbcp, G3_scratch, Lforward);
- if (UseOnStackReplacement) {
- __ test_backedge_count_for_osr(O2_bumped_count, O0_cur_bcp, G3_scratch);
+ if (TieredCompilation) {
+ Label Lno_mdo, Loverflow;
+ int increment = InvocationCounter::count_increment;
+ int mask = ((1 << Tier0BackedgeNotifyFreqLog) - 1) << InvocationCounter::count_shift;
+ if (ProfileInterpreter) {
+ // If no method data exists, go to profile_continue.
+ __ ld_ptr(Lmethod, methodOopDesc::method_data_offset(), G4_scratch);
+ __ br_null(G4_scratch, false, Assembler::pn, Lno_mdo);
+ __ delayed()->nop();
+
+ // Increment backedge counter in the MDO
+ Address mdo_backedge_counter(G4_scratch, in_bytes(methodDataOopDesc::backedge_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(mdo_backedge_counter, increment, mask, G3_scratch, Lscratch,
+ Assembler::notZero, &Lforward);
+ __ ba(false, Loverflow);
+ __ delayed()->nop();
}
+
+ // If there's no MDO, increment counter in methodOop
+ __ bind(Lno_mdo);
+ Address backedge_counter(Lmethod, in_bytes(methodOopDesc::backedge_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(backedge_counter, increment, mask, G3_scratch, Lscratch,
+ Assembler::notZero, &Lforward);
+ __ bind(Loverflow);
+
+ // notify point for loop, pass branch bytecode
+ __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), O0_cur_bcp);
+
+ // Was an OSR adapter generated?
+ // O0 = osr nmethod
+ __ br_null(O0, false, Assembler::pn, Lforward);
+ __ delayed()->nop();
+
+ // Has the nmethod been invalidated already?
+ __ ld(O0, nmethod::entry_bci_offset(), O2);
+ __ cmp(O2, InvalidOSREntryBci);
+ __ br(Assembler::equal, false, Assembler::pn, Lforward);
+ __ delayed()->nop();
+
+ // migrate the interpreter frame off of the stack
+
+ __ mov(G2_thread, L7);
+ // save nmethod
+ __ mov(O0, L6);
+ __ set_last_Java_frame(SP, noreg);
+ __ call_VM_leaf(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin), L7);
+ __ reset_last_Java_frame();
+ __ mov(L7, G2_thread);
+
+ // move OSR nmethod to I1
+ __ mov(L6, I1);
+
+ // OSR buffer to I0
+ __ mov(O0, I0);
+
+ // remove the interpreter frame
+ __ restore(I5_savedSP, 0, SP);
+
+ // Jump to the osr code.
+ __ ld_ptr(O1, nmethod::osr_entry_point_offset(), O2);
+ __ jmp(O2, G0);
+ __ delayed()->nop();
+
} else {
- if (UseOnStackReplacement) {
- __ test_backedge_count_for_osr(G4_invoke_ctr, O0_cur_bcp, G3_scratch);
+ // Update Backedge branch separately from invocations
+ const Register G4_invoke_ctr = G4;
+ __ increment_backedge_counter(G4_invoke_ctr, G1_scratch);
+ if (ProfileInterpreter) {
+ __ test_invocation_counter_for_mdp(G4_invoke_ctr, Lbcp, G3_scratch, Lforward);
+ if (UseOnStackReplacement) {
+ __ test_backedge_count_for_osr(O2_bumped_count, O0_cur_bcp, G3_scratch);
+ }
+ } else {
+ if (UseOnStackReplacement) {
+ __ test_backedge_count_for_osr(G4_invoke_ctr, O0_cur_bcp, G3_scratch);
+ }
}
}
--- a/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -68,19 +68,15 @@
__ jmp(_continuation);
}
-#ifdef TIERED
void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
+ ce->store_parameter(_method->as_register(), 1);
ce->store_parameter(_bci, 0);
__ call(RuntimeAddress(Runtime1::entry_for(Runtime1::counter_overflow_id)));
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
-
__ jmp(_continuation);
}
-#endif // TIERED
-
-
RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index,
bool throw_index_out_of_bounds_exception)
--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1613,7 +1613,194 @@
__ bind(*op->stub()->continuation());
}
-
+void LIR_Assembler::type_profile_helper(Register mdo,
+ ciMethodData *md, ciProfileData *data,
+ Register recv, Label* update_done) {
+ uint i;
+ for (i = 0; i < ReceiverTypeData::row_limit(); i++) {
+ Label next_test;
+ // See if the receiver is receiver[n].
+ __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))));
+ __ jccb(Assembler::notEqual, next_test);
+ Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)));
+ __ addptr(data_addr, DataLayout::counter_increment);
+ __ jmpb(*update_done);
+ __ bind(next_test);
+ }
+
+ // Didn't find receiver; find next empty slot and fill it in
+ for (i = 0; i < ReceiverTypeData::row_limit(); i++) {
+ Label next_test;
+ Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)));
+ __ cmpptr(recv_addr, (intptr_t)NULL_WORD);
+ __ jccb(Assembler::notEqual, next_test);
+ __ movptr(recv_addr, recv);
+ __ movptr(Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i))), DataLayout::counter_increment);
+ __ jmpb(*update_done);
+ __ bind(next_test);
+ }
+}
+
+void LIR_Assembler::emit_checkcast(LIR_OpTypeCheck *op) {
+ assert(op->code() == lir_checkcast, "Invalid operation");
+ // we always need a stub for the failure case.
+ CodeStub* stub = op->stub();
+ Register obj = op->object()->as_register();
+ Register k_RInfo = op->tmp1()->as_register();
+ Register klass_RInfo = op->tmp2()->as_register();
+ Register dst = op->result_opr()->as_register();
+ ciKlass* k = op->klass();
+ Register Rtmp1 = noreg;
+
+ // check if it needs to be profiled
+ ciMethodData* md;
+ ciProfileData* data;
+
+ if (op->should_profile()) {
+ ciMethod* method = op->profiled_method();
+ assert(method != NULL, "Should have method");
+ int bci = op->profiled_bci();
+ md = method->method_data();
+ if (md == NULL) {
+ bailout("out of memory building methodDataOop");
+ return;
+ }
+ data = md->bci_to_data(bci);
+ assert(data != NULL, "need data for checkcast");
+ assert(data->is_ReceiverTypeData(), "need ReceiverTypeData for checkcast");
+ }
+ Label profile_cast_failure;
+
+ Label done, done_null;
+ // Where to go in case of cast failure
+ Label *failure_target = op->should_profile() ? &profile_cast_failure : stub->entry();
+
+ if (obj == k_RInfo) {
+ k_RInfo = dst;
+ } else if (obj == klass_RInfo) {
+ klass_RInfo = dst;
+ }
+ if (k->is_loaded()) {
+ select_different_registers(obj, dst, k_RInfo, klass_RInfo);
+ } else {
+ Rtmp1 = op->tmp3()->as_register();
+ select_different_registers(obj, dst, k_RInfo, klass_RInfo, Rtmp1);
+ }
+
+ assert_different_registers(obj, k_RInfo, klass_RInfo);
+ if (!k->is_loaded()) {
+ jobject2reg_with_patching(k_RInfo, op->info_for_patch());
+ } else {
+#ifdef _LP64
+ __ movoop(k_RInfo, k->constant_encoding());
+#endif // _LP64
+ }
+ assert(obj != k_RInfo, "must be different");
+
+ __ cmpptr(obj, (int32_t)NULL_WORD);
+ if (op->should_profile()) {
+ Label profile_done;
+ __ jccb(Assembler::notEqual, profile_done);
+ // Object is null; update methodDataOop
+ Register mdo = klass_RInfo;
+ __ movoop(mdo, md->constant_encoding());
+ Address data_addr(mdo, md->byte_offset_of_slot(data, DataLayout::header_offset()));
+ int header_bits = DataLayout::flag_mask_to_header_mask(BitData::null_seen_byte_constant());
+ __ orl(data_addr, header_bits);
+ __ jmp(done_null);
+ __ bind(profile_done);
+ } else {
+ __ jcc(Assembler::equal, done_null);
+ }
+ __ verify_oop(obj);
+
+ if (op->fast_check()) {
+ // get object classo
+ // not a safepoint as obj null check happens earlier
+ if (k->is_loaded()) {
+#ifdef _LP64
+ __ cmpptr(k_RInfo, Address(obj, oopDesc::klass_offset_in_bytes()));
+#else
+ __ cmpoop(Address(obj, oopDesc::klass_offset_in_bytes()), k->constant_encoding());
+#endif // _LP64
+ } else {
+ __ cmpptr(k_RInfo, Address(obj, oopDesc::klass_offset_in_bytes()));
+ }
+ __ jcc(Assembler::notEqual, *failure_target);
+ } else {
+ // get object class
+ // not a safepoint as obj null check happens earlier
+ __ movptr(klass_RInfo, Address(obj, oopDesc::klass_offset_in_bytes()));
+ if (k->is_loaded()) {
+ // See if we get an immediate positive hit
+#ifdef _LP64
+ __ cmpptr(k_RInfo, Address(klass_RInfo, k->super_check_offset()));
+#else
+ __ cmpoop(Address(klass_RInfo, k->super_check_offset()), k->constant_encoding());
+#endif // _LP64
+ if (sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes() != k->super_check_offset()) {
+ __ jcc(Assembler::notEqual, *failure_target);
+ } else {
+ // See if we get an immediate positive hit
+ __ jcc(Assembler::equal, done);
+ // check for self
+#ifdef _LP64
+ __ cmpptr(klass_RInfo, k_RInfo);
+#else
+ __ cmpoop(klass_RInfo, k->constant_encoding());
+#endif // _LP64
+ __ jcc(Assembler::equal, done);
+
+ __ push(klass_RInfo);
+#ifdef _LP64
+ __ push(k_RInfo);
+#else
+ __ pushoop(k->constant_encoding());
+#endif // _LP64
+ __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::slow_subtype_check_id)));
+ __ pop(klass_RInfo);
+ __ pop(klass_RInfo);
+ // result is a boolean
+ __ cmpl(klass_RInfo, 0);
+ __ jcc(Assembler::equal, *failure_target);
+ }
+ } else {
+ // perform the fast part of the checking logic
+ __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, &done, failure_target, NULL);
+ // call out-of-line instance of __ check_klass_subtype_slow_path(...):
+ __ push(klass_RInfo);
+ __ push(k_RInfo);
+ __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::slow_subtype_check_id)));
+ __ pop(klass_RInfo);
+ __ pop(k_RInfo);
+ // result is a boolean
+ __ cmpl(k_RInfo, 0);
+ __ jcc(Assembler::equal, *failure_target);
+ }
+ }
+ __ bind(done);
+
+ if (op->should_profile()) {
+ Register mdo = klass_RInfo, recv = k_RInfo;
+ __ movoop(mdo, md->constant_encoding());
+ __ movptr(recv, Address(obj, oopDesc::klass_offset_in_bytes()));
+ Label update_done;
+ type_profile_helper(mdo, md, data, recv, &update_done);
+ __ jmpb(update_done);
+
+ __ bind(profile_cast_failure);
+ __ movoop(mdo, md->constant_encoding());
+ Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()));
+ __ subptr(counter_addr, DataLayout::counter_increment);
+ __ jmp(*stub->entry());
+
+ __ bind(update_done);
+ }
+ __ bind(done_null);
+ if (dst != obj) {
+ __ mov(dst, obj);
+ }
+}
void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) {
LIR_Code code = op->code();
@@ -1646,140 +1833,6 @@
__ cmpl(k_RInfo, 0);
__ jcc(Assembler::equal, *stub->entry());
__ bind(done);
- } else if (op->code() == lir_checkcast) {
- // we always need a stub for the failure case.
- CodeStub* stub = op->stub();
- Register obj = op->object()->as_register();
- Register k_RInfo = op->tmp1()->as_register();
- Register klass_RInfo = op->tmp2()->as_register();
- Register dst = op->result_opr()->as_register();
- ciKlass* k = op->klass();
- Register Rtmp1 = noreg;
-
- Label done;
- if (obj == k_RInfo) {
- k_RInfo = dst;
- } else if (obj == klass_RInfo) {
- klass_RInfo = dst;
- }
- if (k->is_loaded()) {
- select_different_registers(obj, dst, k_RInfo, klass_RInfo);
- } else {
- Rtmp1 = op->tmp3()->as_register();
- select_different_registers(obj, dst, k_RInfo, klass_RInfo, Rtmp1);
- }
-
- assert_different_registers(obj, k_RInfo, klass_RInfo);
- if (!k->is_loaded()) {
- jobject2reg_with_patching(k_RInfo, op->info_for_patch());
- } else {
-#ifdef _LP64
- __ movoop(k_RInfo, k->constant_encoding());
-#else
- k_RInfo = noreg;
-#endif // _LP64
- }
- assert(obj != k_RInfo, "must be different");
- __ cmpptr(obj, (int32_t)NULL_WORD);
- if (op->profiled_method() != NULL) {
- ciMethod* method = op->profiled_method();
- int bci = op->profiled_bci();
-
- Label profile_done;
- __ jcc(Assembler::notEqual, profile_done);
- // Object is null; update methodDataOop
- ciMethodData* md = method->method_data();
- if (md == NULL) {
- bailout("out of memory building methodDataOop");
- return;
- }
- ciProfileData* data = md->bci_to_data(bci);
- assert(data != NULL, "need data for checkcast");
- assert(data->is_BitData(), "need BitData for checkcast");
- Register mdo = klass_RInfo;
- __ movoop(mdo, md->constant_encoding());
- Address data_addr(mdo, md->byte_offset_of_slot(data, DataLayout::header_offset()));
- int header_bits = DataLayout::flag_mask_to_header_mask(BitData::null_seen_byte_constant());
- __ orl(data_addr, header_bits);
- __ jmp(done);
- __ bind(profile_done);
- } else {
- __ jcc(Assembler::equal, done);
- }
- __ verify_oop(obj);
-
- if (op->fast_check()) {
- // get object classo
- // not a safepoint as obj null check happens earlier
- if (k->is_loaded()) {
-#ifdef _LP64
- __ cmpptr(k_RInfo, Address(obj, oopDesc::klass_offset_in_bytes()));
-#else
- __ cmpoop(Address(obj, oopDesc::klass_offset_in_bytes()), k->constant_encoding());
-#endif // _LP64
- } else {
- __ cmpptr(k_RInfo, Address(obj, oopDesc::klass_offset_in_bytes()));
-
- }
- __ jcc(Assembler::notEqual, *stub->entry());
- __ bind(done);
- } else {
- // get object class
- // not a safepoint as obj null check happens earlier
- __ movptr(klass_RInfo, Address(obj, oopDesc::klass_offset_in_bytes()));
- if (k->is_loaded()) {
- // See if we get an immediate positive hit
-#ifdef _LP64
- __ cmpptr(k_RInfo, Address(klass_RInfo, k->super_check_offset()));
-#else
- __ cmpoop(Address(klass_RInfo, k->super_check_offset()), k->constant_encoding());
-#endif // _LP64
- if (sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes() != k->super_check_offset()) {
- __ jcc(Assembler::notEqual, *stub->entry());
- } else {
- // See if we get an immediate positive hit
- __ jcc(Assembler::equal, done);
- // check for self
-#ifdef _LP64
- __ cmpptr(klass_RInfo, k_RInfo);
-#else
- __ cmpoop(klass_RInfo, k->constant_encoding());
-#endif // _LP64
- __ jcc(Assembler::equal, done);
-
- __ push(klass_RInfo);
-#ifdef _LP64
- __ push(k_RInfo);
-#else
- __ pushoop(k->constant_encoding());
-#endif // _LP64
- __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::slow_subtype_check_id)));
- __ pop(klass_RInfo);
- __ pop(klass_RInfo);
- // result is a boolean
- __ cmpl(klass_RInfo, 0);
- __ jcc(Assembler::equal, *stub->entry());
- }
- __ bind(done);
- } else {
- // perform the fast part of the checking logic
- __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, &done, stub->entry(), NULL);
- // call out-of-line instance of __ check_klass_subtype_slow_path(...):
- __ push(klass_RInfo);
- __ push(k_RInfo);
- __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::slow_subtype_check_id)));
- __ pop(klass_RInfo);
- __ pop(k_RInfo);
- // result is a boolean
- __ cmpl(k_RInfo, 0);
- __ jcc(Assembler::equal, *stub->entry());
- __ bind(done);
- }
-
- }
- if (dst != obj) {
- __ mov(dst, obj);
- }
} else if (code == lir_instanceof) {
Register obj = op->object()->as_register();
Register k_RInfo = op->tmp1()->as_register();
@@ -1922,7 +1975,6 @@
}
}
-
void LIR_Assembler::cmove(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, LIR_Opr result) {
Assembler::Condition acond, ncond;
switch (condition) {
@@ -3253,13 +3305,13 @@
// Perform additional virtual call profiling for invokevirtual and
// invokeinterface bytecodes
if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) &&
- Tier1ProfileVirtualCalls) {
+ C1ProfileVirtualCalls) {
assert(op->recv()->is_single_cpu(), "recv must be allocated");
Register recv = op->recv()->as_register();
assert_different_registers(mdo, recv);
assert(data->is_VirtualCallData(), "need VirtualCallData for virtual calls");
ciKlass* known_klass = op->known_holder();
- if (Tier1OptimizeVirtualCallProfiling && known_klass != NULL) {
+ if (C1OptimizeVirtualCallProfiling && known_klass != NULL) {
// We know the type that will be seen at this call site; we can
// statically update the methodDataOop rather than needing to do
// dynamic tests on the receiver type
@@ -3272,7 +3324,7 @@
ciKlass* receiver = vc_data->receiver(i);
if (known_klass->equals(receiver)) {
Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)));
- __ addl(data_addr, DataLayout::counter_increment);
+ __ addptr(data_addr, DataLayout::counter_increment);
return;
}
}
@@ -3288,49 +3340,26 @@
Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)));
__ movoop(recv_addr, known_klass->constant_encoding());
Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)));
- __ addl(data_addr, DataLayout::counter_increment);
+ __ addptr(data_addr, DataLayout::counter_increment);
return;
}
}
} else {
__ movptr(recv, Address(recv, oopDesc::klass_offset_in_bytes()));
Label update_done;
- uint i;
- for (i = 0; i < VirtualCallData::row_limit(); i++) {
- Label next_test;
- // See if the receiver is receiver[n].
- __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i))));
- __ jcc(Assembler::notEqual, next_test);
- Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)));
- __ addl(data_addr, DataLayout::counter_increment);
- __ jmp(update_done);
- __ bind(next_test);
- }
-
- // Didn't find receiver; find next empty slot and fill it in
- for (i = 0; i < VirtualCallData::row_limit(); i++) {
- Label next_test;
- Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)));
- __ cmpptr(recv_addr, (int32_t)NULL_WORD);
- __ jcc(Assembler::notEqual, next_test);
- __ movptr(recv_addr, recv);
- __ movl(Address(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i))), DataLayout::counter_increment);
- __ jmp(update_done);
- __ bind(next_test);
- }
+ type_profile_helper(mdo, md, data, recv, &update_done);
// Receiver did not match any saved receiver and there is no empty row for it.
// Increment total counter to indicate polymorphic case.
- __ addl(counter_addr, DataLayout::counter_increment);
+ __ addptr(counter_addr, DataLayout::counter_increment);
__ bind(update_done);
}
} else {
// Static call
- __ addl(counter_addr, DataLayout::counter_increment);
+ __ addptr(counter_addr, DataLayout::counter_increment);
}
}
-
void LIR_Assembler::emit_delay(LIR_OpDelay*) {
Unimplemented();
}
--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -42,7 +42,10 @@
// method.
Address as_Address(LIR_Address* addr, Register tmp);
-
+ // Record the type of the receiver in ReceiverTypeData
+ void type_profile_helper(Register mdo,
+ ciMethodData *md, ciProfileData *data,
+ Register recv, Label* update_done);
public:
void store_parameter(Register r, int offset_from_esp_in_words);
--- a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -182,10 +182,22 @@
}
-void LIRGenerator::increment_counter(address counter, int step) {
+LIR_Opr LIRGenerator::load_immediate(int x, BasicType type) {
+ LIR_Opr r;
+ if (type == T_LONG) {
+ r = LIR_OprFact::longConst(x);
+ } else if (type == T_INT) {
+ r = LIR_OprFact::intConst(x);
+ } else {
+ ShouldNotReachHere();
+ }
+ return r;
+}
+
+void LIRGenerator::increment_counter(address counter, BasicType type, int step) {
LIR_Opr pointer = new_pointer_register();
__ move(LIR_OprFact::intptrConst(counter), pointer);
- LIR_Address* addr = new LIR_Address(pointer, T_INT);
+ LIR_Address* addr = new LIR_Address(pointer, type);
increment_counter(addr, step);
}
@@ -194,7 +206,6 @@
__ add((LIR_Opr)addr, LIR_OprFact::intConst(step), (LIR_Opr)addr);
}
-
void LIRGenerator::cmp_mem_int(LIR_Condition condition, LIR_Opr base, int disp, int c, CodeEmitInfo* info) {
__ cmp_mem_int(condition, base, disp, c, info);
}
@@ -1188,8 +1199,7 @@
// add safepoint before generating condition code so it can be recomputed
if (x->is_safepoint()) {
// increment backedge counter if needed
- increment_backedge_counter(state_for(x, x->state_before()));
-
+ increment_backedge_counter(state_for(x, x->state_before()), x->profiled_bci());
__ safepoint(LIR_OprFact::illegalOpr, state_for(x, x->state_before()));
}
set_no_result(x);
@@ -1197,6 +1207,7 @@
LIR_Opr left = xin->result();
LIR_Opr right = yin->result();
__ cmp(lir_cond(cond), left, right);
+ // Generate branch profiling. Profiling code doesn't kill flags.
profile_branch(x, cond);
move_to_phi(x->state());
if (x->x()->type()->is_float_kind()) {
--- a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1068,15 +1068,16 @@
break;
-#ifdef TIERED
case counter_overflow_id:
{
- Register bci = rax;
+ Register bci = rax, method = rbx;
__ enter();
- OopMap* map = save_live_registers(sasm, 2);
+ OopMap* map = save_live_registers(sasm, 3);
// Retrieve bci
__ movl(bci, Address(rbp, 2*BytesPerWord));
- int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, counter_overflow), bci);
+ // And a pointer to the methodOop
+ __ movptr(method, Address(rbp, 3*BytesPerWord));
+ int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, counter_overflow), bci, method);
oop_maps = new OopMapSet();
oop_maps->add_gc_map(call_offset, map);
restore_live_registers(sasm);
@@ -1084,7 +1085,6 @@
__ ret(0);
}
break;
-#endif // TIERED
case new_type_array_id:
case new_object_array_id:
--- a/hotspot/src/cpu/x86/vm/c1_globals_x86.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_globals_x86.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -35,14 +35,7 @@
define_pd_global(bool, UseOnStackReplacement, true );
define_pd_global(bool, TieredCompilation, false);
define_pd_global(intx, CompileThreshold, 1500 );
-define_pd_global(intx, Tier2CompileThreshold, 1500 );
-define_pd_global(intx, Tier3CompileThreshold, 2500 );
-define_pd_global(intx, Tier4CompileThreshold, 4500 );
-
define_pd_global(intx, BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier2BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier3BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier4BackEdgeThreshold, 100000);
define_pd_global(intx, OnStackReplacePercentage, 933 );
define_pd_global(intx, FreqInlineSize, 325 );
--- a/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -39,19 +39,8 @@
define_pd_global(bool, ProfileInterpreter, true);
#endif // CC_INTERP
define_pd_global(bool, TieredCompilation, false);
-#ifdef TIERED
-define_pd_global(intx, CompileThreshold, 1000);
-#else
define_pd_global(intx, CompileThreshold, 10000);
-#endif // TIERED
-define_pd_global(intx, Tier2CompileThreshold, 10000);
-define_pd_global(intx, Tier3CompileThreshold, 20000);
-define_pd_global(intx, Tier4CompileThreshold, 40000);
-
define_pd_global(intx, BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier2BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier3BackEdgeThreshold, 100000);
-define_pd_global(intx, Tier4BackEdgeThreshold, 100000);
define_pd_global(intx, OnStackReplacePercentage, 140);
define_pd_global(intx, ConditionalMoveLimit, 3);
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1397,3 +1397,17 @@
NOT_CC_INTERP(pop(state));
}
}
+
+// Jump if ((*counter_addr += increment) & mask) satisfies the condition.
+void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr,
+ int increment, int mask,
+ Register scratch, bool preloaded,
+ Condition cond, Label* where) {
+ if (!preloaded) {
+ movl(scratch, counter_addr);
+ }
+ incrementl(scratch, increment);
+ movl(counter_addr, scratch);
+ andl(scratch, mask);
+ jcc(cond, *where);
+}
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -185,6 +185,10 @@
bool decrement = false);
void increment_mdp_data_at(Register mdp_in, Register reg, int constant,
bool decrement = false);
+ void increment_mask_and_jump(Address counter_addr,
+ int increment, int mask,
+ Register scratch, bool preloaded,
+ Condition cond, Label* where);
void set_mdp_flag_at(Register mdp_in, int flag_constant);
void test_mdp_data_at(Register mdp_in, int offset, Register value,
Register test_value_out,
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1480,3 +1480,17 @@
NOT_CC_INTERP(pop(state));
}
}
+
+// Jump if ((*counter_addr += increment) & mask) satisfies the condition.
+void InterpreterMacroAssembler::increment_mask_and_jump(Address counter_addr,
+ int increment, int mask,
+ Register scratch, bool preloaded,
+ Condition cond, Label* where) {
+ if (!preloaded) {
+ movl(scratch, counter_addr);
+ }
+ incrementl(scratch, increment);
+ movl(counter_addr, scratch);
+ andl(scratch, mask);
+ jcc(cond, *where);
+}
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -194,6 +194,10 @@
bool decrement = false);
void increment_mdp_data_at(Register mdp_in, Register reg, int constant,
bool decrement = false);
+ void increment_mask_and_jump(Address counter_addr,
+ int increment, int mask,
+ Register scratch, bool preloaded,
+ Condition cond, Label* where);
void set_mdp_flag_at(Register mdp_in, int flag_constant);
void test_mdp_data_at(Register mdp_in, int offset, Register value,
Register test_value_out,
--- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -359,40 +359,62 @@
// rcx: invocation counter
//
void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) {
-
- const Address invocation_counter(rbx, methodOopDesc::invocation_counter_offset() + InvocationCounter::counter_offset());
- const Address backedge_counter (rbx, methodOopDesc::backedge_counter_offset() + InvocationCounter::counter_offset());
-
- if (ProfileInterpreter) { // %%% Merge this into methodDataOop
- __ incrementl(Address(rbx,methodOopDesc::interpreter_invocation_counter_offset()));
- }
- // Update standard invocation counters
- __ movl(rax, backedge_counter); // load backedge counter
-
- __ incrementl(rcx, InvocationCounter::count_increment);
- __ andl(rax, InvocationCounter::count_mask_value); // mask out the status bits
-
- __ movl(invocation_counter, rcx); // save invocation count
- __ addl(rcx, rax); // add both counters
+ const Address invocation_counter(rbx, in_bytes(methodOopDesc::invocation_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ // Note: In tiered we increment either counters in methodOop or in MDO depending if we're profiling or not.
+ if (TieredCompilation) {
+ int increment = InvocationCounter::count_increment;
+ int mask = ((1 << Tier0InvokeNotifyFreqLog) - 1) << InvocationCounter::count_shift;
+ Label no_mdo, done;
+ if (ProfileInterpreter) {
+ // Are we profiling?
+ __ movptr(rax, Address(rbx, methodOopDesc::method_data_offset()));
+ __ testptr(rax, rax);
+ __ jccb(Assembler::zero, no_mdo);
+ // Increment counter in the MDO
+ const Address mdo_invocation_counter(rax, in_bytes(methodDataOopDesc::invocation_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(mdo_invocation_counter, increment, mask, rcx, false, Assembler::zero, overflow);
+ __ jmpb(done);
+ }
+ __ bind(no_mdo);
+ // Increment counter in methodOop (we don't need to load it, it's in rcx).
+ __ increment_mask_and_jump(invocation_counter, increment, mask, rcx, true, Assembler::zero, overflow);
+ __ bind(done);
+ } else {
+ const Address backedge_counter (rbx, methodOopDesc::backedge_counter_offset() +
+ InvocationCounter::counter_offset());
- // profile_method is non-null only for interpreted method so
- // profile_method != NULL == !native_call
- // BytecodeInterpreter only calls for native so code is elided.
+ if (ProfileInterpreter) { // %%% Merge this into methodDataOop
+ __ incrementl(Address(rbx,methodOopDesc::interpreter_invocation_counter_offset()));
+ }
+ // Update standard invocation counters
+ __ movl(rax, backedge_counter); // load backedge counter
+
+ __ incrementl(rcx, InvocationCounter::count_increment);
+ __ andl(rax, InvocationCounter::count_mask_value); // mask out the status bits
+
+ __ movl(invocation_counter, rcx); // save invocation count
+ __ addl(rcx, rax); // add both counters
- if (ProfileInterpreter && profile_method != NULL) {
- // Test to see if we should create a method data oop
+ // profile_method is non-null only for interpreted method so
+ // profile_method != NULL == !native_call
+ // BytecodeInterpreter only calls for native so code is elided.
+
+ if (ProfileInterpreter && profile_method != NULL) {
+ // Test to see if we should create a method data oop
+ __ cmp32(rcx,
+ ExternalAddress((address)&InvocationCounter::InterpreterProfileLimit));
+ __ jcc(Assembler::less, *profile_method_continue);
+
+ // if no method data exists, go to profile_method
+ __ test_method_data_pointer(rax, *profile_method);
+ }
+
__ cmp32(rcx,
- ExternalAddress((address)&InvocationCounter::InterpreterProfileLimit));
- __ jcc(Assembler::less, *profile_method_continue);
-
- // if no method data exists, go to profile_method
- __ test_method_data_pointer(rax, *profile_method);
+ ExternalAddress((address)&InvocationCounter::InterpreterInvocationLimit));
+ __ jcc(Assembler::aboveEqual, *overflow);
}
-
- __ cmp32(rcx,
- ExternalAddress((address)&InvocationCounter::InterpreterInvocationLimit));
- __ jcc(Assembler::aboveEqual, *overflow);
-
}
void InterpreterGenerator::generate_counter_overflow(Label* do_continue) {
--- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -310,42 +310,61 @@
Label* overflow,
Label* profile_method,
Label* profile_method_continue) {
-
- const Address invocation_counter(rbx,
- methodOopDesc::invocation_counter_offset() +
+ const Address invocation_counter(rbx, in_bytes(methodOopDesc::invocation_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ // Note: In tiered we increment either counters in methodOop or in MDO depending if we're profiling or not.
+ if (TieredCompilation) {
+ int increment = InvocationCounter::count_increment;
+ int mask = ((1 << Tier0InvokeNotifyFreqLog) - 1) << InvocationCounter::count_shift;
+ Label no_mdo, done;
+ if (ProfileInterpreter) {
+ // Are we profiling?
+ __ movptr(rax, Address(rbx, methodOopDesc::method_data_offset()));
+ __ testptr(rax, rax);
+ __ jccb(Assembler::zero, no_mdo);
+ // Increment counter in the MDO
+ const Address mdo_invocation_counter(rax, in_bytes(methodDataOopDesc::invocation_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(mdo_invocation_counter, increment, mask, rcx, false, Assembler::zero, overflow);
+ __ jmpb(done);
+ }
+ __ bind(no_mdo);
+ // Increment counter in methodOop (we don't need to load it, it's in ecx).
+ __ increment_mask_and_jump(invocation_counter, increment, mask, rcx, true, Assembler::zero, overflow);
+ __ bind(done);
+ } else {
+ const Address backedge_counter(rbx,
+ methodOopDesc::backedge_counter_offset() +
InvocationCounter::counter_offset());
- const Address backedge_counter(rbx,
- methodOopDesc::backedge_counter_offset() +
- InvocationCounter::counter_offset());
-
- if (ProfileInterpreter) { // %%% Merge this into methodDataOop
- __ incrementl(Address(rbx,
- methodOopDesc::interpreter_invocation_counter_offset()));
- }
- // Update standard invocation counters
- __ movl(rax, backedge_counter); // load backedge counter
- __ incrementl(rcx, InvocationCounter::count_increment);
- __ andl(rax, InvocationCounter::count_mask_value); // mask out the
- // status bits
+ if (ProfileInterpreter) { // %%% Merge this into methodDataOop
+ __ incrementl(Address(rbx,
+ methodOopDesc::interpreter_invocation_counter_offset()));
+ }
+ // Update standard invocation counters
+ __ movl(rax, backedge_counter); // load backedge counter
- __ movl(invocation_counter, rcx); // save invocation count
- __ addl(rcx, rax); // add both counters
+ __ incrementl(rcx, InvocationCounter::count_increment);
+ __ andl(rax, InvocationCounter::count_mask_value); // mask out the status bits
- // profile_method is non-null only for interpreted method so
- // profile_method != NULL == !native_call
+ __ movl(invocation_counter, rcx); // save invocation count
+ __ addl(rcx, rax); // add both counters
- if (ProfileInterpreter && profile_method != NULL) {
- // Test to see if we should create a method data oop
- __ cmp32(rcx, ExternalAddress((address)&InvocationCounter::InterpreterProfileLimit));
- __ jcc(Assembler::less, *profile_method_continue);
+ // profile_method is non-null only for interpreted method so
+ // profile_method != NULL == !native_call
+
+ if (ProfileInterpreter && profile_method != NULL) {
+ // Test to see if we should create a method data oop
+ __ cmp32(rcx, ExternalAddress((address)&InvocationCounter::InterpreterProfileLimit));
+ __ jcc(Assembler::less, *profile_method_continue);
- // if no method data exists, go to profile_method
- __ test_method_data_pointer(rax, *profile_method);
+ // if no method data exists, go to profile_method
+ __ test_method_data_pointer(rax, *profile_method);
+ }
+
+ __ cmp32(rcx, ExternalAddress((address)&InvocationCounter::InterpreterInvocationLimit));
+ __ jcc(Assembler::aboveEqual, *overflow);
}
-
- __ cmp32(rcx, ExternalAddress((address)&InvocationCounter::InterpreterInvocationLimit));
- __ jcc(Assembler::aboveEqual, *overflow);
}
void InterpreterGenerator::generate_counter_overflow(Label* do_continue) {
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1558,47 +1558,68 @@
__ testl(rdx, rdx); // check if forward or backward branch
__ jcc(Assembler::positive, dispatch); // count only if backward branch
- // increment counter
- __ movl(rax, Address(rcx, be_offset)); // load backedge counter
- __ incrementl(rax, InvocationCounter::count_increment); // increment counter
- __ movl(Address(rcx, be_offset), rax); // store counter
-
- __ movl(rax, Address(rcx, inv_offset)); // load invocation counter
- __ andl(rax, InvocationCounter::count_mask_value); // and the status bits
- __ addl(rax, Address(rcx, be_offset)); // add both counters
-
- if (ProfileInterpreter) {
- // Test to see if we should create a method data oop
- __ cmp32(rax,
- ExternalAddress((address) &InvocationCounter::InterpreterProfileLimit));
- __ jcc(Assembler::less, dispatch);
-
- // if no method data exists, go to profile method
- __ test_method_data_pointer(rax, profile_method);
-
- if (UseOnStackReplacement) {
- // check for overflow against rbx, which is the MDO taken count
- __ cmp32(rbx,
- ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
- __ jcc(Assembler::below, dispatch);
-
- // When ProfileInterpreter is on, the backedge_count comes from the
- // methodDataOop, which value does not get reset on the call to
- // frequency_counter_overflow(). To avoid excessive calls to the overflow
- // routine while the method is being compiled, add a second test to make
- // sure the overflow function is called only once every overflow_frequency.
- const int overflow_frequency = 1024;
- __ andptr(rbx, overflow_frequency-1);
- __ jcc(Assembler::zero, backedge_counter_overflow);
-
+ if (TieredCompilation) {
+ Label no_mdo;
+ int increment = InvocationCounter::count_increment;
+ int mask = ((1 << Tier0BackedgeNotifyFreqLog) - 1) << InvocationCounter::count_shift;
+ if (ProfileInterpreter) {
+ // Are we profiling?
+ __ movptr(rbx, Address(rcx, in_bytes(methodOopDesc::method_data_offset())));
+ __ testptr(rbx, rbx);
+ __ jccb(Assembler::zero, no_mdo);
+ // Increment the MDO backedge counter
+ const Address mdo_backedge_counter(rbx, in_bytes(methodDataOopDesc::backedge_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(mdo_backedge_counter, increment, mask,
+ rax, false, Assembler::zero, &backedge_counter_overflow);
+ __ jmp(dispatch);
}
+ __ bind(no_mdo);
+ // Increment backedge counter in methodOop
+ __ increment_mask_and_jump(Address(rcx, be_offset), increment, mask,
+ rax, false, Assembler::zero, &backedge_counter_overflow);
} else {
- if (UseOnStackReplacement) {
- // check for overflow against rax, which is the sum of the counters
+ // increment counter
+ __ movl(rax, Address(rcx, be_offset)); // load backedge counter
+ __ incrementl(rax, InvocationCounter::count_increment); // increment counter
+ __ movl(Address(rcx, be_offset), rax); // store counter
+
+ __ movl(rax, Address(rcx, inv_offset)); // load invocation counter
+ __ andl(rax, InvocationCounter::count_mask_value); // and the status bits
+ __ addl(rax, Address(rcx, be_offset)); // add both counters
+
+ if (ProfileInterpreter) {
+ // Test to see if we should create a method data oop
__ cmp32(rax,
- ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
- __ jcc(Assembler::aboveEqual, backedge_counter_overflow);
-
+ ExternalAddress((address) &InvocationCounter::InterpreterProfileLimit));
+ __ jcc(Assembler::less, dispatch);
+
+ // if no method data exists, go to profile method
+ __ test_method_data_pointer(rax, profile_method);
+
+ if (UseOnStackReplacement) {
+ // check for overflow against rbx, which is the MDO taken count
+ __ cmp32(rbx,
+ ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
+ __ jcc(Assembler::below, dispatch);
+
+ // When ProfileInterpreter is on, the backedge_count comes from the
+ // methodDataOop, which value does not get reset on the call to
+ // frequency_counter_overflow(). To avoid excessive calls to the overflow
+ // routine while the method is being compiled, add a second test to make
+ // sure the overflow function is called only once every overflow_frequency.
+ const int overflow_frequency = 1024;
+ __ andptr(rbx, overflow_frequency-1);
+ __ jcc(Assembler::zero, backedge_counter_overflow);
+ }
+ } else {
+ if (UseOnStackReplacement) {
+ // check for overflow against rax, which is the sum of the counters
+ __ cmp32(rax,
+ ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
+ __ jcc(Assembler::aboveEqual, backedge_counter_overflow);
+
+ }
}
}
__ bind(dispatch);
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1583,51 +1583,71 @@
// r14: locals pointer
__ testl(rdx, rdx); // check if forward or backward branch
__ jcc(Assembler::positive, dispatch); // count only if backward branch
-
- // increment counter
- __ movl(rax, Address(rcx, be_offset)); // load backedge counter
- __ incrementl(rax, InvocationCounter::count_increment); // increment
- // counter
- __ movl(Address(rcx, be_offset), rax); // store counter
-
- __ movl(rax, Address(rcx, inv_offset)); // load invocation counter
- __ andl(rax, InvocationCounter::count_mask_value); // and the status bits
- __ addl(rax, Address(rcx, be_offset)); // add both counters
-
- if (ProfileInterpreter) {
- // Test to see if we should create a method data oop
- __ cmp32(rax,
- ExternalAddress((address) &InvocationCounter::InterpreterProfileLimit));
- __ jcc(Assembler::less, dispatch);
-
- // if no method data exists, go to profile method
- __ test_method_data_pointer(rax, profile_method);
-
- if (UseOnStackReplacement) {
- // check for overflow against ebx which is the MDO taken count
- __ cmp32(rbx,
- ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
- __ jcc(Assembler::below, dispatch);
-
- // When ProfileInterpreter is on, the backedge_count comes
- // from the methodDataOop, which value does not get reset on
- // the call to frequency_counter_overflow(). To avoid
- // excessive calls to the overflow routine while the method is
- // being compiled, add a second test to make sure the overflow
- // function is called only once every overflow_frequency.
- const int overflow_frequency = 1024;
- __ andl(rbx, overflow_frequency - 1);
- __ jcc(Assembler::zero, backedge_counter_overflow);
-
+ if (TieredCompilation) {
+ Label no_mdo;
+ int increment = InvocationCounter::count_increment;
+ int mask = ((1 << Tier0BackedgeNotifyFreqLog) - 1) << InvocationCounter::count_shift;
+ if (ProfileInterpreter) {
+ // Are we profiling?
+ __ movptr(rbx, Address(rcx, in_bytes(methodOopDesc::method_data_offset())));
+ __ testptr(rbx, rbx);
+ __ jccb(Assembler::zero, no_mdo);
+ // Increment the MDO backedge counter
+ const Address mdo_backedge_counter(rbx, in_bytes(methodDataOopDesc::backedge_counter_offset()) +
+ in_bytes(InvocationCounter::counter_offset()));
+ __ increment_mask_and_jump(mdo_backedge_counter, increment, mask,
+ rax, false, Assembler::zero, &backedge_counter_overflow);
+ __ jmp(dispatch);
}
+ __ bind(no_mdo);
+ // Increment backedge counter in methodOop
+ __ increment_mask_and_jump(Address(rcx, be_offset), increment, mask,
+ rax, false, Assembler::zero, &backedge_counter_overflow);
} else {
- if (UseOnStackReplacement) {
- // check for overflow against eax, which is the sum of the
- // counters
+ // increment counter
+ __ movl(rax, Address(rcx, be_offset)); // load backedge counter
+ __ incrementl(rax, InvocationCounter::count_increment); // increment counter
+ __ movl(Address(rcx, be_offset), rax); // store counter
+
+ __ movl(rax, Address(rcx, inv_offset)); // load invocation counter
+ __ andl(rax, InvocationCounter::count_mask_value); // and the status bits
+ __ addl(rax, Address(rcx, be_offset)); // add both counters
+
+ if (ProfileInterpreter) {
+ // Test to see if we should create a method data oop
__ cmp32(rax,
- ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
- __ jcc(Assembler::aboveEqual, backedge_counter_overflow);
-
+ ExternalAddress((address) &InvocationCounter::InterpreterProfileLimit));
+ __ jcc(Assembler::less, dispatch);
+
+ // if no method data exists, go to profile method
+ __ test_method_data_pointer(rax, profile_method);
+
+ if (UseOnStackReplacement) {
+ // check for overflow against ebx which is the MDO taken count
+ __ cmp32(rbx,
+ ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
+ __ jcc(Assembler::below, dispatch);
+
+ // When ProfileInterpreter is on, the backedge_count comes
+ // from the methodDataOop, which value does not get reset on
+ // the call to frequency_counter_overflow(). To avoid
+ // excessive calls to the overflow routine while the method is
+ // being compiled, add a second test to make sure the overflow
+ // function is called only once every overflow_frequency.
+ const int overflow_frequency = 1024;
+ __ andl(rbx, overflow_frequency - 1);
+ __ jcc(Assembler::zero, backedge_counter_overflow);
+
+ }
+ } else {
+ if (UseOnStackReplacement) {
+ // check for overflow against eax, which is the sum of the
+ // counters
+ __ cmp32(rax,
+ ExternalAddress((address) &InvocationCounter::InterpreterBackwardBranchLimit));
+ __ jcc(Assembler::aboveEqual, backedge_counter_overflow);
+
+ }
}
}
__ bind(dispatch);
@@ -2912,7 +2932,8 @@
void TemplateTable::invokevirtual_helper(Register index,
Register recv,
Register flags) {
- // Uses temporary registers rax, rdx assert_different_registers(index, recv, rax, rdx);
+ // Uses temporary registers rax, rdx
+ assert_different_registers(index, recv, rax, rdx);
// Test for an invoke of a final method
Label notFinal;
--- a/hotspot/src/cpu/x86/vm/vtableStubs_x86_64.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/vtableStubs_x86_64.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -209,7 +209,7 @@
(UseCompressedOops ? 16 : 0); // 1 leaq can be 3 bytes + 1 long
} else {
// Itable stub size
- return (DebugVtables ? 512 : 72) + (CountCompiledCalls ? 13 : 0) +
+ return (DebugVtables ? 512 : 74) + (CountCompiledCalls ? 13 : 0) +
(UseCompressedOops ? 32 : 0); // 2 leaqs
}
// In order to tune these parameters, run the JVM with VM options
--- a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -652,10 +652,20 @@
else if (lss_sux == gtr_sux) { cond = If::neq; tsux = lss_sux; fsux = eql_sux; }
else if (eql_sux == gtr_sux) { cond = If::geq; tsux = eql_sux; fsux = lss_sux; }
else { ShouldNotReachHere(); }
- If* canon = new If(cmp->x(), cond, nan_sux == tsux, cmp->y(), tsux, fsux, cmp->state_before(), x->is_safepoint());
+ If* canon = new If(cmp->x(), cond, nan_sux == tsux, cmp->y(), tsux, fsux, cmp->state_before(), x->is_safepoint());
if (cmp->x() == cmp->y()) {
do_If(canon);
} else {
+ if (compilation()->profile_branches()) {
+ // TODO: If profiling, leave floating point comparisons unoptimized.
+ // We currently do not support profiling of the unordered case.
+ switch(cmp->op()) {
+ case Bytecodes::_fcmpl: case Bytecodes::_fcmpg:
+ case Bytecodes::_dcmpl: case Bytecodes::_dcmpg:
+ set_canonical(x);
+ return;
+ }
+ }
set_canonical(canon);
set_bci(cmp->bci());
}
@@ -881,4 +891,5 @@
void Canonicalizer::do_UnsafePrefetchRead (UnsafePrefetchRead* x) {}
void Canonicalizer::do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) {}
void Canonicalizer::do_ProfileCall(ProfileCall* x) {}
-void Canonicalizer::do_ProfileCounter(ProfileCounter* x) {}
+void Canonicalizer::do_ProfileInvoke(ProfileInvoke* x) {}
+
--- a/hotspot/src/share/vm/c1/c1_Canonicalizer.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Canonicalizer.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,9 +24,11 @@
class Canonicalizer: InstructionVisitor {
private:
+ Compilation *_compilation;
Instruction* _canonical;
int _bci;
+ Compilation *compilation() { return _compilation; }
void set_canonical(Value x);
void set_bci(int bci) { _bci = bci; }
void set_constant(jint x) { set_canonical(new Constant(new IntConstant(x))); }
@@ -43,7 +45,9 @@
int* scale);
public:
- Canonicalizer(Value x, int bci) { _canonical = x; _bci = bci; if (CanonicalizeNodes) x->visit(this); }
+ Canonicalizer(Compilation* c, Value x, int bci) : _compilation(c), _canonical(x), _bci(bci) {
+ if (CanonicalizeNodes) x->visit(this);
+ }
Value canonical() const { return _canonical; }
int bci() const { return _bci; }
@@ -92,5 +96,5 @@
virtual void do_UnsafePrefetchRead (UnsafePrefetchRead* x);
virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x);
virtual void do_ProfileCall (ProfileCall* x);
- virtual void do_ProfileCounter (ProfileCounter* x);
+ virtual void do_ProfileInvoke (ProfileInvoke* x);
};
--- a/hotspot/src/share/vm/c1/c1_CodeStubs.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_CodeStubs.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -80,20 +80,21 @@
}
};
-#ifdef TIERED
class CounterOverflowStub: public CodeStub {
private:
CodeEmitInfo* _info;
int _bci;
+ LIR_Opr _method;
public:
- CounterOverflowStub(CodeEmitInfo* info, int bci) : _info(info), _bci(bci) {
+ CounterOverflowStub(CodeEmitInfo* info, int bci, LIR_Opr method) : _info(info), _bci(bci), _method(method) {
}
virtual void emit_code(LIR_Assembler* e);
virtual void visit(LIR_OpVisitState* visitor) {
visitor->do_slow_case(_info);
+ visitor->do_input(_method);
}
#ifndef PRODUCT
@@ -101,7 +102,6 @@
#endif // PRODUCT
};
-#endif // TIERED
class ConversionStub: public CodeStub {
private:
--- a/hotspot/src/share/vm/c1/c1_Compilation.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Compilation.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -290,9 +290,13 @@
CHECK_BAILOUT_(no_frame_size);
+ if (is_profiling()) {
+ method()->build_method_data();
+ }
+
{
PhaseTraceTime timeit(_t_buildIR);
- build_hir();
+ build_hir();
}
if (BailoutAfterHIR) {
BAILOUT_("Bailing out because of -XX:+BailoutAfterHIR", no_frame_size);
@@ -447,6 +451,7 @@
, _masm(NULL)
, _has_exception_handlers(false)
, _has_fpu_code(true) // pessimistic assumption
+, _would_profile(false)
, _has_unsafe_access(false)
, _has_method_handle_invokes(false)
, _bailout_msg(NULL)
@@ -461,12 +466,16 @@
#endif // PRODUCT
{
PhaseTraceTime timeit(_t_compile);
-
_arena = Thread::current()->resource_area();
_env->set_compiler_data(this);
_exception_info_list = new ExceptionInfoList();
_implicit_exception_table.set_size(0);
compile_method();
+ if (is_profiling() && _would_profile) {
+ ciMethodData *md = method->method_data();
+ assert (md != NULL, "Should have MDO");
+ md->set_would_profile(_would_profile);
+ }
}
Compilation::~Compilation() {
--- a/hotspot/src/share/vm/c1/c1_Compilation.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Compilation.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -69,6 +69,7 @@
bool _has_exception_handlers;
bool _has_fpu_code;
bool _has_unsafe_access;
+ bool _would_profile;
bool _has_method_handle_invokes; // True if this method has MethodHandle invokes.
const char* _bailout_msg;
ExceptionInfoList* _exception_info_list;
@@ -143,6 +144,7 @@
void set_has_exception_handlers(bool f) { _has_exception_handlers = f; }
void set_has_fpu_code(bool f) { _has_fpu_code = f; }
void set_has_unsafe_access(bool f) { _has_unsafe_access = f; }
+ void set_would_profile(bool f) { _would_profile = f; }
// Add a set of exception handlers covering the given PC offset
void add_exception_handlers_for_pco(int pco, XHandlers* exception_handlers);
// Statistics gathering
@@ -202,6 +204,30 @@
void compile_only_this_scope(outputStream* st, IRScope* scope);
void exclude_this_method();
#endif // PRODUCT
+
+ bool is_profiling() {
+ return env()->comp_level() == CompLevel_full_profile ||
+ env()->comp_level() == CompLevel_limited_profile;
+ }
+ bool count_invocations() { return is_profiling(); }
+ bool count_backedges() { return is_profiling(); }
+
+ // Helpers for generation of profile information
+ bool profile_branches() {
+ return env()->comp_level() == CompLevel_full_profile &&
+ C1UpdateMethodData && C1ProfileBranches;
+ }
+ bool profile_calls() {
+ return env()->comp_level() == CompLevel_full_profile &&
+ C1UpdateMethodData && C1ProfileCalls;
+ }
+ bool profile_inlined_calls() {
+ return profile_calls() && C1ProfileInlinedCalls;
+ }
+ bool profile_checkcasts() {
+ return env()->comp_level() == CompLevel_full_profile &&
+ C1UpdateMethodData && C1ProfileCheckcasts;
+ }
};
--- a/hotspot/src/share/vm/c1/c1_Compiler.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Compiler.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -39,9 +39,7 @@
// Name of this compiler
virtual const char* name() { return "C1"; }
-#ifdef TIERED
- virtual bool is_c1() { return true; };
-#endif // TIERED
+ virtual bool is_c1() { return true; };
BufferBlob* build_buffer_blob();
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1144,8 +1144,16 @@
void GraphBuilder::_goto(int from_bci, int to_bci) {
- profile_bci(from_bci);
- append(new Goto(block_at(to_bci), to_bci <= from_bci));
+ Goto *x = new Goto(block_at(to_bci), to_bci <= from_bci);
+ if (is_profiling()) {
+ compilation()->set_would_profile(true);
+ }
+ if (profile_branches()) {
+ x->set_profiled_method(method());
+ x->set_profiled_bci(bci());
+ x->set_should_profile(true);
+ }
+ append(x);
}
@@ -1153,11 +1161,45 @@
BlockBegin* tsux = block_at(stream()->get_dest());
BlockBegin* fsux = block_at(stream()->next_bci());
bool is_bb = tsux->bci() < stream()->cur_bci() || fsux->bci() < stream()->cur_bci();
- If* if_node = append(new If(x, cond, false, y, tsux, fsux, is_bb ? state_before : NULL, is_bb))->as_If();
- if (profile_branches() && (if_node != NULL)) {
- if_node->set_profiled_method(method());
- if_node->set_profiled_bci(bci());
- if_node->set_should_profile(true);
+ Instruction *i = append(new If(x, cond, false, y, tsux, fsux, is_bb ? state_before : NULL, is_bb));
+
+ if (is_profiling()) {
+ If* if_node = i->as_If();
+ if (if_node != NULL) {
+ // Note that we'd collect profile data in this method if we wanted it.
+ compilation()->set_would_profile(true);
+ // At level 2 we need the proper bci to count backedges
+ if_node->set_profiled_bci(bci());
+ if (profile_branches()) {
+ // Successors can be rotated by the canonicalizer, check for this case.
+ if_node->set_profiled_method(method());
+ if_node->set_should_profile(true);
+ if (if_node->tsux() == fsux) {
+ if_node->set_swapped(true);
+ }
+ }
+ return;
+ }
+
+ // Check if this If was reduced to Goto.
+ Goto *goto_node = i->as_Goto();
+ if (goto_node != NULL) {
+ compilation()->set_would_profile(true);
+ if (profile_branches()) {
+ goto_node->set_profiled_method(method());
+ goto_node->set_profiled_bci(bci());
+ goto_node->set_should_profile(true);
+ // Find out which successor is used.
+ if (goto_node->default_sux() == tsux) {
+ goto_node->set_direction(Goto::taken);
+ } else if (goto_node->default_sux() == fsux) {
+ goto_node->set_direction(Goto::not_taken);
+ } else {
+ ShouldNotReachHere();
+ }
+ }
+ return;
+ }
}
}
@@ -1698,8 +1740,7 @@
if (recv != NULL &&
(code == Bytecodes::_invokespecial ||
- !is_loaded || target->is_final() ||
- profile_calls())) {
+ !is_loaded || target->is_final())) {
// invokespecial always needs a NULL check. invokevirtual where
// the target is final or where it's not known that whether the
// target is final requires a NULL check. Otherwise normal
@@ -1709,15 +1750,23 @@
null_check(recv);
}
- if (profile_calls()) {
- assert(cha_monomorphic_target == NULL || exact_target == NULL, "both can not be set");
- ciKlass* target_klass = NULL;
- if (cha_monomorphic_target != NULL) {
- target_klass = cha_monomorphic_target->holder();
- } else if (exact_target != NULL) {
- target_klass = exact_target->holder();
+ if (is_profiling()) {
+ if (recv != NULL && profile_calls()) {
+ null_check(recv);
}
- profile_call(recv, target_klass);
+ // Note that we'd collect profile data in this method if we wanted it.
+ compilation()->set_would_profile(true);
+
+ if (profile_calls()) {
+ assert(cha_monomorphic_target == NULL || exact_target == NULL, "both can not be set");
+ ciKlass* target_klass = NULL;
+ if (cha_monomorphic_target != NULL) {
+ target_klass = cha_monomorphic_target->holder();
+ } else if (exact_target != NULL) {
+ target_klass = exact_target->holder();
+ }
+ profile_call(recv, target_klass);
+ }
}
Invoke* result = new Invoke(code, result_type, recv, args, vtable_index, target, state_before);
@@ -1782,10 +1831,16 @@
CheckCast* c = new CheckCast(klass, apop(), state_before);
apush(append_split(c));
c->set_direct_compare(direct_compare(klass));
- if (profile_checkcasts()) {
- c->set_profiled_method(method());
- c->set_profiled_bci(bci());
- c->set_should_profile(true);
+
+ if (is_profiling()) {
+ // Note that we'd collect profile data in this method if we wanted it.
+ compilation()->set_would_profile(true);
+
+ if (profile_checkcasts()) {
+ c->set_profiled_method(method());
+ c->set_profiled_bci(bci());
+ c->set_should_profile(true);
+ }
}
}
@@ -1868,7 +1923,7 @@
Instruction* GraphBuilder::append_with_bci(Instruction* instr, int bci) {
- Canonicalizer canon(instr, bci);
+ Canonicalizer canon(compilation(), instr, bci);
Instruction* i1 = canon.canonical();
if (i1->bci() != -99) {
// Canonicalizer returned an instruction which was already
@@ -2651,18 +2706,6 @@
h->set_depth_first_number(0);
Value l = h;
- if (profile_branches()) {
- // Increment the invocation count on entry to the method. We
- // can't use profile_invocation here because append isn't setup to
- // work properly at this point. The instruction have to be
- // appended to the instruction stream by hand.
- Value m = new Constant(new ObjectConstant(compilation()->method()));
- h->set_next(m, 0);
- Value p = new ProfileCounter(m, methodOopDesc::interpreter_invocation_counter_offset_in_bytes(), 1);
- m->set_next(p, 0);
- l = p;
- }
-
BlockEnd* g = new Goto(entry, false);
l->set_next(g, entry->bci());
h->set_end(g);
@@ -2688,10 +2731,10 @@
// also necessary when profiling so that there's a single block that
// can increment the interpreter_invocation_count.
BlockBegin* new_header_block;
- if (std_entry->number_of_preds() == 0 && !profile_branches()) {
+ if (std_entry->number_of_preds() > 0 || count_invocations() || count_backedges()) {
+ new_header_block = header_block(std_entry, BlockBegin::std_entry_flag, state);
+ } else {
new_header_block = std_entry;
- } else {
- new_header_block = header_block(std_entry, BlockBegin::std_entry_flag, state);
}
// setup start block (root for the IR graph)
@@ -3115,16 +3158,21 @@
Values* args = state()->pop_arguments(callee->arg_size());
ValueStack* locks = lock_stack();
- if (profile_calls()) {
+
+ if (is_profiling()) {
// Don't profile in the special case where the root method
// is the intrinsic
if (callee != method()) {
- Value recv = NULL;
- if (has_receiver) {
- recv = args->at(0);
- null_check(recv);
+ // Note that we'd collect profile data in this method if we wanted it.
+ compilation()->set_would_profile(true);
+ if (profile_calls()) {
+ Value recv = NULL;
+ if (has_receiver) {
+ recv = args->at(0);
+ null_check(recv);
+ }
+ profile_call(recv, NULL);
}
- profile_call(recv, NULL);
}
}
@@ -3296,7 +3344,9 @@
bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) {
assert(!callee->is_native(), "callee must not be native");
-
+ if (count_backedges() && callee->has_loops()) {
+ INLINE_BAILOUT("too complex for tiered");
+ }
// first perform tests of things it's not possible to inline
if (callee->has_exception_handlers() &&
!InlineMethodsWithExceptionHandlers) INLINE_BAILOUT("callee has exception handlers");
@@ -3365,12 +3415,19 @@
null_check(recv);
}
- if (profile_inlined_calls()) {
- profile_call(recv, holder_known ? callee->holder() : NULL);
+ if (is_profiling()) {
+ // Note that we'd collect profile data in this method if we wanted it.
+ // this may be redundant here...
+ compilation()->set_would_profile(true);
+
+ if (profile_calls()) {
+ profile_call(recv, holder_known ? callee->holder() : NULL);
+ }
+ if (profile_inlined_calls()) {
+ profile_invocation(callee, state(), 0);
+ }
}
- profile_invocation(callee);
-
// Introduce a new callee continuation point - if the callee has
// more than one return instruction or the return does not allow
// fall-through of control flow, all return instructions of the
@@ -3755,30 +3812,10 @@
}
#endif // PRODUCT
-
void GraphBuilder::profile_call(Value recv, ciKlass* known_holder) {
append(new ProfileCall(method(), bci(), recv, known_holder));
}
-
-void GraphBuilder::profile_invocation(ciMethod* callee) {
- if (profile_calls()) {
- // increment the interpreter_invocation_count for the inlinee
- Value m = append(new Constant(new ObjectConstant(callee)));
- append(new ProfileCounter(m, methodOopDesc::interpreter_invocation_counter_offset_in_bytes(), 1));
- }
+void GraphBuilder::profile_invocation(ciMethod* callee, ValueStack* state, int bci) {
+ append(new ProfileInvoke(callee, state, bci));
}
-
-
-void GraphBuilder::profile_bci(int bci) {
- if (profile_branches()) {
- ciMethodData* md = method()->method_data();
- if (md == NULL) {
- BAILOUT("out of memory building methodDataOop");
- }
- ciProfileData* data = md->bci_to_data(bci);
- assert(data != NULL && data->is_JumpData(), "need JumpData for goto");
- Value mdo = append(new Constant(new ObjectConstant(md)));
- append(new ProfileCounter(mdo, md->byte_offset_of_slot(data, JumpData::taken_offset()), 1));
- }
-}
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -342,27 +342,17 @@
NOT_PRODUCT(void print_inline_result(ciMethod* callee, bool res);)
- // methodDataOop profiling helpers
void profile_call(Value recv, ciKlass* predicted_holder);
- void profile_invocation(ciMethod* method);
- void profile_bci(int bci);
+ void profile_invocation(ciMethod* inlinee, ValueStack* state, int bci);
- // Helpers for generation of profile information
- bool profile_branches() {
- return _compilation->env()->comp_level() == CompLevel_fast_compile &&
- Tier1UpdateMethodData && Tier1ProfileBranches;
- }
- bool profile_calls() {
- return _compilation->env()->comp_level() == CompLevel_fast_compile &&
- Tier1UpdateMethodData && Tier1ProfileCalls;
- }
- bool profile_inlined_calls() {
- return profile_calls() && Tier1ProfileInlinedCalls;
- }
- bool profile_checkcasts() {
- return _compilation->env()->comp_level() == CompLevel_fast_compile &&
- Tier1UpdateMethodData && Tier1ProfileCheckcasts;
- }
+ // Shortcuts to profiling control.
+ bool is_profiling() { return _compilation->is_profiling(); }
+ bool count_invocations() { return _compilation->count_invocations(); }
+ bool count_backedges() { return _compilation->count_backedges(); }
+ bool profile_branches() { return _compilation->profile_branches(); }
+ bool profile_calls() { return _compilation->profile_calls(); }
+ bool profile_inlined_calls() { return _compilation->profile_inlined_calls(); }
+ bool profile_checkcasts() { return _compilation->profile_checkcasts(); }
public:
NOT_PRODUCT(void print_stats();)
--- a/hotspot/src/share/vm/c1/c1_IR.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_IR.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -296,19 +296,21 @@
void IR::optimize() {
Optimizer opt(this);
- if (DoCEE) {
- opt.eliminate_conditional_expressions();
+ if (!compilation()->profile_branches()) {
+ if (DoCEE) {
+ opt.eliminate_conditional_expressions();
#ifndef PRODUCT
- if (PrintCFG || PrintCFG1) { tty->print_cr("CFG after CEE"); print(true); }
- if (PrintIR || PrintIR1 ) { tty->print_cr("IR after CEE"); print(false); }
+ if (PrintCFG || PrintCFG1) { tty->print_cr("CFG after CEE"); print(true); }
+ if (PrintIR || PrintIR1 ) { tty->print_cr("IR after CEE"); print(false); }
#endif
- }
- if (EliminateBlocks) {
- opt.eliminate_blocks();
+ }
+ if (EliminateBlocks) {
+ opt.eliminate_blocks();
#ifndef PRODUCT
- if (PrintCFG || PrintCFG1) { tty->print_cr("CFG after block elimination"); print(true); }
- if (PrintIR || PrintIR1 ) { tty->print_cr("IR after block elimination"); print(false); }
+ if (PrintCFG || PrintCFG1) { tty->print_cr("CFG after block elimination"); print(true); }
+ if (PrintIR || PrintIR1 ) { tty->print_cr("IR after block elimination"); print(false); }
#endif
+ }
}
if (EliminateNullChecks) {
opt.eliminate_null_checks();
@@ -484,6 +486,8 @@
BitMap2D _loop_map; // two-dimensional bit set: a bit is set if a block is contained in a loop
BlockList _work_list; // temporary list (used in mark_loops and compute_order)
+ Compilation* _compilation;
+
// accessors for _visited_blocks and _active_blocks
void init_visited() { _active_blocks.clear(); _visited_blocks.clear(); }
bool is_visited(BlockBegin* b) const { return _visited_blocks.at(b->block_id()); }
@@ -526,8 +530,9 @@
NOT_PRODUCT(void print_blocks();)
DEBUG_ONLY(void verify();)
+ Compilation* compilation() const { return _compilation; }
public:
- ComputeLinearScanOrder(BlockBegin* start_block);
+ ComputeLinearScanOrder(Compilation* c, BlockBegin* start_block);
// accessors for final result
BlockList* linear_scan_order() const { return _linear_scan_order; }
@@ -535,7 +540,7 @@
};
-ComputeLinearScanOrder::ComputeLinearScanOrder(BlockBegin* start_block) :
+ComputeLinearScanOrder::ComputeLinearScanOrder(Compilation* c, BlockBegin* start_block) :
_max_block_id(BlockBegin::number_of_blocks()),
_num_blocks(0),
_num_loops(0),
@@ -547,13 +552,18 @@
_loop_end_blocks(8),
_work_list(8),
_linear_scan_order(NULL), // initialized later with correct size
- _loop_map(0, 0) // initialized later with correct size
+ _loop_map(0, 0), // initialized later with correct size
+ _compilation(c)
{
TRACE_LINEAR_SCAN(2, "***** computing linear-scan block order");
init_visited();
count_edges(start_block, NULL);
+ if (compilation()->is_profiling()) {
+ compilation()->method()->method_data()->set_compilation_stats(_num_loops, _num_blocks);
+ }
+
if (_num_loops > 0) {
mark_loops();
clear_non_natural_loops(start_block);
@@ -1130,7 +1140,7 @@
void IR::compute_code() {
assert(is_valid(), "IR must be valid");
- ComputeLinearScanOrder compute_order(start());
+ ComputeLinearScanOrder compute_order(compilation(), start());
_num_loops = compute_order.num_loops();
_code = compute_order.linear_scan_order();
}
--- a/hotspot/src/share/vm/c1/c1_Instruction.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Instruction.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -740,9 +740,9 @@
#ifndef PRODUCT
- #define TRACE_PHI(code) if (PrintPhiFunctions) { code; }
+ #define TRACE_PHI(code) if (PrintPhiFunctions) { code; }
#else
- #define TRACE_PHI(coce)
+ #define TRACE_PHI(coce)
#endif
@@ -1011,3 +1011,7 @@
void Throw::state_values_do(ValueVisitor* f) {
BlockEnd::state_values_do(f);
}
+
+void ProfileInvoke::state_values_do(ValueVisitor* f) {
+ if (state() != NULL) state()->values_do(f);
+}
--- a/hotspot/src/share/vm/c1/c1_Instruction.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -98,7 +98,7 @@
class UnsafePrefetchRead;
class UnsafePrefetchWrite;
class ProfileCall;
-class ProfileCounter;
+class ProfileInvoke;
// A Value is a reference to the instruction creating the value
typedef Instruction* Value;
@@ -195,7 +195,7 @@
virtual void do_UnsafePrefetchRead (UnsafePrefetchRead* x) = 0;
virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) = 0;
virtual void do_ProfileCall (ProfileCall* x) = 0;
- virtual void do_ProfileCounter (ProfileCounter* x) = 0;
+ virtual void do_ProfileInvoke (ProfileInvoke* x) = 0;
};
@@ -1734,19 +1734,44 @@
LEAF(Goto, BlockEnd)
public:
+ enum Direction {
+ none, // Just a regular goto
+ taken, not_taken // Goto produced from If
+ };
+ private:
+ ciMethod* _profiled_method;
+ int _profiled_bci;
+ Direction _direction;
+ public:
// creation
- Goto(BlockBegin* sux, ValueStack* state_before, bool is_safepoint = false) : BlockEnd(illegalType, state_before, is_safepoint) {
+ Goto(BlockBegin* sux, ValueStack* state_before, bool is_safepoint = false)
+ : BlockEnd(illegalType, state_before, is_safepoint)
+ , _direction(none)
+ , _profiled_method(NULL)
+ , _profiled_bci(0) {
BlockList* s = new BlockList(1);
s->append(sux);
set_sux(s);
}
- Goto(BlockBegin* sux, bool is_safepoint) : BlockEnd(illegalType, NULL, is_safepoint) {
+ Goto(BlockBegin* sux, bool is_safepoint) : BlockEnd(illegalType, NULL, is_safepoint)
+ , _direction(none)
+ , _profiled_method(NULL)
+ , _profiled_bci(0) {
BlockList* s = new BlockList(1);
s->append(sux);
set_sux(s);
}
+ bool should_profile() const { return check_flag(ProfileMDOFlag); }
+ ciMethod* profiled_method() const { return _profiled_method; } // set only for profiled branches
+ int profiled_bci() const { return _profiled_bci; }
+ Direction direction() const { return _direction; }
+
+ void set_should_profile(bool value) { set_flag(ProfileMDOFlag, value); }
+ void set_profiled_method(ciMethod* method) { _profiled_method = method; }
+ void set_profiled_bci(int bci) { _profiled_bci = bci; }
+ void set_direction(Direction d) { _direction = d; }
};
@@ -1757,6 +1782,8 @@
Value _y;
ciMethod* _profiled_method;
int _profiled_bci; // Canonicalizer may alter bci of If node
+ bool _swapped; // Is the order reversed with respect to the original If in the
+ // bytecode stream?
public:
// creation
// unordered_is_true is valid for float/double compares only
@@ -1767,6 +1794,7 @@
, _y(y)
, _profiled_method(NULL)
, _profiled_bci(0)
+ , _swapped(false)
{
ASSERT_VALUES
set_flag(UnorderedIsTrueFlag, unordered_is_true);
@@ -1788,7 +1816,8 @@
BlockBegin* usux() const { return sux_for(unordered_is_true()); }
bool should_profile() const { return check_flag(ProfileMDOFlag); }
ciMethod* profiled_method() const { return _profiled_method; } // set only for profiled branches
- int profiled_bci() const { return _profiled_bci; } // set only for profiled branches
+ int profiled_bci() const { return _profiled_bci; } // set for profiled branches and tiered
+ bool is_swapped() const { return _swapped; }
// manipulation
void swap_operands() {
@@ -1807,7 +1836,7 @@
void set_should_profile(bool value) { set_flag(ProfileMDOFlag, value); }
void set_profiled_method(ciMethod* method) { _profiled_method = method; }
void set_profiled_bci(int bci) { _profiled_bci = bci; }
-
+ void set_swapped(bool value) { _swapped = value; }
// generic
virtual void input_values_do(ValueVisitor* f) { BlockEnd::input_values_do(f); f->visit(&_x); f->visit(&_y); }
};
@@ -2235,7 +2264,6 @@
}
};
-
LEAF(ProfileCall, Instruction)
private:
ciMethod* _method;
@@ -2263,35 +2291,32 @@
virtual void input_values_do(ValueVisitor* f) { if (_recv != NULL) f->visit(&_recv); }
};
+// Use to trip invocation counter of an inlined method
-//
-// Simple node representing a counter update generally used for updating MDOs
-//
-LEAF(ProfileCounter, Instruction)
+LEAF(ProfileInvoke, Instruction)
private:
- Value _mdo;
- int _offset;
- int _increment;
+ ciMethod* _inlinee;
+ ValueStack* _state;
+ int _bci_of_invoke;
public:
- ProfileCounter(Value mdo, int offset, int increment = 1)
+ ProfileInvoke(ciMethod* inlinee, ValueStack* state, int bci)
: Instruction(voidType)
- , _mdo(mdo)
- , _offset(offset)
- , _increment(increment)
+ , _inlinee(inlinee)
+ , _bci_of_invoke(bci)
+ , _state(state)
{
- // The ProfileCounter has side-effects and must occur precisely where located
+ // The ProfileInvoke has side-effects and must occur precisely where located QQQ???
pin();
}
- Value mdo() { return _mdo; }
- int offset() { return _offset; }
- int increment() { return _increment; }
-
- virtual void input_values_do(ValueVisitor* f) { f->visit(&_mdo); }
+ ciMethod* inlinee() { return _inlinee; }
+ ValueStack* state() { return _state; }
+ int bci_of_invoke() { return _bci_of_invoke; }
+ virtual void input_values_do(ValueVisitor*) {}
+ virtual void state_values_do(ValueVisitor*);
};
-
class BlockPair: public CompilationResourceObj {
private:
BlockBegin* _from;
--- a/hotspot/src/share/vm/c1/c1_InstructionPrinter.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_InstructionPrinter.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -819,7 +819,6 @@
output()->put(')');
}
-
void InstructionPrinter::do_ProfileCall(ProfileCall* x) {
output()->print("profile ");
print_value(x->recv());
@@ -831,20 +830,11 @@
output()->put(')');
}
-
-void InstructionPrinter::do_ProfileCounter(ProfileCounter* x) {
+void InstructionPrinter::do_ProfileInvoke(ProfileInvoke* x) {
+ output()->print("profile_invoke ");
+ output()->print(" %s.%s", x->inlinee()->holder()->name()->as_utf8(), x->inlinee()->name()->as_utf8());
+ output()->put(')');
- ObjectConstant* oc = x->mdo()->type()->as_ObjectConstant();
- if (oc != NULL && oc->value()->is_method() &&
- x->offset() == methodOopDesc::interpreter_invocation_counter_offset_in_bytes()) {
- print_value(x->mdo());
- output()->print(".interpreter_invocation_count += %d", x->increment());
- } else {
- output()->print("counter [");
- print_value(x->mdo());
- output()->print(" + %d] += %d", x->offset(), x->increment());
- }
}
-
#endif // PRODUCT
--- a/hotspot/src/share/vm/c1/c1_InstructionPrinter.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_InstructionPrinter.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -123,6 +123,6 @@
virtual void do_UnsafePrefetchRead (UnsafePrefetchRead* x);
virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x);
virtual void do_ProfileCall (ProfileCall* x);
- virtual void do_ProfileCounter (ProfileCounter* x);
+ virtual void do_ProfileInvoke (ProfileInvoke* x);
};
#endif // PRODUCT
--- a/hotspot/src/share/vm/c1/c1_LIR.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIR.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -345,9 +345,8 @@
LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr result, LIR_Opr object, ciKlass* klass,
LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3,
bool fast_check, CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch,
- CodeStub* stub,
- ciMethod* profiled_method,
- int profiled_bci)
+ CodeStub* stub)
+
: LIR_Op(code, result, NULL)
, _object(object)
, _array(LIR_OprFact::illegalOpr)
@@ -359,8 +358,10 @@
, _stub(stub)
, _info_for_patch(info_for_patch)
, _info_for_exception(info_for_exception)
- , _profiled_method(profiled_method)
- , _profiled_bci(profiled_bci) {
+ , _profiled_method(NULL)
+ , _profiled_bci(-1)
+ , _should_profile(false)
+{
if (code == lir_checkcast) {
assert(info_for_exception != NULL, "checkcast throws exceptions");
} else if (code == lir_instanceof) {
@@ -372,7 +373,7 @@
-LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception, ciMethod* profiled_method, int profiled_bci)
+LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception)
: LIR_Op(code, LIR_OprFact::illegalOpr, NULL)
, _object(object)
, _array(array)
@@ -384,8 +385,10 @@
, _stub(NULL)
, _info_for_patch(NULL)
, _info_for_exception(info_for_exception)
- , _profiled_method(profiled_method)
- , _profiled_bci(profiled_bci) {
+ , _profiled_method(NULL)
+ , _profiled_bci(-1)
+ , _should_profile(false)
+{
if (code == lir_store_check) {
_stub = new ArrayStoreExceptionStub(info_for_exception);
assert(info_for_exception != NULL, "store_check throws exceptions");
@@ -495,6 +498,8 @@
case lir_monaddr: // input and result always valid, info always invalid
case lir_null_check: // input and info always valid, result always invalid
case lir_move: // input and result always valid, may have info
+ case lir_pack64: // input and result always valid
+ case lir_unpack64: // input and result always valid
case lir_prefetchr: // input always valid, result and info always invalid
case lir_prefetchw: // input always valid, result and info always invalid
{
@@ -903,7 +908,6 @@
assert(opProfileCall->_tmp1->is_valid(), "used"); do_temp(opProfileCall->_tmp1);
break;
}
-
default:
ShouldNotReachHere();
}
@@ -1015,7 +1019,11 @@
}
void LIR_OpTypeCheck::emit_code(LIR_Assembler* masm) {
- masm->emit_opTypeCheck(this);
+ if (code() == lir_checkcast) {
+ masm->emit_checkcast(this);
+ } else {
+ masm->emit_opTypeCheck(this);
+ }
if (stub()) {
masm->emit_code_stub(stub());
}
@@ -1041,12 +1049,10 @@
masm->emit_delay(this);
}
-
void LIR_OpProfileCall::emit_code(LIR_Assembler* masm) {
masm->emit_profile_call(this);
}
-
// LIR_List
LIR_List::LIR_List(Compilation* compilation, BlockBegin* block)
: _operations(8)
@@ -1364,19 +1370,23 @@
LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check,
CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub,
ciMethod* profiled_method, int profiled_bci) {
- append(new LIR_OpTypeCheck(lir_checkcast, result, object, klass,
- tmp1, tmp2, tmp3, fast_check, info_for_exception, info_for_patch, stub,
- profiled_method, profiled_bci));
+ LIR_OpTypeCheck* c = new LIR_OpTypeCheck(lir_checkcast, result, object, klass,
+ tmp1, tmp2, tmp3, fast_check, info_for_exception, info_for_patch, stub);
+ if (profiled_method != NULL) {
+ c->set_profiled_method(profiled_method);
+ c->set_profiled_bci(profiled_bci);
+ c->set_should_profile(true);
+ }
+ append(c);
}
-
void LIR_List::instanceof(LIR_Opr result, LIR_Opr object, ciKlass* klass, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, CodeEmitInfo* info_for_patch) {
- append(new LIR_OpTypeCheck(lir_instanceof, result, object, klass, tmp1, tmp2, tmp3, fast_check, NULL, info_for_patch, NULL, NULL, 0));
+ append(new LIR_OpTypeCheck(lir_instanceof, result, object, klass, tmp1, tmp2, tmp3, fast_check, NULL, info_for_patch, NULL));
}
void LIR_List::store_check(LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception) {
- append(new LIR_OpTypeCheck(lir_store_check, object, array, tmp1, tmp2, tmp3, info_for_exception, NULL, 0));
+ append(new LIR_OpTypeCheck(lir_store_check, object, array, tmp1, tmp2, tmp3, info_for_exception));
}
@@ -1611,6 +1621,8 @@
case lir_convert: s = "convert"; break;
case lir_alloc_object: s = "alloc_obj"; break;
case lir_monaddr: s = "mon_addr"; break;
+ case lir_pack64: s = "pack64"; break;
+ case lir_unpack64: s = "unpack64"; break;
// LIR_Op2
case lir_cmp: s = "cmp"; break;
case lir_cmp_l2i: s = "cmp_l2i"; break;
@@ -1664,7 +1676,6 @@
case lir_cas_int: s = "cas_int"; break;
// LIR_OpProfileCall
case lir_profile_call: s = "profile_call"; break;
-
case lir_none: ShouldNotReachHere();break;
default: s = "illegal_op"; break;
}
@@ -1922,7 +1933,6 @@
tmp1()->print(out); out->print(" ");
}
-
#endif // PRODUCT
// Implementation of LIR_InsertionBuffer
--- a/hotspot/src/share/vm/c1/c1_LIR.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIR.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -849,6 +849,8 @@
, lir_monaddr
, lir_roundfp
, lir_safepoint
+ , lir_pack64
+ , lir_unpack64
, lir_unwind
, end_op1
, begin_op2
@@ -1464,18 +1466,16 @@
CodeEmitInfo* _info_for_patch;
CodeEmitInfo* _info_for_exception;
CodeStub* _stub;
- // Helpers for Tier1UpdateMethodData
ciMethod* _profiled_method;
int _profiled_bci;
+ bool _should_profile;
public:
LIR_OpTypeCheck(LIR_Code code, LIR_Opr result, LIR_Opr object, ciKlass* klass,
LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check,
- CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub,
- ciMethod* profiled_method, int profiled_bci);
+ CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub);
LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array,
- LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception,
- ciMethod* profiled_method, int profiled_bci);
+ LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception);
LIR_Opr object() const { return _object; }
LIR_Opr array() const { assert(code() == lir_store_check, "not valid"); return _array; }
@@ -1489,8 +1489,12 @@
CodeStub* stub() const { return _stub; }
// methodDataOop profiling
- ciMethod* profiled_method() { return _profiled_method; }
- int profiled_bci() { return _profiled_bci; }
+ void set_profiled_method(ciMethod *method) { _profiled_method = method; }
+ void set_profiled_bci(int bci) { _profiled_bci = bci; }
+ void set_should_profile(bool b) { _should_profile = b; }
+ ciMethod* profiled_method() const { return _profiled_method; }
+ int profiled_bci() const { return _profiled_bci; }
+ bool should_profile() const { return _should_profile; }
virtual void emit_code(LIR_Assembler* masm);
virtual LIR_OpTypeCheck* as_OpTypeCheck() { return this; }
@@ -1771,7 +1775,6 @@
virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
};
-
class LIR_InsertionBuffer;
//--------------------------------LIR_List---------------------------------------------------
@@ -1835,6 +1838,7 @@
//---------- mutators ---------------
void insert_before(int i, LIR_List* op_list) { _operations.insert_before(i, op_list->instructions_list()); }
void insert_before(int i, LIR_Op* op) { _operations.insert_before(i, op); }
+ void remove_at(int i) { _operations.remove_at(i); }
//---------- printing -------------
void print_instructions() PRODUCT_RETURN;
@@ -1908,6 +1912,9 @@
void logical_or (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or, left, right, dst)); }
void logical_xor (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_xor, left, right, dst)); }
+ void pack64(LIR_Opr src, LIR_Opr dst) { append(new LIR_Op1(lir_pack64, src, dst, T_LONG, lir_patch_none, NULL)); }
+ void unpack64(LIR_Opr src, LIR_Opr dst) { append(new LIR_Op1(lir_unpack64, src, dst, T_LONG, lir_patch_none, NULL)); }
+
void null_check(LIR_Opr opr, CodeEmitInfo* info) { append(new LIR_Op1(lir_null_check, opr, info)); }
void throw_exception(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) {
append(new LIR_Op2(lir_throw, exceptionPC, exceptionOop, LIR_OprFact::illegalOpr, info));
@@ -2034,15 +2041,17 @@
void fpop_raw() { append(new LIR_Op0(lir_fpop_raw)); }
+ void instanceof(LIR_Opr result, LIR_Opr object, ciKlass* klass, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, CodeEmitInfo* info_for_patch);
+ void store_check(LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception);
+
void checkcast (LIR_Opr result, LIR_Opr object, ciKlass* klass,
LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check,
CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub,
ciMethod* profiled_method, int profiled_bci);
- void instanceof(LIR_Opr result, LIR_Opr object, ciKlass* klass, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, CodeEmitInfo* info_for_patch);
- void store_check(LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception);
-
// methodDataOop profiling
- void profile_call(ciMethod* method, int bci, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { append(new LIR_OpProfileCall(lir_profile_call, method, bci, mdo, recv, t1, cha_klass)); }
+ void profile_call(ciMethod* method, int bci, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) {
+ append(new LIR_OpProfileCall(lir_profile_call, method, bci, mdo, recv, t1, cha_klass));
+ }
};
void print_LIR(BlockList* blocks);
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -548,6 +548,16 @@
monitor_address(op->in_opr()->as_constant_ptr()->as_jint(), op->result_opr());
break;
+#ifdef SPARC
+ case lir_pack64:
+ pack64(op->in_opr(), op->result_opr());
+ break;
+
+ case lir_unpack64:
+ unpack64(op->in_opr(), op->result_opr());
+ break;
+#endif
+
case lir_unwind:
unwind_op(op->in_opr());
break;
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -187,6 +187,7 @@
void emit_alloc_obj(LIR_OpAllocObj* op);
void emit_alloc_array(LIR_OpAllocArray* op);
void emit_opTypeCheck(LIR_OpTypeCheck* op);
+ void emit_checkcast(LIR_OpTypeCheck* op);
void emit_compare_and_swap(LIR_OpCompareAndSwap* op);
void emit_lock(LIR_OpLock* op);
void emit_call(LIR_OpJavaCall* op);
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -480,16 +480,6 @@
}
-// increment a counter returning the incremented value
-LIR_Opr LIRGenerator::increment_and_return_counter(LIR_Opr base, int offset, int increment) {
- LIR_Address* counter = new LIR_Address(base, offset, T_INT);
- LIR_Opr result = new_register(T_INT);
- __ load(counter, result);
- __ add(result, LIR_OprFact::intConst(increment), result);
- __ store(result, counter);
- return result;
-}
-
void LIRGenerator::arithmetic_op(Bytecodes::Code code, LIR_Opr result, LIR_Opr left, LIR_Opr right, bool is_strictfp, LIR_Opr tmp_op, CodeEmitInfo* info) {
LIR_Opr result_op = result;
@@ -821,7 +811,6 @@
return tmp;
}
-
void LIRGenerator::profile_branch(If* if_instr, If::Condition cond) {
if (if_instr->should_profile()) {
ciMethod* method = if_instr->profiled_method();
@@ -836,24 +825,32 @@
assert(data->is_BranchData(), "need BranchData for two-way branches");
int taken_count_offset = md->byte_offset_of_slot(data, BranchData::taken_offset());
int not_taken_count_offset = md->byte_offset_of_slot(data, BranchData::not_taken_offset());
+ if (if_instr->is_swapped()) {
+ int t = taken_count_offset;
+ taken_count_offset = not_taken_count_offset;
+ not_taken_count_offset = t;
+ }
+
LIR_Opr md_reg = new_register(T_OBJECT);
- __ move(LIR_OprFact::oopConst(md->constant_encoding()), md_reg);
- LIR_Opr data_offset_reg = new_register(T_INT);
+ __ oop2reg(md->constant_encoding(), md_reg);
+
+ LIR_Opr data_offset_reg = new_pointer_register();
__ cmove(lir_cond(cond),
- LIR_OprFact::intConst(taken_count_offset),
- LIR_OprFact::intConst(not_taken_count_offset),
+ LIR_OprFact::intptrConst(taken_count_offset),
+ LIR_OprFact::intptrConst(not_taken_count_offset),
data_offset_reg);
- LIR_Opr data_reg = new_register(T_INT);
- LIR_Address* data_addr = new LIR_Address(md_reg, data_offset_reg, T_INT);
+
+ // MDO cells are intptr_t, so the data_reg width is arch-dependent.
+ LIR_Opr data_reg = new_pointer_register();
+ LIR_Address* data_addr = new LIR_Address(md_reg, data_offset_reg, data_reg->type());
__ move(LIR_OprFact::address(data_addr), data_reg);
+ // Use leal instead of add to avoid destroying condition codes on x86
LIR_Address* fake_incr_value = new LIR_Address(data_reg, DataLayout::counter_increment, T_INT);
- // Use leal instead of add to avoid destroying condition codes on x86
__ leal(LIR_OprFact::address(fake_incr_value), data_reg);
__ move(data_reg, LIR_OprFact::address(data_addr));
}
}
-
// Phi technique:
// This is about passing live values from one basic block to the other.
// In code generated with Java it is rather rare that more than one
@@ -1305,8 +1302,6 @@
LIR_Opr flag_val = new_register(T_INT);
__ load(mark_active_flag_addr, flag_val);
- LabelObj* start_store = new LabelObj();
-
LIR_PatchCode pre_val_patch_code =
patch ? lir_patch_normal : lir_patch_none;
@@ -1757,7 +1752,7 @@
#ifndef PRODUCT
if (PrintC1Statistics) {
- increment_counter(Runtime1::throw_count_address());
+ increment_counter(Runtime1::throw_count_address(), T_INT);
}
#endif
@@ -2191,12 +2186,41 @@
ValueStack* state = x->state_before() ? x->state_before() : x->state();
// increment backedge counter if needed
- increment_backedge_counter(state_for(x, state));
-
+ CodeEmitInfo* info = state_for(x, state);
+ increment_backedge_counter(info, info->bci());
CodeEmitInfo* safepoint_info = state_for(x, state);
__ safepoint(safepoint_poll_register(), safepoint_info);
}
+ // Gotos can be folded Ifs, handle this case.
+ if (x->should_profile()) {
+ ciMethod* method = x->profiled_method();
+ assert(method != NULL, "method should be set if branch is profiled");
+ ciMethodData* md = method->method_data();
+ if (md == NULL) {
+ bailout("out of memory building methodDataOop");
+ return;
+ }
+ ciProfileData* data = md->bci_to_data(x->profiled_bci());
+ assert(data != NULL, "must have profiling data");
+ int offset;
+ if (x->direction() == Goto::taken) {
+ assert(data->is_BranchData(), "need BranchData for two-way branches");
+ offset = md->byte_offset_of_slot(data, BranchData::taken_offset());
+ } else if (x->direction() == Goto::not_taken) {
+ assert(data->is_BranchData(), "need BranchData for two-way branches");
+ offset = md->byte_offset_of_slot(data, BranchData::not_taken_offset());
+ } else {
+ assert(data->is_JumpData(), "need JumpData for branches");
+ offset = md->byte_offset_of_slot(data, JumpData::taken_offset());
+ }
+ LIR_Opr md_reg = new_register(T_OBJECT);
+ __ oop2reg(md->constant_encoding(), md_reg);
+
+ increment_counter(new LIR_Address(md_reg, offset,
+ NOT_LP64(T_INT) LP64_ONLY(T_LONG)), DataLayout::counter_increment);
+ }
+
// emit phi-instruction move after safepoint since this simplifies
// describing the state as the safepoint.
move_to_phi(x->state());
@@ -2279,7 +2303,10 @@
}
// increment invocation counters if needed
- increment_invocation_counter(new CodeEmitInfo(0, scope()->start()->state(), NULL));
+ if (!method()->is_accessor()) { // Accessors do not have MDOs, so no counting.
+ CodeEmitInfo* info = new CodeEmitInfo(InvocationEntryBci, scope()->start()->state(), NULL);
+ increment_invocation_counter(info);
+ }
// all blocks with a successor must end with an unconditional jump
// to the successor even if they are consecutive
@@ -2613,12 +2640,12 @@
}
}
-
void LIRGenerator::do_ProfileCall(ProfileCall* x) {
// Need recv in a temporary register so it interferes with the other temporaries
LIR_Opr recv = LIR_OprFact::illegalOpr;
LIR_Opr mdo = new_register(T_OBJECT);
- LIR_Opr tmp = new_register(T_INT);
+ // tmp is used to hold the counters on SPARC
+ LIR_Opr tmp = new_pointer_register();
if (x->recv() != NULL) {
LIRItem value(x->recv(), this);
value.load_item();
@@ -2628,14 +2655,69 @@
__ profile_call(x->method(), x->bci_of_invoke(), mdo, recv, tmp, x->known_holder());
}
-
-void LIRGenerator::do_ProfileCounter(ProfileCounter* x) {
- LIRItem mdo(x->mdo(), this);
- mdo.load_item();
-
- increment_counter(new LIR_Address(mdo.result(), x->offset(), T_INT), x->increment());
+void LIRGenerator::do_ProfileInvoke(ProfileInvoke* x) {
+ // We can safely ignore accessors here, since c2 will inline them anyway,
+ // accessors are also always mature.
+ if (!x->inlinee()->is_accessor()) {
+ CodeEmitInfo* info = state_for(x, x->state(), true);
+ // Increment invocation counter, don't notify the runtime, because we don't inline loops,
+ increment_event_counter_impl(info, x->inlinee(), 0, InvocationEntryBci, false, false);
+ }
+}
+
+void LIRGenerator::increment_event_counter(CodeEmitInfo* info, int bci, bool backedge) {
+ int freq_log;
+ int level = compilation()->env()->comp_level();
+ if (level == CompLevel_limited_profile) {
+ freq_log = (backedge ? Tier2BackedgeNotifyFreqLog : Tier2InvokeNotifyFreqLog);
+ } else if (level == CompLevel_full_profile) {
+ freq_log = (backedge ? Tier3BackedgeNotifyFreqLog : Tier3InvokeNotifyFreqLog);
+ } else {
+ ShouldNotReachHere();
+ }
+ // Increment the appropriate invocation/backedge counter and notify the runtime.
+ increment_event_counter_impl(info, info->scope()->method(), (1 << freq_log) - 1, bci, backedge, true);
}
+void LIRGenerator::increment_event_counter_impl(CodeEmitInfo* info,
+ ciMethod *method, int frequency,
+ int bci, bool backedge, bool notify) {
+ assert(frequency == 0 || is_power_of_2(frequency + 1), "Frequency must be x^2 - 1 or 0");
+ int level = _compilation->env()->comp_level();
+ assert(level > CompLevel_simple, "Shouldn't be here");
+
+ int offset = -1;
+ LIR_Opr counter_holder = new_register(T_OBJECT);
+ LIR_Opr meth;
+ if (level == CompLevel_limited_profile) {
+ offset = in_bytes(backedge ? methodOopDesc::backedge_counter_offset() :
+ methodOopDesc::invocation_counter_offset());
+ __ oop2reg(method->constant_encoding(), counter_holder);
+ meth = counter_holder;
+ } else if (level == CompLevel_full_profile) {
+ offset = in_bytes(backedge ? methodDataOopDesc::backedge_counter_offset() :
+ methodDataOopDesc::invocation_counter_offset());
+ __ oop2reg(method->method_data()->constant_encoding(), counter_holder);
+ meth = new_register(T_OBJECT);
+ __ oop2reg(method->constant_encoding(), meth);
+ } else {
+ ShouldNotReachHere();
+ }
+ LIR_Address* counter = new LIR_Address(counter_holder, offset, T_INT);
+ LIR_Opr result = new_register(T_INT);
+ __ load(counter, result);
+ __ add(result, LIR_OprFact::intConst(InvocationCounter::count_increment), result);
+ __ store(result, counter);
+ if (notify) {
+ LIR_Opr mask = load_immediate(frequency << InvocationCounter::count_shift, T_INT);
+ __ logical_and(result, mask, result);
+ __ cmp(lir_cond_equal, result, LIR_OprFact::intConst(0));
+ // The bci for info can point to cmp for if's we want the if bci
+ CodeStub* overflow = new CounterOverflowStub(info, bci, meth);
+ __ branch(lir_cond_equal, T_INT, overflow);
+ __ branch_destination(overflow->continuation());
+ }
+}
LIR_Opr LIRGenerator::call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info) {
LIRItemList args(1);
@@ -2748,28 +2830,3 @@
return result;
}
-
-
-void LIRGenerator::increment_invocation_counter(CodeEmitInfo* info, bool backedge) {
-#ifdef TIERED
- if (_compilation->env()->comp_level() == CompLevel_fast_compile &&
- (method()->code_size() >= Tier1BytecodeLimit || backedge)) {
- int limit = InvocationCounter::Tier1InvocationLimit;
- int offset = in_bytes(methodOopDesc::invocation_counter_offset() +
- InvocationCounter::counter_offset());
- if (backedge) {
- limit = InvocationCounter::Tier1BackEdgeLimit;
- offset = in_bytes(methodOopDesc::backedge_counter_offset() +
- InvocationCounter::counter_offset());
- }
-
- LIR_Opr meth = new_register(T_OBJECT);
- __ oop2reg(method()->constant_encoding(), meth);
- LIR_Opr result = increment_and_return_counter(meth, offset, InvocationCounter::count_increment);
- __ cmp(lir_cond_aboveEqual, result, LIR_OprFact::intConst(limit));
- CodeStub* overflow = new CounterOverflowStub(info, info->bci());
- __ branch(lir_cond_aboveEqual, T_INT, overflow);
- __ branch_destination(overflow->continuation());
- }
-#endif
-}
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -196,6 +196,9 @@
LIR_Opr load_constant(Constant* x);
LIR_Opr load_constant(LIR_Const* constant);
+ // Given an immediate value, return an operand usable in logical ops.
+ LIR_Opr load_immediate(int x, BasicType type);
+
void set_result(Value x, LIR_Opr opr) {
assert(opr->is_valid(), "must set to valid value");
assert(x->operand()->is_illegal(), "operand should never change");
@@ -213,8 +216,6 @@
LIR_Opr round_item(LIR_Opr opr);
LIR_Opr force_to_spill(LIR_Opr value, BasicType t);
- void profile_branch(If* if_instr, If::Condition cond);
-
PhiResolverState& resolver_state() { return _resolver_state; }
void move_to_phi(PhiResolver* resolver, Value cur_val, Value sux_val);
@@ -285,12 +286,9 @@
void arithmetic_call_op (Bytecodes::Code code, LIR_Opr result, LIR_OprList* args);
- void increment_counter(address counter, int step = 1);
+ void increment_counter(address counter, BasicType type, int step = 1);
void increment_counter(LIR_Address* addr, int step = 1);
- // increment a counter returning the incremented value
- LIR_Opr increment_and_return_counter(LIR_Opr base, int offset, int increment);
-
// is_strictfp is only needed for mul and div (and only generates different code on i486)
void arithmetic_op(Bytecodes::Code code, LIR_Opr result, LIR_Opr left, LIR_Opr right, bool is_strictfp, LIR_Opr tmp, CodeEmitInfo* info = NULL);
// machine dependent. returns true if it emitted code for the multiply
@@ -347,9 +345,21 @@
bool can_store_as_constant(Value i, BasicType type) const;
LIR_Opr safepoint_poll_register();
- void increment_invocation_counter(CodeEmitInfo* info, bool backedge = false);
- void increment_backedge_counter(CodeEmitInfo* info) {
- increment_invocation_counter(info, true);
+
+ void profile_branch(If* if_instr, If::Condition cond);
+ void increment_event_counter_impl(CodeEmitInfo* info,
+ ciMethod *method, int frequency,
+ int bci, bool backedge, bool notify);
+ void increment_event_counter(CodeEmitInfo* info, int bci, bool backedge);
+ void increment_invocation_counter(CodeEmitInfo *info) {
+ if (compilation()->count_invocations()) {
+ increment_event_counter(info, InvocationEntryBci, false);
+ }
+ }
+ void increment_backedge_counter(CodeEmitInfo* info, int bci) {
+ if (compilation()->count_backedges()) {
+ increment_event_counter(info, bci, true);
+ }
}
CodeEmitInfo* state_for(Instruction* x, ValueStack* state, bool ignore_xhandler = false);
@@ -503,7 +513,7 @@
virtual void do_UnsafePrefetchRead (UnsafePrefetchRead* x);
virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x);
virtual void do_ProfileCall (ProfileCall* x);
- virtual void do_ProfileCounter (ProfileCounter* x);
+ virtual void do_ProfileInvoke (ProfileInvoke* x);
};
--- a/hotspot/src/share/vm/c1/c1_Optimizer.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Optimizer.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -430,7 +430,7 @@
void do_UnsafePrefetchRead (UnsafePrefetchRead* x);
void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x);
void do_ProfileCall (ProfileCall* x);
- void do_ProfileCounter (ProfileCounter* x);
+ void do_ProfileInvoke (ProfileInvoke* x);
};
@@ -598,7 +598,7 @@
void NullCheckVisitor::do_UnsafePrefetchRead (UnsafePrefetchRead* x) {}
void NullCheckVisitor::do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) {}
void NullCheckVisitor::do_ProfileCall (ProfileCall* x) { nce()->clear_last_explicit_null_check(); }
-void NullCheckVisitor::do_ProfileCounter (ProfileCounter* x) {}
+void NullCheckVisitor::do_ProfileInvoke (ProfileInvoke* x) {}
void NullCheckEliminator::visit(Value* p) {
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -140,9 +140,7 @@
case slow_subtype_check_id:
case fpu2long_stub_id:
case unwind_exception_id:
-#ifndef TIERED
- case counter_overflow_id: // Not generated outside the tiered world
-#endif
+ case counter_overflow_id:
#if defined(SPARC) || defined(PPC)
case handle_exception_nofpu_id: // Unused on sparc
#endif
@@ -322,31 +320,60 @@
}
JRT_END
-#ifdef TIERED
-JRT_ENTRY(void, Runtime1::counter_overflow(JavaThread* thread, int bci))
- RegisterMap map(thread, false);
- frame fr = thread->last_frame().sender(&map);
+// This is a helper to allow us to safepoint but allow the outer entry
+// to be safepoint free if we need to do an osr
+static nmethod* counter_overflow_helper(JavaThread* THREAD, int branch_bci, methodOopDesc* m) {
+ nmethod* osr_nm = NULL;
+ methodHandle method(THREAD, m);
+
+ RegisterMap map(THREAD, false);
+ frame fr = THREAD->last_frame().sender(&map);
nmethod* nm = (nmethod*) fr.cb();
- assert(nm!= NULL && nm->is_nmethod(), "what?");
- methodHandle method(thread, nm->method());
- if (bci == 0) {
- // invocation counter overflow
- if (!Tier1CountOnly) {
- CompilationPolicy::policy()->method_invocation_event(method, CHECK);
- } else {
- method()->invocation_counter()->reset();
+ assert(nm!= NULL && nm->is_nmethod(), "Sanity check");
+ methodHandle enclosing_method(THREAD, nm->method());
+
+ CompLevel level = (CompLevel)nm->comp_level();
+ int bci = InvocationEntryBci;
+ if (branch_bci != InvocationEntryBci) {
+ // Compute desination bci
+ address pc = method()->code_base() + branch_bci;
+ Bytecodes::Code branch = Bytecodes::code_at(pc, method());
+ int offset = 0;
+ switch (branch) {
+ case Bytecodes::_if_icmplt: case Bytecodes::_iflt:
+ case Bytecodes::_if_icmpgt: case Bytecodes::_ifgt:
+ case Bytecodes::_if_icmple: case Bytecodes::_ifle:
+ case Bytecodes::_if_icmpge: case Bytecodes::_ifge:
+ case Bytecodes::_if_icmpeq: case Bytecodes::_if_acmpeq: case Bytecodes::_ifeq:
+ case Bytecodes::_if_icmpne: case Bytecodes::_if_acmpne: case Bytecodes::_ifne:
+ case Bytecodes::_ifnull: case Bytecodes::_ifnonnull: case Bytecodes::_goto:
+ offset = (int16_t)Bytes::get_Java_u2(pc + 1);
+ break;
+ case Bytecodes::_goto_w:
+ offset = Bytes::get_Java_u4(pc + 1);
+ break;
+ default: ;
}
- } else {
- if (!Tier1CountOnly) {
- // Twe have a bci but not the destination bci and besides a backedge
- // event is more for OSR which we don't want here.
- CompilationPolicy::policy()->method_invocation_event(method, CHECK);
- } else {
- method()->backedge_counter()->reset();
+ bci = branch_bci + offset;
+ }
+
+ osr_nm = CompilationPolicy::policy()->event(enclosing_method, method, branch_bci, bci, level, THREAD);
+ return osr_nm;
+}
+
+JRT_BLOCK_ENTRY(address, Runtime1::counter_overflow(JavaThread* thread, int bci, methodOopDesc* method))
+ nmethod* osr_nm;
+ JRT_BLOCK
+ osr_nm = counter_overflow_helper(thread, bci, method);
+ if (osr_nm != NULL) {
+ RegisterMap map(thread, false);
+ frame fr = thread->last_frame().sender(&map);
+ VM_DeoptimizeFrame deopt(thread, fr.id());
+ VMThread::execute(&deopt);
}
- }
+ JRT_BLOCK_END
+ return NULL;
JRT_END
-#endif // TIERED
extern void vm_exit(int code);
@@ -898,7 +925,7 @@
NativeMovConstReg* n_copy = nativeMovConstReg_at(copy_buff);
assert(n_copy->data() == 0 ||
- n_copy->data() == (int)Universe::non_oop_word(),
+ n_copy->data() == (intptr_t)Universe::non_oop_word(),
"illegal init value");
assert(load_klass() != NULL, "klass not set");
n_copy->set_data((intx) (load_klass()));
--- a/hotspot/src/share/vm/c1/c1_Runtime1.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -123,9 +123,7 @@
static void new_object_array(JavaThread* thread, klassOopDesc* klass, jint length);
static void new_multi_array (JavaThread* thread, klassOopDesc* klass, int rank, jint* dims);
-#ifdef TIERED
- static void counter_overflow(JavaThread* thread, int bci);
-#endif // TIERED
+ static address counter_overflow(JavaThread* thread, int bci, methodOopDesc* method);
static void unimplemented_entry (JavaThread* thread, StubID id);
--- a/hotspot/src/share/vm/c1/c1_ValueMap.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_ValueMap.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -185,11 +185,11 @@
void do_ExceptionObject(ExceptionObject* x) { /* nothing to do */ }
void do_RoundFP (RoundFP* x) { /* nothing to do */ }
void do_UnsafeGetRaw (UnsafeGetRaw* x) { /* nothing to do */ }
+ void do_ProfileInvoke (ProfileInvoke* x) { /* nothing to do */ };
void do_UnsafeGetObject(UnsafeGetObject* x) { /* nothing to do */ }
void do_UnsafePrefetchRead (UnsafePrefetchRead* x) { /* nothing to do */ }
void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) { /* nothing to do */ }
void do_ProfileCall (ProfileCall* x) { /* nothing to do */ }
- void do_ProfileCounter (ProfileCounter* x) { /* nothing to do */ }
};
--- a/hotspot/src/share/vm/c1/c1_globals.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_globals.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -25,12 +25,6 @@
//
// Defines all global flags used by the client compiler.
//
-#ifndef TIERED
- #define NOT_TIERED(x) x
-#else
- #define NOT_TIERED(x)
-#endif
-
#define C1_FLAGS(develop, develop_pd, product, product_pd, notproduct) \
\
/* Printing */ \
@@ -55,7 +49,7 @@
notproduct(bool, PrintIRDuringConstruction, false, \
"Print IR as it's being constructed (helpful for debugging frontend)")\
\
- notproduct(bool, PrintPhiFunctions, false, \
+ notproduct(bool, PrintPhiFunctions, false, \
"Print phi functions when they are created and simplified") \
\
notproduct(bool, PrintIR, false, \
@@ -279,41 +273,29 @@
product_pd(intx, SafepointPollOffset, \
"Offset added to polling address (Intel only)") \
\
- product(bool, UseNewFeature1, false, \
- "Enable new feature for testing. This is a dummy flag.") \
- \
- product(bool, UseNewFeature2, false, \
- "Enable new feature for testing. This is a dummy flag.") \
- \
- product(bool, UseNewFeature3, false, \
- "Enable new feature for testing. This is a dummy flag.") \
- \
- product(bool, UseNewFeature4, false, \
- "Enable new feature for testing. This is a dummy flag.") \
- \
develop(bool, ComputeExactFPURegisterUsage, true, \
"Compute additional live set for fpu registers to simplify fpu stack merge (Intel only)") \
\
- product(bool, Tier1ProfileCalls, true, \
+ product(bool, C1ProfileCalls, true, \
"Profile calls when generating code for updating MDOs") \
\
- product(bool, Tier1ProfileVirtualCalls, true, \
+ product(bool, C1ProfileVirtualCalls, true, \
"Profile virtual calls when generating code for updating MDOs") \
\
- product(bool, Tier1ProfileInlinedCalls, true, \
+ product(bool, C1ProfileInlinedCalls, true, \
"Profile inlined calls when generating code for updating MDOs") \
\
- product(bool, Tier1ProfileBranches, true, \
+ product(bool, C1ProfileBranches, true, \
"Profile branches when generating code for updating MDOs") \
\
- product(bool, Tier1ProfileCheckcasts, true, \
+ product(bool, C1ProfileCheckcasts, true, \
"Profile checkcasts when generating code for updating MDOs") \
\
- product(bool, Tier1OptimizeVirtualCallProfiling, true, \
- "Use CHA and exact type results at call sites when updating MDOs") \
+ product(bool, C1OptimizeVirtualCallProfiling, true, \
+ "Use CHA and exact type results at call sites when updating MDOs")\
\
- develop(bool, Tier1CountOnly, false, \
- "Don't schedule tier 2 compiles. Enter VM only") \
+ product(bool, C1UpdateMethodData, trueInTiered, \
+ "Update methodDataOops in Tier1-generated code") \
\
develop(bool, PrintCFGToFile, false, \
"print control flow graph to a separate file during compilation") \
--- a/hotspot/src/share/vm/ci/ciEnv.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -956,18 +956,18 @@
if (task() != NULL) task()->set_code(nm);
if (entry_bci == InvocationEntryBci) {
-#ifdef TIERED
- // If there is an old version we're done with it
- nmethod* old = method->code();
- if (TraceMethodReplacement && old != NULL) {
- ResourceMark rm;
- char *method_name = method->name_and_sig_as_C_string();
- tty->print_cr("Replacing method %s", method_name);
+ if (TieredCompilation) {
+ // If there is an old version we're done with it
+ nmethod* old = method->code();
+ if (TraceMethodReplacement && old != NULL) {
+ ResourceMark rm;
+ char *method_name = method->name_and_sig_as_C_string();
+ tty->print_cr("Replacing method %s", method_name);
+ }
+ if (old != NULL ) {
+ old->make_not_entrant();
+ }
}
- if (old != NULL ) {
- old->make_not_entrant();
- }
-#endif // TIERED
if (TraceNMethodInstalls ) {
ResourceMark rm;
char *method_name = method->name_and_sig_as_C_string();
@@ -1011,7 +1011,7 @@
// ------------------------------------------------------------------
// ciEnv::comp_level
int ciEnv::comp_level() {
- if (task() == NULL) return CompLevel_full_optimization;
+ if (task() == NULL) return CompLevel_highest_tier;
return task()->comp_level();
}
--- a/hotspot/src/share/vm/ci/ciMethod.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/ci/ciMethod.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -49,7 +49,8 @@
_handler_count = h_m()->exception_table()->length() / 4;
_uses_monitors = h_m()->access_flags().has_monitor_bytecodes();
_balanced_monitors = !_uses_monitors || h_m()->access_flags().is_monitor_matching();
- _is_compilable = !h_m()->is_not_compilable();
+ _is_c1_compilable = !h_m()->is_not_c1_compilable();
+ _is_c2_compilable = !h_m()->is_not_c2_compilable();
// Lazy fields, filled in on demand. Require allocation.
_code = NULL;
_exception_handlers = NULL;
@@ -61,11 +62,12 @@
#endif // COMPILER2 || SHARK
ciEnv *env = CURRENT_ENV;
- if (env->jvmti_can_hotswap_or_post_breakpoint() && _is_compilable) {
+ if (env->jvmti_can_hotswap_or_post_breakpoint() && can_be_compiled()) {
// 6328518 check hotswap conditions under the right lock.
MutexLocker locker(Compile_lock);
if (Dependencies::check_evol_method(h_m()) != NULL) {
- _is_compilable = false;
+ _is_c1_compilable = false;
+ _is_c2_compilable = false;
}
} else {
CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops());
@@ -93,7 +95,7 @@
_signature = new (env->arena()) ciSignature(_holder, sig_symbol);
_method_data = NULL;
// Take a snapshot of these values, so they will be commensurate with the MDO.
- if (ProfileInterpreter) {
+ if (ProfileInterpreter || TieredCompilation) {
int invcnt = h_m()->interpreter_invocation_count();
// if the value overflowed report it as max int
_interpreter_invocation_count = invcnt < 0 ? max_jint : invcnt ;
@@ -437,11 +439,26 @@
// In addition, virtual call sites have receiver type information
int receivers_count_total = 0;
int morphism = 0;
+ // Precompute morphism for the possible fixup
for (uint i = 0; i < call->row_limit(); i++) {
ciKlass* receiver = call->receiver(i);
if (receiver == NULL) continue;
- morphism += 1;
- int rcount = call->receiver_count(i);
+ morphism++;
+ }
+ int epsilon = 0;
+ if (TieredCompilation && ProfileInterpreter) {
+ // Interpreter and C1 treat final and special invokes differently.
+ // C1 will record a type, whereas the interpreter will just
+ // increment the count. Detect this case.
+ if (morphism == 1 && count > 0) {
+ epsilon = count;
+ count = 0;
+ }
+ }
+ for (uint i = 0; i < call->row_limit(); i++) {
+ ciKlass* receiver = call->receiver(i);
+ if (receiver == NULL) continue;
+ int rcount = call->receiver_count(i) + epsilon;
if (rcount == 0) rcount = 1; // Should be valid value
receivers_count_total += rcount;
// Add the receiver to result data.
@@ -687,10 +704,17 @@
// invocation counts in methods.
int ciMethod::scale_count(int count, float prof_factor) {
if (count > 0 && method_data() != NULL) {
- int current_mileage = method_data()->current_mileage();
- int creation_mileage = method_data()->creation_mileage();
- int counter_life = current_mileage - creation_mileage;
+ int counter_life;
int method_life = interpreter_invocation_count();
+ if (TieredCompilation) {
+ // In tiered the MDO's life is measured directly, so just use the snapshotted counters
+ counter_life = MAX2(method_data()->invocation_count(), method_data()->backedge_count());
+ } else {
+ int current_mileage = method_data()->current_mileage();
+ int creation_mileage = method_data()->creation_mileage();
+ counter_life = current_mileage - creation_mileage;
+ }
+
// counter_life due to backedge_counter could be > method_life
if (counter_life > method_life)
counter_life = method_life;
@@ -778,7 +802,8 @@
Thread* my_thread = JavaThread::current();
methodHandle h_m(my_thread, get_methodOop());
- if (Tier1UpdateMethodData && is_tier1_compile(env->comp_level())) {
+ // Create an MDO for the inlinee
+ if (TieredCompilation && is_c1_compile(env->comp_level())) {
build_method_data(h_m);
}
@@ -885,7 +910,11 @@
// Have previous compilations of this method succeeded?
bool ciMethod::can_be_compiled() {
check_is_loaded();
- return _is_compilable;
+ ciEnv* env = CURRENT_ENV;
+ if (is_c1_compile(env->comp_level())) {
+ return _is_c1_compilable;
+ }
+ return _is_c2_compilable;
}
// ------------------------------------------------------------------
@@ -895,8 +924,13 @@
void ciMethod::set_not_compilable() {
check_is_loaded();
VM_ENTRY_MARK;
- _is_compilable = false;
- get_methodOop()->set_not_compilable();
+ ciEnv* env = CURRENT_ENV;
+ if (is_c1_compile(env->comp_level())) {
+ _is_c1_compilable = false;
+ } else {
+ _is_c2_compilable = false;
+ }
+ get_methodOop()->set_not_compilable(env->comp_level());
}
// ------------------------------------------------------------------
@@ -910,7 +944,8 @@
bool ciMethod::can_be_osr_compiled(int entry_bci) {
check_is_loaded();
VM_ENTRY_MARK;
- return !get_methodOop()->access_flags().is_not_osr_compilable();
+ ciEnv* env = CURRENT_ENV;
+ return !get_methodOop()->is_not_osr_compilable(env->comp_level());
}
// ------------------------------------------------------------------
@@ -920,6 +955,14 @@
return get_methodOop()->code() != NULL;
}
+int ciMethod::comp_level() {
+ check_is_loaded();
+ VM_ENTRY_MARK;
+ nmethod* nm = get_methodOop()->code();
+ if (nm != NULL) return nm->comp_level();
+ return 0;
+}
+
// ------------------------------------------------------------------
// ciMethod::instructions_size
//
@@ -928,18 +971,13 @@
// junk like exception handler, stubs, and constant table, which are
// not highly relevant to an inlined method. So we use the more
// specific accessor nmethod::insts_size.
-int ciMethod::instructions_size() {
+int ciMethod::instructions_size(int comp_level) {
GUARDED_VM_ENTRY(
nmethod* code = get_methodOop()->code();
- // if there's no compiled code or the code was produced by the
- // tier1 profiler return 0 for the code size. This should
- // probably be based on the compilation level of the nmethod but
- // that currently isn't properly recorded.
- if (code == NULL ||
- (TieredCompilation && code->compiler() != NULL && code->compiler()->is_c1())) {
- return 0;
+ if (code != NULL && (comp_level == CompLevel_any || comp_level == code->comp_level())) {
+ return code->code_end() - code->verified_entry_point();
}
- return code->insts_end() - code->verified_entry_point();
+ return 0;
)
}
--- a/hotspot/src/share/vm/ci/ciMethod.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/ci/ciMethod.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -61,7 +61,8 @@
bool _uses_monitors;
bool _balanced_monitors;
- bool _is_compilable;
+ bool _is_c1_compilable;
+ bool _is_c2_compilable;
bool _can_be_statically_bound;
// Lazy fields, filled in on demand
@@ -127,6 +128,8 @@
int interpreter_invocation_count() const { check_is_loaded(); return _interpreter_invocation_count; }
int interpreter_throwout_count() const { check_is_loaded(); return _interpreter_throwout_count; }
+ int comp_level();
+
Bytecodes::Code java_code_at_bci(int bci) {
address bcp = code() + bci;
return Bytecodes::java_code_at(bcp);
@@ -209,7 +212,7 @@
bool can_be_osr_compiled(int entry_bci);
void set_not_compilable();
bool has_compiled_code();
- int instructions_size();
+ int instructions_size(int comp_level = CompLevel_any);
void log_nmethod_identity(xmlStream* log);
bool is_not_reached(int bci);
bool was_executed_more_than(int times);
--- a/hotspot/src/share/vm/ci/ciMethodData.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/ci/ciMethodData.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,8 @@
_data_size = 0;
_extra_data_size = 0;
_current_mileage = 0;
+ _invocation_counter = 0;
+ _backedge_counter = 0;
_state = empty_state;
_saw_free_extra_data = false;
// Set an initial hint. Don't use set_hint_di() because
@@ -56,6 +58,8 @@
_data_size = 0;
_extra_data_size = 0;
_current_mileage = 0;
+ _invocation_counter = 0;
+ _backedge_counter = 0;
_state = empty_state;
_saw_free_extra_data = false;
// Set an initial hint. Don't use set_hint_di() because
@@ -99,6 +103,8 @@
}
// Note: Extra data are all BitData, and do not need translation.
_current_mileage = methodDataOopDesc::mileage_of(mdo->method());
+ _invocation_counter = mdo->invocation_count();
+ _backedge_counter = mdo->backedge_count();
_state = mdo->is_mature()? mature_state: immature_state;
_eflags = mdo->eflags();
@@ -253,6 +259,23 @@
}
}
+void ciMethodData::set_compilation_stats(short loops, short blocks) {
+ VM_ENTRY_MARK;
+ methodDataOop mdo = get_methodDataOop();
+ if (mdo != NULL) {
+ mdo->set_num_loops(loops);
+ mdo->set_num_blocks(blocks);
+ }
+}
+
+void ciMethodData::set_would_profile(bool p) {
+ VM_ENTRY_MARK;
+ methodDataOop mdo = get_methodDataOop();
+ if (mdo != NULL) {
+ mdo->set_would_profile(p);
+ }
+}
+
bool ciMethodData::has_escape_info() {
return eflag_set(methodDataOopDesc::estimated);
}
--- a/hotspot/src/share/vm/ci/ciMethodData.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/ci/ciMethodData.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -162,6 +162,12 @@
// Maturity of the oop when the snapshot is taken.
int _current_mileage;
+ // These counters hold the age of MDO in tiered. In tiered we can have the same method
+ // running at different compilation levels concurrently. So, in order to precisely measure
+ // its maturity we need separate counters.
+ int _invocation_counter;
+ int _backedge_counter;
+
// Coherent snapshot of original header.
methodDataOopDesc _orig;
@@ -223,6 +229,16 @@
int creation_mileage() { return _orig.creation_mileage(); }
int current_mileage() { return _current_mileage; }
+ int invocation_count() { return _invocation_counter; }
+ int backedge_count() { return _backedge_counter; }
+ // Transfer information about the method to methodDataOop.
+ // would_profile means we would like to profile this method,
+ // meaning it's not trivial.
+ void set_would_profile(bool p);
+ // Also set the numer of loops and blocks in the method.
+ // Again, this is used to determine if a method is trivial.
+ void set_compilation_stats(short loops, short blocks);
+
void load_data();
// Convert a dp (data pointer) to a di (data index).
--- a/hotspot/src/share/vm/classfile/classLoader.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/classfile/classLoader.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1292,7 +1292,7 @@
// Iterate over all methods in class
for (int n = 0; n < k->methods()->length(); n++) {
methodHandle m (THREAD, methodOop(k->methods()->obj_at(n)));
- if (CompilationPolicy::canBeCompiled(m)) {
+ if (CompilationPolicy::can_be_compiled(m)) {
if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) {
// Give sweeper a chance to keep up with CTW
@@ -1301,7 +1301,7 @@
_codecache_sweep_counter = 0;
}
// Force compilation
- CompileBroker::compile_method(m, InvocationEntryBci,
+ CompileBroker::compile_method(m, InvocationEntryBci, CompLevel_initial_compile,
methodHandle(), 0, "CTW", THREAD);
if (HAS_PENDING_EXCEPTION) {
CLEAR_PENDING_EXCEPTION;
@@ -1315,7 +1315,7 @@
nm->make_not_entrant();
m->clear_code();
}
- CompileBroker::compile_method(m, InvocationEntryBci,
+ CompileBroker::compile_method(m, InvocationEntryBci, CompLevel_full_optimization,
methodHandle(), 0, "CTW", THREAD);
if (HAS_PENDING_EXCEPTION) {
CLEAR_PENDING_EXCEPTION;
--- a/hotspot/src/share/vm/code/nmethod.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/code/nmethod.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -867,9 +867,9 @@
if (compiler() != NULL) {
log->print(" compiler='%s'", compiler()->name());
}
-#ifdef TIERED
- log->print(" level='%d'", comp_level());
-#endif // TIERED
+ if (TieredCompilation) {
+ log->print(" level='%d'", comp_level());
+ }
}
@@ -908,35 +908,71 @@
#undef LOG_OFFSET
+void nmethod::print_compilation(outputStream *st, const char *method_name, const char *title,
+ methodOop method, bool is_blocking, int compile_id, int bci, int comp_level) {
+ bool is_synchronized = false, has_xhandler = false, is_native = false;
+ int code_size = -1;
+ if (method != NULL) {
+ is_synchronized = method->is_synchronized();
+ has_xhandler = method->has_exception_handler();
+ is_native = method->is_native();
+ code_size = method->code_size();
+ }
+ // print compilation number
+ st->print("%7d %3d", (int)tty->time_stamp().milliseconds(), compile_id);
+
+ // print method attributes
+ const bool is_osr = bci != InvocationEntryBci;
+ const char blocking_char = is_blocking ? 'b' : ' ';
+ const char compile_type = is_osr ? '%' : ' ';
+ const char sync_char = is_synchronized ? 's' : ' ';
+ const char exception_char = has_xhandler ? '!' : ' ';
+ const char native_char = is_native ? 'n' : ' ';
+ st->print("%c%c%c%c%c ", compile_type, sync_char, exception_char, blocking_char, native_char);
+ if (TieredCompilation) {
+ st->print("%d ", comp_level);
+ }
+
+ // print optional title
+ bool do_nl = false;
+ if (title != NULL) {
+ int tlen = (int) strlen(title);
+ bool do_nl = false;
+ if (tlen > 0 && title[tlen-1] == '\n') { tlen--; do_nl = true; }
+ st->print("%.*s", tlen, title);
+ } else {
+ do_nl = true;
+ }
+
+ // print method name string if given
+ if (method_name != NULL) {
+ st->print(method_name);
+ } else {
+ // otherwise as the method to print itself
+ if (method != NULL && !Universe::heap()->is_gc_active()) {
+ method->print_short_name(st);
+ } else {
+ st->print("(method)");
+ }
+ }
+
+ if (method != NULL) {
+ // print osr_bci if any
+ if (is_osr) st->print(" @ %d", bci);
+ // print method size
+ st->print(" (%d bytes)", code_size);
+ }
+ if (do_nl) st->cr();
+}
+
// Print out more verbose output usually for a newly created nmethod.
void nmethod::print_on(outputStream* st, const char* title) const {
if (st != NULL) {
ttyLocker ttyl;
- // Print a little tag line that looks like +PrintCompilation output:
- int tlen = (int) strlen(title);
- bool do_nl = false;
- if (tlen > 0 && title[tlen-1] == '\n') { tlen--; do_nl = true; }
- st->print("%3d%c %.*s",
- compile_id(),
- is_osr_method() ? '%' :
- method() != NULL &&
- is_native_method() ? 'n' : ' ',
- tlen, title);
-#ifdef TIERED
- st->print(" (%d) ", comp_level());
-#endif // TIERED
+ print_compilation(st, /*method_name*/NULL, title,
+ method(), /*is_blocking*/false,
+ compile_id(), osr_entry_bci(), comp_level());
if (WizardMode) st->print(" (" INTPTR_FORMAT ")", this);
- if (Universe::heap()->is_gc_active() && method() != NULL) {
- st->print("(method)");
- } else if (method() != NULL) {
- method()->print_short_name(st);
- if (is_osr_method())
- st->print(" @ %d", osr_entry_bci());
- if (method()->code_size() > 0)
- st->print(" (%d bytes)", method()->code_size());
- }
-
- if (do_nl) st->cr();
}
}
@@ -1137,6 +1173,7 @@
}
void nmethod::inc_decompile_count() {
+ if (!is_compiled_by_c2()) return;
// Could be gated by ProfileTraps, but do not bother...
methodOop m = method();
if (m == NULL) return;
--- a/hotspot/src/share/vm/code/nmethod.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/code/nmethod.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -599,6 +599,10 @@
void verify_scopes();
void verify_interrupt_point(address interrupt_point);
+ // print compilation helper
+ static void print_compilation(outputStream *st, const char *method_name, const char *title,
+ methodOop method, bool is_blocking, int compile_id, int bci, int comp_level);
+
// printing support
void print() const;
void print_code();
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -123,20 +123,12 @@
int CompileBroker::_sum_nmethod_size = 0;
int CompileBroker::_sum_nmethod_code_size = 0;
-CompileQueue* CompileBroker::_method_queue = NULL;
+CompileQueue* CompileBroker::_c2_method_queue = NULL;
+CompileQueue* CompileBroker::_c1_method_queue = NULL;
CompileTask* CompileBroker::_task_free_list = NULL;
GrowableArray<CompilerThread*>* CompileBroker::_method_threads = NULL;
-// CompileTaskWrapper
-//
-// Assign this task to the current thread. Deallocate the task
-// when the compilation is complete.
-class CompileTaskWrapper : StackObj {
-public:
- CompileTaskWrapper(CompileTask* task);
- ~CompileTaskWrapper();
-};
CompileTaskWrapper::CompileTaskWrapper(CompileTask* task) {
CompilerThread* thread = CompilerThread::current();
@@ -246,6 +238,12 @@
bool_to_str(_is_complete), bool_to_str(_is_success));
}
+
+void CompileTask::print_compilation(outputStream *st, methodOop method, char* method_name) {
+ nmethod::print_compilation(st, method_name,/*title*/ NULL, method,
+ is_blocking(), compile_id(), osr_bci(), comp_level());
+}
+
// ------------------------------------------------------------------
// CompileTask::print_line_on_error
//
@@ -258,32 +256,13 @@
//
void CompileTask::print_line_on_error(outputStream* st, char* buf, int buflen) {
methodOop method = (methodOop)JNIHandles::resolve(_method);
-
// print compiler name
st->print("%s:", CompileBroker::compiler(comp_level())->name());
-
- // print compilation number
- st->print("%3d", compile_id());
-
- // print method attributes
- const bool is_osr = osr_bci() != CompileBroker::standard_entry_bci;
- { const char blocking_char = is_blocking() ? 'b' : ' ';
- const char compile_type = is_osr ? '%' : ' ';
- const char sync_char = method->is_synchronized() ? 's' : ' ';
- const char exception_char = method->has_exception_handler() ? '!' : ' ';
- const char tier_char =
- is_highest_tier_compile(comp_level()) ? ' ' : ('0' + comp_level());
- st->print("%c%c%c%c%c ", compile_type, sync_char, exception_char, blocking_char, tier_char);
+ char* method_name = NULL;
+ if (method != NULL) {
+ method_name = method->name_and_sig_as_C_string(buf, buflen);
}
-
- // Use buf to get method name and signature
- if (method != NULL) st->print("%s", method->name_and_sig_as_C_string(buf, buflen));
-
- // print osr_bci if any
- if (is_osr) st->print(" @ %d", osr_bci());
-
- // print method size
- st->print_cr(" (%d bytes)", method->code_size());
+ print_compilation(st, method, method_name);
}
// ------------------------------------------------------------------
@@ -298,29 +277,7 @@
// print compiler name if requested
if (CIPrintCompilerName) tty->print("%s:", CompileBroker::compiler(comp_level())->name());
-
- // print compilation number
- tty->print("%3d", compile_id());
-
- // print method attributes
- const bool is_osr = osr_bci() != CompileBroker::standard_entry_bci;
- { const char blocking_char = is_blocking() ? 'b' : ' ';
- const char compile_type = is_osr ? '%' : ' ';
- const char sync_char = method->is_synchronized() ? 's' : ' ';
- const char exception_char = method->has_exception_handler() ? '!' : ' ';
- const char tier_char =
- is_highest_tier_compile(comp_level()) ? ' ' : ('0' + comp_level());
- tty->print("%c%c%c%c%c ", compile_type, sync_char, exception_char, blocking_char, tier_char);
- }
-
- // print method name
- method->print_short_name(tty);
-
- // print osr_bci if any
- if (is_osr) tty->print(" @ %d", osr_bci());
-
- // print method size
- tty->print_cr(" (%d bytes)", method->code_size());
+ print_compilation(tty, method(), NULL);
}
@@ -427,6 +384,7 @@
assert(lock()->owned_by_self(), "must own lock");
task->set_next(NULL);
+ task->set_prev(NULL);
if (_last == NULL) {
// The compile queue is empty.
@@ -437,8 +395,10 @@
// Append the task to the queue.
assert(_last->next() == NULL, "not last");
_last->set_next(task);
+ task->set_prev(_last);
_last = task;
}
+ ++_size;
// Mark the method as being in the compile queue.
((methodOop)JNIHandles::resolve(task->method_handle()))->set_queued_for_compilation();
@@ -452,10 +412,9 @@
}
// Notify CompilerThreads that a task is available.
- lock()->notify();
+ lock()->notify_all();
}
-
// ------------------------------------------------------------------
// CompileQueue::get
//
@@ -464,7 +423,6 @@
NMethodSweeper::possibly_sweep();
MutexLocker locker(lock());
-
// Wait for an available CompileTask.
while (_first == NULL) {
// There is no work to be done right now. Wait.
@@ -481,20 +439,32 @@
lock()->wait();
}
}
-
- CompileTask* task = _first;
+ CompileTask* task = CompilationPolicy::policy()->select_task(this);
+ remove(task);
+ return task;
+}
- // Update queue first and last
- _first =_first->next();
- if (_first == NULL) {
- _last = NULL;
+void CompileQueue::remove(CompileTask* task)
+{
+ assert(lock()->owned_by_self(), "must own lock");
+ if (task->prev() != NULL) {
+ task->prev()->set_next(task->next());
+ } else {
+ // max is the first element
+ assert(task == _first, "Sanity");
+ _first = task->next();
}
- return task;
-
+ if (task->next() != NULL) {
+ task->next()->set_prev(task->prev());
+ } else {
+ // max is the last element
+ assert(task == _last, "Sanity");
+ _last = task->prev();
+ }
+ --_size;
}
-
// ------------------------------------------------------------------
// CompileQueue::print
void CompileQueue::print() {
@@ -545,7 +515,6 @@
}
}
-
// ------------------------------------------------------------------
// CompileBroker::compilation_init
//
@@ -554,18 +523,18 @@
_last_method_compiled[0] = '\0';
// Set the interface to the current compiler(s).
+ int c1_count = CompilationPolicy::policy()->compiler_count(CompLevel_simple);
+ int c2_count = CompilationPolicy::policy()->compiler_count(CompLevel_full_optimization);
#ifdef COMPILER1
- _compilers[0] = new Compiler();
-#ifndef COMPILER2
- _compilers[1] = _compilers[0];
-#endif
+ if (c1_count > 0) {
+ _compilers[0] = new Compiler();
+ }
#endif // COMPILER1
#ifdef COMPILER2
- _compilers[1] = new C2Compiler();
-#ifndef COMPILER1
- _compilers[0] = _compilers[1];
-#endif
+ if (c2_count > 0) {
+ _compilers[1] = new C2Compiler();
+ }
#endif // COMPILER2
#ifdef SHARK
@@ -580,9 +549,7 @@
_task_free_list = NULL;
// Start the CompilerThreads
- init_compiler_threads(compiler_count());
-
-
+ init_compiler_threads(c1_count, c2_count);
// totalTime performance counter is always created as it is required
// by the implementation of java.lang.management.CompilationMBean.
{
@@ -770,23 +737,38 @@
// CompileBroker::init_compiler_threads
//
// Initialize the compilation queue
-void CompileBroker::init_compiler_threads(int compiler_count) {
+void CompileBroker::init_compiler_threads(int c1_compiler_count, int c2_compiler_count) {
EXCEPTION_MARK;
+ assert(c2_compiler_count > 0 || c1_compiler_count > 0, "No compilers?");
+ if (c2_compiler_count > 0) {
+ _c2_method_queue = new CompileQueue("C2MethodQueue", MethodCompileQueue_lock);
+ }
+ if (c1_compiler_count > 0) {
+ _c1_method_queue = new CompileQueue("C1MethodQueue", MethodCompileQueue_lock);
+ }
- _method_queue = new CompileQueue("MethodQueue", MethodCompileQueue_lock);
+ int compiler_count = c1_compiler_count + c2_compiler_count;
+
_method_threads =
new (ResourceObj::C_HEAP) GrowableArray<CompilerThread*>(compiler_count, true);
char name_buffer[256];
- int i;
- for (i = 0; i < compiler_count; i++) {
+ for (int i = 0; i < c2_compiler_count; i++) {
// Create a name for our thread.
- sprintf(name_buffer, "CompilerThread%d", i);
+ sprintf(name_buffer, "C2 CompilerThread%d", i);
CompilerCounters* counters = new CompilerCounters("compilerThread", i, CHECK);
-
- CompilerThread* new_thread = make_compiler_thread(name_buffer, _method_queue, counters, CHECK);
+ CompilerThread* new_thread = make_compiler_thread(name_buffer, _c2_method_queue, counters, CHECK);
_method_threads->append(new_thread);
}
+
+ for (int i = c2_compiler_count; i < compiler_count; i++) {
+ // Create a name for our thread.
+ sprintf(name_buffer, "C1 CompilerThread%d", i);
+ CompilerCounters* counters = new CompilerCounters("compilerThread", i, CHECK);
+ CompilerThread* new_thread = make_compiler_thread(name_buffer, _c1_method_queue, counters, CHECK);
+ _method_threads->append(new_thread);
+ }
+
if (UsePerfData) {
PerfDataManager::create_constant(SUN_CI, "threads", PerfData::U_Bytes,
compiler_count, CHECK);
@@ -796,7 +778,9 @@
// ------------------------------------------------------------------
// CompileBroker::is_idle
bool CompileBroker::is_idle() {
- if (!_method_queue->is_empty()) {
+ if (_c2_method_queue != NULL && !_c2_method_queue->is_empty()) {
+ return false;
+ } else if (_c1_method_queue != NULL && !_c1_method_queue->is_empty()) {
return false;
} else {
int num_threads = _method_threads->length();
@@ -859,6 +843,7 @@
return;
}
+
// If this method is already in the compile queue, then
// we do not block the current thread.
if (compilation_is_in_queue(method, osr_bci)) {
@@ -876,10 +861,11 @@
// Outputs from the following MutexLocker block:
CompileTask* task = NULL;
bool blocking = false;
+ CompileQueue* queue = compile_queue(comp_level);
// Acquire our lock.
{
- MutexLocker locker(_method_queue->lock(), THREAD);
+ MutexLocker locker(queue->lock(), THREAD);
// Make sure the method has not slipped into the queues since
// last we checked; note that those checks were "fast bail-outs".
@@ -945,7 +931,7 @@
// and in that case it's best to protect both the testing (here) of
// these bits, and their updating (here and elsewhere) under a
// common lock.
- task = create_compile_task(_method_queue,
+ task = create_compile_task(queue,
compile_id, method,
osr_bci, comp_level,
hot_method, hot_count, comment,
@@ -959,6 +945,7 @@
nmethod* CompileBroker::compile_method(methodHandle method, int osr_bci,
+ int comp_level,
methodHandle hot_method, int hot_count,
const char* comment, TRAPS) {
// make sure arguments make sense
@@ -967,26 +954,9 @@
assert(!method->is_abstract() && (osr_bci == InvocationEntryBci || !method->is_native()), "cannot compile abstract/native methods");
assert(!instanceKlass::cast(method->method_holder())->is_not_initialized(), "method holder must be initialized");
- int comp_level = CompilationPolicy::policy()->compilation_level(method, osr_bci);
-
-#ifdef TIERED
- if (TieredCompilation && StressTieredRuntime) {
- static int flipper = 0;
- if (is_even(flipper++)) {
- comp_level = CompLevel_fast_compile;
- } else {
- comp_level = CompLevel_full_optimization;
- }
+ if (!TieredCompilation) {
+ comp_level = CompLevel_highest_tier;
}
-#ifdef SPARC
- // QQQ FIX ME
- // C2 only returns long results in G1 and c1 doesn't understand so disallow c2
- // compiles of long results
- if (TieredCompilation && method()->result_type() == T_LONG) {
- comp_level = CompLevel_fast_compile;
- }
-#endif // SPARC
-#endif // TIERED
// return quickly if possible
@@ -1000,12 +970,10 @@
if (osr_bci == InvocationEntryBci) {
// standard compilation
nmethod* method_code = method->code();
- if (method_code != NULL
-#ifdef TIERED
- && ( method_code->is_compiled_by_c2() || comp_level == CompLevel_fast_compile )
-#endif // TIERED
- ) {
- return method_code;
+ if (method_code != NULL) {
+ if (compilation_is_complete(method, osr_bci, comp_level)) {
+ return method_code;
+ }
}
if (method->is_not_compilable(comp_level)) return NULL;
@@ -1021,10 +989,11 @@
// osr compilation
#ifndef TIERED
// seems like an assert of dubious value
- assert(comp_level == CompLevel_full_optimization,
+ assert(comp_level == CompLevel_highest_tier,
"all OSR compiles are assumed to be at a single compilation lavel");
#endif // TIERED
- nmethod* nm = method->lookup_osr_nmethod_for(osr_bci);
+ // We accept a higher level osr method
+ nmethod* nm = method->lookup_osr_nmethod_for(osr_bci, comp_level, false);
if (nm != NULL) return nm;
if (method->is_not_osr_compilable()) return NULL;
}
@@ -1071,8 +1040,7 @@
// If the compiler is shut off due to code cache flushing or otherwise,
// fail out now so blocking compiles dont hang the java thread
if (!should_compile_new_jobs() || (UseCodeCacheFlushing && CodeCache::needs_flushing())) {
- method->invocation_counter()->decay();
- method->backedge_counter()->decay();
+ CompilationPolicy::policy()->delay_compilation(method());
return NULL;
}
@@ -1088,7 +1056,8 @@
}
// return requested nmethod
- return osr_bci == InvocationEntryBci ? method->code() : method->lookup_osr_nmethod_for(osr_bci);
+ // We accept a higher level osr method
+ return osr_bci == InvocationEntryBci ? method->code() : method->lookup_osr_nmethod_for(osr_bci, comp_level, false);
}
@@ -1104,7 +1073,7 @@
if (method->is_not_osr_compilable()) {
return true;
} else {
- nmethod* result = method->lookup_osr_nmethod_for(osr_bci);
+ nmethod* result = method->lookup_osr_nmethod_for(osr_bci, comp_level, true);
return (result != NULL);
}
} else {
@@ -1113,15 +1082,7 @@
} else {
nmethod* result = method->code();
if (result == NULL) return false;
-#ifdef TIERED
- if (comp_level == CompLevel_fast_compile) {
- // At worst the code is from c1
- return true;
- }
- // comp level must be full opt
- return result->is_compiled_by_c2();
-#endif // TIERED
- return true;
+ return comp_level == result->comp_level();
}
}
}
@@ -1139,11 +1100,10 @@
// versa). This can be remedied by a full queue search to disambiguate
// cases. If it is deemed profitible, this may be done.
bool CompileBroker::compilation_is_in_queue(methodHandle method,
- int osr_bci) {
+ int osr_bci) {
return method->queued_for_compilation();
}
-
// ------------------------------------------------------------------
// CompileBroker::compilation_is_prohibited
//
@@ -1151,11 +1111,9 @@
bool CompileBroker::compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level) {
bool is_native = method->is_native();
// Some compilers may not support the compilation of natives.
- // QQQ this needs some work ought to only record not compilable at
- // the specified level
if (is_native &&
(!CICompileNatives || !compiler(comp_level)->supports_native())) {
- method->set_not_compilable_quietly();
+ method->set_not_compilable_quietly(comp_level);
return true;
}
@@ -1194,7 +1152,7 @@
// compilations may be numbered separately from regular compilations
// if certain debugging flags are used.
uint CompileBroker::assign_compile_id(methodHandle method, int osr_bci) {
- assert(_method_queue->lock()->owner() == JavaThread::current(),
+ assert(MethodCompileQueue_lock->owner() == Thread::current(),
"must hold the compilation queue lock");
bool is_osr = (osr_bci != standard_entry_bci);
assert(!method->is_native(), "no longer compile natives");
@@ -1643,7 +1601,6 @@
#endif
}
-
// ------------------------------------------------------------------
// CompileBroker::handle_full_code_cache
//
@@ -1883,12 +1840,12 @@
CompileBroker::_t_standard_compilation.seconds() / CompileBroker::_total_standard_compile_count);
tty->print_cr(" On stack replacement : %6.3f s, Average : %2.3f", CompileBroker::_t_osr_compilation.seconds(), CompileBroker::_t_osr_compilation.seconds() / CompileBroker::_total_osr_compile_count);
- if (compiler(CompLevel_fast_compile)) {
- compiler(CompLevel_fast_compile)->print_timers();
- if (compiler(CompLevel_fast_compile) != compiler(CompLevel_highest_tier))
- compiler(CompLevel_highest_tier)->print_timers();
+ if (compiler(CompLevel_simple) != NULL) {
+ compiler(CompLevel_simple)->print_timers();
}
-
+ if (compiler(CompLevel_full_optimization) != NULL) {
+ compiler(CompLevel_full_optimization)->print_timers();
+ }
tty->cr();
int tcb = CompileBroker::_sum_osr_bytes_compiled + CompileBroker::_sum_standard_bytes_compiled;
tty->print_cr(" Total compiled bytecodes : %6d bytes", tcb);
--- a/hotspot/src/share/vm/compiler/compileBroker.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/compiler/compileBroker.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,7 +41,7 @@
int _comp_level;
int _num_inlined_bytecodes;
nmethodLocker* _code_handle; // holder of eventual result
- CompileTask* _next;
+ CompileTask* _next, *_prev;
// Fields used for logging why the compilation was initiated:
jlong _time_queued; // in units of os::elapsed_counter()
@@ -49,6 +49,7 @@
int _hot_count; // information about its invocation counter
const char* _comment; // more info about the task
+ void print_compilation(outputStream *st, methodOop method, char* method_name);
public:
CompileTask() {
_lock = new Monitor(Mutex::nonleaf+2, "CompileTaskLock");
@@ -85,15 +86,17 @@
CompileTask* next() const { return _next; }
void set_next(CompileTask* next) { _next = next; }
+ CompileTask* prev() const { return _prev; }
+ void set_prev(CompileTask* prev) { _prev = prev; }
void print();
void print_line();
+
void print_line_on_error(outputStream* st, char* buf, int buflen);
void log_task(xmlStream* log);
void log_task_queued();
void log_task_start(CompileLog* log);
void log_task_done(CompileLog* log);
-
};
// CompilerCounters
@@ -141,7 +144,6 @@
PerfCounter* compile_counter() { return _perf_compiles; }
};
-
// CompileQueue
//
// A list of CompileTasks.
@@ -153,26 +155,42 @@
CompileTask* _first;
CompileTask* _last;
+ int _size;
public:
CompileQueue(const char* name, Monitor* lock) {
_name = name;
_lock = lock;
_first = NULL;
_last = NULL;
+ _size = 0;
}
const char* name() const { return _name; }
Monitor* lock() const { return _lock; }
void add(CompileTask* task);
+ void remove(CompileTask* task);
+ CompileTask* first() { return _first; }
+ CompileTask* last() { return _last; }
CompileTask* get();
bool is_empty() const { return _first == NULL; }
+ int size() const { return _size; }
void print();
};
+// CompileTaskWrapper
+//
+// Assign this task to the current thread. Deallocate the task
+// when the compilation is complete.
+class CompileTaskWrapper : StackObj {
+public:
+ CompileTaskWrapper(CompileTask* task);
+ ~CompileTaskWrapper();
+};
+
// Compilation
//
@@ -208,7 +226,8 @@
static int _last_compile_level;
static char _last_method_compiled[name_buffer_length];
- static CompileQueue* _method_queue;
+ static CompileQueue* _c2_method_queue;
+ static CompileQueue* _c1_method_queue;
static CompileTask* _task_free_list;
static GrowableArray<CompilerThread*>* _method_threads;
@@ -256,19 +275,9 @@
static int _sum_nmethod_size;
static int _sum_nmethod_code_size;
- static int compiler_count() {
- return CICompilerCountPerCPU
- // Example: if CICompilerCountPerCPU is true, then we get
- // max(log2(8)-1,1) = 2 compiler threads on an 8-way machine.
- // May help big-app startup time.
- ? (MAX2(log2_intptr(os::active_processor_count())-1,1))
- : CICompilerCount;
- }
-
static CompilerThread* make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, TRAPS);
- static void init_compiler_threads(int compiler_count);
+ static void init_compiler_threads(int c1_compiler_count, int c2_compiler_count);
static bool compilation_is_complete (methodHandle method, int osr_bci, int comp_level);
- static bool compilation_is_in_queue (methodHandle method, int osr_bci);
static bool compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level);
static uint assign_compile_id (methodHandle method, int osr_bci);
static bool is_compile_blocking (methodHandle method, int osr_bci);
@@ -301,23 +310,35 @@
int hot_count,
const char* comment,
TRAPS);
-
+ static CompileQueue* compile_queue(int comp_level) {
+ if (is_c2_compile(comp_level)) return _c2_method_queue;
+ if (is_c1_compile(comp_level)) return _c1_method_queue;
+ return NULL;
+ }
public:
enum {
// The entry bci used for non-OSR compilations.
standard_entry_bci = InvocationEntryBci
};
- static AbstractCompiler* compiler(int level ) {
- if (level == CompLevel_fast_compile) return _compilers[0];
- assert(level == CompLevel_highest_tier, "what level?");
- return _compilers[1];
+ static AbstractCompiler* compiler(int comp_level) {
+ if (is_c2_compile(comp_level)) return _compilers[1]; // C2
+ if (is_c1_compile(comp_level)) return _compilers[0]; // C1
+ return NULL;
}
+ static bool compilation_is_in_queue(methodHandle method, int osr_bci);
+ static int queue_size(int comp_level) {
+ CompileQueue *q = compile_queue(comp_level);
+ return q != NULL ? q->size() : 0;
+ }
static void compilation_init();
static void init_compiler_thread_log();
- static nmethod* compile_method(methodHandle method, int osr_bci,
- methodHandle hot_method, int hot_count,
+ static nmethod* compile_method(methodHandle method,
+ int osr_bci,
+ int comp_level,
+ methodHandle hot_method,
+ int hot_count,
const char* comment, TRAPS);
static void compiler_thread_loop();
--- a/hotspot/src/share/vm/includeDB_compiler1 Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/includeDB_compiler1 Fri Sep 03 17:51:07 2010 -0700
@@ -19,7 +19,6 @@
// Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
// or visit www.oracle.com if you need additional information or have any
// questions.
-//
//
// NOTE: DO NOT CHANGE THIS COPYRIGHT TO NEW STYLE - IT WILL BREAK makeDeps!
--- a/hotspot/src/share/vm/includeDB_compiler2 Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/includeDB_compiler2 Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
+// Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This code is free software; you can redistribute it and/or modify it
--- a/hotspot/src/share/vm/includeDB_core Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/includeDB_core Fri Sep 03 17:51:07 2010 -0700
@@ -1081,6 +1081,8 @@
compilationPolicy.cpp nmethod.hpp
compilationPolicy.cpp oop.inline.hpp
compilationPolicy.cpp rframe.hpp
+compilationPolicy.cpp scopeDesc.hpp
+compilationPolicy.cpp simpleThresholdPolicy.hpp
compilationPolicy.cpp stubRoutines.hpp
compilationPolicy.cpp thread.hpp
compilationPolicy.cpp timer.hpp
@@ -1451,6 +1453,7 @@
deoptimization.cpp allocation.inline.hpp
deoptimization.cpp biasedLocking.hpp
deoptimization.cpp bytecode.hpp
+deoptimization.cpp compilationPolicy.hpp
deoptimization.cpp debugInfoRec.hpp
deoptimization.cpp deoptimization.hpp
deoptimization.cpp events.hpp
@@ -2172,6 +2175,7 @@
interpreterRuntime.cpp biasedLocking.hpp
interpreterRuntime.cpp collectedHeap.hpp
+interpreterRuntime.cpp compileBroker.hpp
interpreterRuntime.cpp compilationPolicy.hpp
interpreterRuntime.cpp constantPoolOop.hpp
interpreterRuntime.cpp cpCacheOop.hpp
@@ -2829,6 +2833,7 @@
methodDataOop.cpp bytecode.hpp
methodDataOop.cpp bytecodeStream.hpp
+methodDataOop.cpp compilationPolicy.hpp
methodDataOop.cpp deoptimization.hpp
methodDataOop.cpp handles.inline.hpp
methodDataOop.cpp linkResolver.hpp
@@ -2841,6 +2846,7 @@
methodDataOop.hpp oop.hpp
methodDataOop.hpp orderAccess.hpp
methodDataOop.hpp universe.hpp
+methodDataOop.hpp methodOop.hpp
methodHandleWalk.hpp methodHandles.hpp
@@ -2906,6 +2912,7 @@
methodOop.cpp bytecodeTracer.hpp
methodOop.cpp bytecodes.hpp
methodOop.cpp collectedHeap.inline.hpp
+methodOop.cpp compilationPolicy.hpp
methodOop.cpp debugInfoRec.hpp
methodOop.cpp frame.inline.hpp
methodOop.cpp gcLocker.hpp
@@ -3655,6 +3662,7 @@
safepoint.cpp codeCache.hpp
safepoint.cpp collectedHeap.hpp
+safepoint.cpp compilationPolicy.hpp
safepoint.cpp deoptimization.hpp
safepoint.cpp events.hpp
safepoint.cpp frame.inline.hpp
@@ -3799,6 +3807,17 @@
signature.hpp methodOop.hpp
signature.hpp top.hpp
+simpleThresholdPolicy.cpp arguments.hpp
+simpleThresholdPolicy.cpp compileBroker.hpp
+simpleThresholdPolicy.cpp resourceArea.hpp
+simpleThresholdPolicy.cpp simpleThresholdPolicy.hpp
+simpleThresholdPolicy.cpp simpleThresholdPolicy.inline.hpp
+
+simpleThresholdPolicy.hpp compilationPolicy.hpp
+simpleThresholdPolicy.hpp globalDefinitions.hpp
+simpleThresholdPolicy.hpp methodDataOop.hpp
+simpleThresholdPolicy.hpp nmethod.hpp
+
sizes.cpp sizes.hpp
sizes.hpp allocation.hpp
@@ -3977,6 +3996,7 @@
sweeper.cpp atomic.hpp
sweeper.cpp codeCache.hpp
+sweeper.cpp compilationPolicy.hpp
sweeper.cpp compileBroker.hpp
sweeper.cpp events.hpp
sweeper.cpp methodOop.hpp
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -777,43 +777,6 @@
// Miscellaneous
-#ifndef PRODUCT
-static void trace_frequency_counter_overflow(methodHandle m, int branch_bci, int bci, address branch_bcp) {
- if (TraceInvocationCounterOverflow) {
- InvocationCounter* ic = m->invocation_counter();
- InvocationCounter* bc = m->backedge_counter();
- ResourceMark rm;
- const char* msg =
- branch_bcp == NULL
- ? "comp-policy cntr ovfl @ %d in entry of "
- : "comp-policy cntr ovfl @ %d in loop of ";
- tty->print(msg, bci);
- m->print_value();
- tty->cr();
- ic->print();
- bc->print();
- if (ProfileInterpreter) {
- if (branch_bcp != NULL) {
- methodDataOop mdo = m->method_data();
- if (mdo != NULL) {
- int count = mdo->bci_to_data(branch_bci)->as_JumpData()->taken();
- tty->print_cr("back branch count = %d", count);
- }
- }
- }
- }
-}
-
-static void trace_osr_request(methodHandle method, nmethod* osr, int bci) {
- if (TraceOnStackReplacement) {
- ResourceMark rm;
- tty->print(osr != NULL ? "Reused OSR entry for " : "Requesting OSR entry for ");
- method->print_short_name(tty);
- tty->print_cr(" at bci %d", bci);
- }
-}
-#endif // !PRODUCT
-
nmethod* InterpreterRuntime::frequency_counter_overflow(JavaThread* thread, address branch_bcp) {
nmethod* nm = frequency_counter_overflow_inner(thread, branch_bcp);
assert(branch_bcp != NULL || nm == NULL, "always returns null for non OSR requests");
@@ -826,7 +789,7 @@
frame fr = thread->last_frame();
methodOop method = fr.interpreter_frame_method();
int bci = method->bci_from(fr.interpreter_frame_bcp());
- nm = method->lookup_osr_nmethod_for(bci);
+ nm = method->lookup_osr_nmethod_for(bci, CompLevel_none, false);
}
return nm;
}
@@ -840,74 +803,32 @@
frame fr = thread->last_frame();
assert(fr.is_interpreted_frame(), "must come from interpreter");
methodHandle method(thread, fr.interpreter_frame_method());
- const int branch_bci = branch_bcp != NULL ? method->bci_from(branch_bcp) : 0;
- const int bci = method->bci_from(fr.interpreter_frame_bcp());
- NOT_PRODUCT(trace_frequency_counter_overflow(method, branch_bci, bci, branch_bcp);)
+ const int branch_bci = branch_bcp != NULL ? method->bci_from(branch_bcp) : InvocationEntryBci;
+ const int bci = branch_bcp != NULL ? method->bci_from(fr.interpreter_frame_bcp()) : InvocationEntryBci;
+
+ nmethod* osr_nm = CompilationPolicy::policy()->event(method, method, branch_bci, bci, CompLevel_none, thread);
- if (JvmtiExport::can_post_interpreter_events()) {
- if (thread->is_interp_only_mode()) {
- // If certain JVMTI events (e.g. frame pop event) are requested then the
- // thread is forced to remain in interpreted code. This is
- // implemented partly by a check in the run_compiled_code
- // section of the interpreter whether we should skip running
- // compiled code, and partly by skipping OSR compiles for
- // interpreted-only threads.
- if (branch_bcp != NULL) {
- CompilationPolicy::policy()->reset_counter_for_back_branch_event(method);
- return NULL;
+ if (osr_nm != NULL) {
+ // We may need to do on-stack replacement which requires that no
+ // monitors in the activation are biased because their
+ // BasicObjectLocks will need to migrate during OSR. Force
+ // unbiasing of all monitors in the activation now (even though
+ // the OSR nmethod might be invalidated) because we don't have a
+ // safepoint opportunity later once the migration begins.
+ if (UseBiasedLocking) {
+ ResourceMark rm;
+ GrowableArray<Handle>* objects_to_revoke = new GrowableArray<Handle>();
+ for( BasicObjectLock *kptr = fr.interpreter_frame_monitor_end();
+ kptr < fr.interpreter_frame_monitor_begin();
+ kptr = fr.next_monitor_in_interpreter_frame(kptr) ) {
+ if( kptr->obj() != NULL ) {
+ objects_to_revoke->append(Handle(THREAD, kptr->obj()));
+ }
}
+ BiasedLocking::revoke(objects_to_revoke);
}
}
-
- if (branch_bcp == NULL) {
- // when code cache is full, compilation gets switched off, UseCompiler
- // is set to false
- if (!method->has_compiled_code() && UseCompiler) {
- CompilationPolicy::policy()->method_invocation_event(method, CHECK_NULL);
- } else {
- // Force counter overflow on method entry, even if no compilation
- // happened. (The method_invocation_event call does this also.)
- CompilationPolicy::policy()->reset_counter_for_invocation_event(method);
- }
- // compilation at an invocation overflow no longer goes and retries test for
- // compiled method. We always run the loser of the race as interpreted.
- // so return NULL
- return NULL;
- } else {
- // counter overflow in a loop => try to do on-stack-replacement
- nmethod* osr_nm = method->lookup_osr_nmethod_for(bci);
- NOT_PRODUCT(trace_osr_request(method, osr_nm, bci);)
- // when code cache is full, we should not compile any more...
- if (osr_nm == NULL && UseCompiler) {
- const int branch_bci = method->bci_from(branch_bcp);
- CompilationPolicy::policy()->method_back_branch_event(method, branch_bci, bci, CHECK_NULL);
- osr_nm = method->lookup_osr_nmethod_for(bci);
- }
- if (osr_nm == NULL) {
- CompilationPolicy::policy()->reset_counter_for_back_branch_event(method);
- return NULL;
- } else {
- // We may need to do on-stack replacement which requires that no
- // monitors in the activation are biased because their
- // BasicObjectLocks will need to migrate during OSR. Force
- // unbiasing of all monitors in the activation now (even though
- // the OSR nmethod might be invalidated) because we don't have a
- // safepoint opportunity later once the migration begins.
- if (UseBiasedLocking) {
- ResourceMark rm;
- GrowableArray<Handle>* objects_to_revoke = new GrowableArray<Handle>();
- for( BasicObjectLock *kptr = fr.interpreter_frame_monitor_end();
- kptr < fr.interpreter_frame_monitor_begin();
- kptr = fr.next_monitor_in_interpreter_frame(kptr) ) {
- if( kptr->obj() != NULL ) {
- objects_to_revoke->append(Handle(THREAD, kptr->obj()));
- }
- }
- BiasedLocking::revoke(objects_to_revoke);
- }
- return osr_nm;
- }
- }
+ return osr_nm;
IRT_END
IRT_LEAF(jint, InterpreterRuntime::bcp_to_di(methodOopDesc* method, address cur_bcp))
--- a/hotspot/src/share/vm/interpreter/invocationCounter.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/interpreter/invocationCounter.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -40,8 +40,7 @@
}
void InvocationCounter::set_carry() {
- _counter |= carry_mask;
-
+ set_carry_flag();
// The carry bit now indicates that this counter had achieved a very
// large value. Now reduce the value, so that the method can be
// executed many more times before re-entering the VM.
@@ -52,7 +51,6 @@
if (old_count != new_count) set(state(), new_count);
}
-
void InvocationCounter::set_state(State state) {
assert(0 <= state && state < number_of_states, "illegal state");
int init = _init[state];
@@ -82,11 +80,6 @@
int InvocationCounter::InterpreterBackwardBranchLimit;
int InvocationCounter::InterpreterProfileLimit;
-// Tier1 limits
-int InvocationCounter::Tier1InvocationLimit;
-int InvocationCounter::Tier1BackEdgeLimit;
-
-
const char* InvocationCounter::state_as_string(State state) {
switch (state) {
@@ -146,8 +139,6 @@
InterpreterInvocationLimit = CompileThreshold << number_of_noncount_bits;
InterpreterProfileLimit = ((CompileThreshold * InterpreterProfilePercentage) / 100)<< number_of_noncount_bits;
- Tier1InvocationLimit = Tier2CompileThreshold << number_of_noncount_bits;
- Tier1BackEdgeLimit = Tier2BackEdgeThreshold << number_of_noncount_bits;
// When methodData is collected, the backward branch limit is compared against a
// methodData counter, rather than an InvocationCounter. In the former case, we
--- a/hotspot/src/share/vm/interpreter/invocationCounter.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/interpreter/invocationCounter.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,6 @@
number_of_count_bits = BitsPerInt - number_of_noncount_bits,
state_limit = nth_bit(number_of_state_bits),
count_grain = nth_bit(number_of_state_bits + number_of_carry_bits),
- count_limit = nth_bit(number_of_count_bits - 1),
carry_mask = right_n_bits(number_of_carry_bits) << number_of_state_bits,
state_mask = right_n_bits(number_of_state_bits),
status_mask = right_n_bits(number_of_state_bits + number_of_carry_bits),
@@ -52,18 +51,16 @@
public:
static int InterpreterInvocationLimit; // CompileThreshold scaled for interpreter use
- static int Tier1InvocationLimit; // CompileThreshold scaled for tier1 use
- static int Tier1BackEdgeLimit; // BackEdgeThreshold scaled for tier1 use
-
static int InterpreterBackwardBranchLimit; // A separate threshold for on stack replacement
-
static int InterpreterProfileLimit; // Profiling threshold scaled for interpreter use
typedef address (*Action)(methodHandle method, TRAPS);
enum PublicConstants {
count_increment = count_grain, // use this value to increment the 32bit _counter word
- count_mask_value = count_mask // use this value to mask the backedge counter
+ count_mask_value = count_mask, // use this value to mask the backedge counter
+ count_shift = number_of_noncount_bits,
+ count_limit = nth_bit(number_of_count_bits - 1)
};
enum State {
@@ -79,6 +76,7 @@
inline void set(State state, int count); // sets state and counter
inline void decay(); // decay counter (divide by two)
void set_carry(); // set the sticky carry bit
+ void set_carry_flag() { _counter |= carry_mask; }
// Accessors
State state() const { return (State)(_counter & state_mask); }
@@ -135,3 +133,4 @@
if (c > 0 && new_count == 0) new_count = 1;
set(state(), new_count);
}
+
--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -83,12 +83,12 @@
_resolved_method = resolved_method;
_selected_method = selected_method;
_vtable_index = vtable_index;
- if (CompilationPolicy::mustBeCompiled(selected_method)) {
+ if (CompilationPolicy::must_be_compiled(selected_method)) {
// This path is unusual, mostly used by the '-Xcomp' stress test mode.
- // Note: with several active threads, the mustBeCompiled may be true
- // while canBeCompiled is false; remove assert
- // assert(CompilationPolicy::canBeCompiled(selected_method), "cannot compile");
+ // Note: with several active threads, the must_be_compiled may be true
+ // while can_be_compiled is false; remove assert
+ // assert(CompilationPolicy::can_be_compiled(selected_method), "cannot compile");
if (THREAD->is_Compiler_thread()) {
// don't force compilation, resolve was on behalf of compiler
return;
@@ -104,7 +104,8 @@
return;
}
CompileBroker::compile_method(selected_method, InvocationEntryBci,
- methodHandle(), 0, "mustBeCompiled", CHECK);
+ CompLevel_initial_compile,
+ methodHandle(), 0, "must_be_compiled", CHECK);
}
}
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -2200,8 +2200,23 @@
assert(n->is_osr_method(), "wrong kind of nmethod");
n->set_osr_link(osr_nmethods_head());
set_osr_nmethods_head(n);
+ // Raise the highest osr level if necessary
+ if (TieredCompilation) {
+ methodOop m = n->method();
+ m->set_highest_osr_comp_level(MAX2(m->highest_osr_comp_level(), n->comp_level()));
+ }
// Remember to unlock again
OsrList_lock->unlock();
+
+ // Get rid of the osr methods for the same bci that have lower levels.
+ if (TieredCompilation) {
+ for (int l = CompLevel_limited_profile; l < n->comp_level(); l++) {
+ nmethod *inv = lookup_osr_nmethod(n->method(), n->osr_entry_bci(), l, true);
+ if (inv != NULL && inv->is_in_use()) {
+ inv->make_not_entrant();
+ }
+ }
+ }
}
@@ -2211,39 +2226,79 @@
assert(n->is_osr_method(), "wrong kind of nmethod");
nmethod* last = NULL;
nmethod* cur = osr_nmethods_head();
+ int max_level = CompLevel_none; // Find the max comp level excluding n
+ methodOop m = n->method();
// Search for match
while(cur != NULL && cur != n) {
+ if (TieredCompilation) {
+ // Find max level before n
+ max_level = MAX2(max_level, cur->comp_level());
+ }
last = cur;
cur = cur->osr_link();
}
+ nmethod* next = NULL;
if (cur == n) {
+ next = cur->osr_link();
if (last == NULL) {
// Remove first element
- set_osr_nmethods_head(osr_nmethods_head()->osr_link());
+ set_osr_nmethods_head(next);
} else {
- last->set_osr_link(cur->osr_link());
+ last->set_osr_link(next);
}
}
n->set_osr_link(NULL);
+ if (TieredCompilation) {
+ cur = next;
+ while (cur != NULL) {
+ // Find max level after n
+ max_level = MAX2(max_level, cur->comp_level());
+ cur = cur->osr_link();
+ }
+ m->set_highest_osr_comp_level(max_level);
+ }
// Remember to unlock again
OsrList_lock->unlock();
}
-nmethod* instanceKlass::lookup_osr_nmethod(const methodOop m, int bci) const {
+nmethod* instanceKlass::lookup_osr_nmethod(const methodOop m, int bci, int comp_level, bool match_level) const {
// This is a short non-blocking critical region, so the no safepoint check is ok.
OsrList_lock->lock_without_safepoint_check();
nmethod* osr = osr_nmethods_head();
+ nmethod* best = NULL;
while (osr != NULL) {
assert(osr->is_osr_method(), "wrong kind of nmethod found in chain");
+ // There can be a time when a c1 osr method exists but we are waiting
+ // for a c2 version. When c2 completes its osr nmethod we will trash
+ // the c1 version and only be able to find the c2 version. However
+ // while we overflow in the c1 code at back branches we don't want to
+ // try and switch to the same code as we are already running
+
if (osr->method() == m &&
(bci == InvocationEntryBci || osr->osr_entry_bci() == bci)) {
- // Found a match - return it.
- OsrList_lock->unlock();
- return osr;
+ if (match_level) {
+ if (osr->comp_level() == comp_level) {
+ // Found a match - return it.
+ OsrList_lock->unlock();
+ return osr;
+ }
+ } else {
+ if (best == NULL || (osr->comp_level() > best->comp_level())) {
+ if (osr->comp_level() == CompLevel_highest_tier) {
+ // Found the best possible - return it.
+ OsrList_lock->unlock();
+ return osr;
+ }
+ best = osr;
+ }
+ }
}
osr = osr->osr_link();
}
OsrList_lock->unlock();
+ if (best != NULL && best->comp_level() >= comp_level && match_level == false) {
+ return best;
+ }
return NULL;
}
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -588,7 +588,7 @@
void set_osr_nmethods_head(nmethod* h) { _osr_nmethods_head = h; };
void add_osr_nmethod(nmethod* n);
void remove_osr_nmethod(nmethod* n);
- nmethod* lookup_osr_nmethod(const methodOop m, int bci) const;
+ nmethod* lookup_osr_nmethod(const methodOop m, int bci, int level, bool match_level) const;
// Breakpoint support (see methods on methodOop for details)
BreakpointInfo* breakpoints() const { return _breakpoints; };
--- a/hotspot/src/share/vm/oops/methodDataOop.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/oops/methodDataOop.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -283,11 +283,17 @@
if (receiver(row) != NULL) entries++;
}
st->print_cr("count(%u) entries(%u)", count(), entries);
+ int total = count();
+ for (row = 0; row < row_limit(); row++) {
+ if (receiver(row) != NULL) {
+ total += receiver_count(row);
+ }
+ }
for (row = 0; row < row_limit(); row++) {
if (receiver(row) != NULL) {
tab(st);
receiver(row)->print_value_on(st);
- st->print_cr("(%u)", receiver_count(row));
+ st->print_cr("(%u %4.2f)", receiver_count(row), (float) receiver_count(row) / (float) total);
}
}
}
@@ -743,9 +749,18 @@
// Initialize the methodDataOop corresponding to a given method.
void methodDataOopDesc::initialize(methodHandle method) {
ResourceMark rm;
-
// Set the method back-pointer.
_method = method();
+
+ if (TieredCompilation) {
+ _invocation_counter.init();
+ _backedge_counter.init();
+ _num_loops = 0;
+ _num_blocks = 0;
+ _highest_comp_level = 0;
+ _highest_osr_comp_level = 0;
+ _would_profile = false;
+ }
set_creation_mileage(mileage_of(method()));
// Initialize flags and trap history.
@@ -798,32 +813,25 @@
// Get a measure of how much mileage the method has on it.
int methodDataOopDesc::mileage_of(methodOop method) {
int mileage = 0;
- int iic = method->interpreter_invocation_count();
- if (mileage < iic) mileage = iic;
-
- InvocationCounter* ic = method->invocation_counter();
- InvocationCounter* bc = method->backedge_counter();
-
- int icval = ic->count();
- if (ic->carry()) icval += CompileThreshold;
- if (mileage < icval) mileage = icval;
- int bcval = bc->count();
- if (bc->carry()) bcval += CompileThreshold;
- if (mileage < bcval) mileage = bcval;
+ if (TieredCompilation) {
+ mileage = MAX2(method->invocation_count(), method->backedge_count());
+ } else {
+ int iic = method->interpreter_invocation_count();
+ if (mileage < iic) mileage = iic;
+ InvocationCounter* ic = method->invocation_counter();
+ InvocationCounter* bc = method->backedge_counter();
+ int icval = ic->count();
+ if (ic->carry()) icval += CompileThreshold;
+ if (mileage < icval) mileage = icval;
+ int bcval = bc->count();
+ if (bc->carry()) bcval += CompileThreshold;
+ if (mileage < bcval) mileage = bcval;
+ }
return mileage;
}
bool methodDataOopDesc::is_mature() const {
- uint current = mileage_of(_method);
- uint initial = creation_mileage();
- if (current < initial)
- return true; // some sort of overflow
- uint target;
- if (ProfileMaturityPercentage <= 0)
- target = (uint) -ProfileMaturityPercentage; // absolute value
- else
- target = (uint)( (ProfileMaturityPercentage * CompileThreshold) / 100 );
- return (current >= initial + target);
+ return CompilationPolicy::policy()->is_mature(_method);
}
// Translate a bci to its corresponding data index (di).
--- a/hotspot/src/share/vm/oops/methodDataOop.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/oops/methodDataOop.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1206,7 +1206,25 @@
intx _arg_stack; // bit set of stack-allocatable arguments
intx _arg_returned; // bit set of returned arguments
- int _creation_mileage; // method mileage at MDO creation
+ int _creation_mileage; // method mileage at MDO creation
+
+ // How many invocations has this MDO seen?
+ // These counters are used to determine the exact age of MDO.
+ // We need those because in tiered a method can be concurrently
+ // executed at different levels.
+ InvocationCounter _invocation_counter;
+ // Same for backedges.
+ InvocationCounter _backedge_counter;
+ // Number of loops and blocks is computed when compiling the first
+ // time with C1. It is used to determine if method is trivial.
+ short _num_loops;
+ short _num_blocks;
+ // Highest compile level this method has ever seen.
+ u1 _highest_comp_level;
+ // Same for OSR level
+ u1 _highest_osr_comp_level;
+ // Does this method contain anything worth profiling?
+ bool _would_profile;
// Size of _data array in bytes. (Excludes header and extra_data fields.)
int _data_size;
@@ -1292,6 +1310,36 @@
int creation_mileage() const { return _creation_mileage; }
void set_creation_mileage(int x) { _creation_mileage = x; }
+
+ int invocation_count() {
+ if (invocation_counter()->carry()) {
+ return InvocationCounter::count_limit;
+ }
+ return invocation_counter()->count();
+ }
+ int backedge_count() {
+ if (backedge_counter()->carry()) {
+ return InvocationCounter::count_limit;
+ }
+ return backedge_counter()->count();
+ }
+
+ InvocationCounter* invocation_counter() { return &_invocation_counter; }
+ InvocationCounter* backedge_counter() { return &_backedge_counter; }
+
+ void set_would_profile(bool p) { _would_profile = p; }
+ bool would_profile() const { return _would_profile; }
+
+ int highest_comp_level() { return _highest_comp_level; }
+ void set_highest_comp_level(int level) { _highest_comp_level = level; }
+ int highest_osr_comp_level() { return _highest_osr_comp_level; }
+ void set_highest_osr_comp_level(int level) { _highest_osr_comp_level = level; }
+
+ int num_loops() const { return _num_loops; }
+ void set_num_loops(int n) { _num_loops = n; }
+ int num_blocks() const { return _num_blocks; }
+ void set_num_blocks(int n) { _num_blocks = n; }
+
bool is_mature() const; // consult mileage and ProfileMaturityPercentage
static int mileage_of(methodOop m);
@@ -1413,7 +1461,7 @@
void inc_decompile_count() {
_nof_decompiles += 1;
if (decompile_count() > (uint)PerMethodRecompilationCutoff) {
- method()->set_not_compilable();
+ method()->set_not_compilable(CompLevel_full_optimization);
}
}
@@ -1422,6 +1470,13 @@
return byte_offset_of(methodDataOopDesc, _data[0]);
}
+ static ByteSize invocation_counter_offset() {
+ return byte_offset_of(methodDataOopDesc, _invocation_counter);
+ }
+ static ByteSize backedge_counter_offset() {
+ return byte_offset_of(methodDataOopDesc, _backedge_counter);
+ }
+
// GC support
oop* adr_method() const { return (oop*)&_method; }
bool object_is_parsable() const { return _size != 0; }
--- a/hotspot/src/share/vm/oops/methodKlass.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/oops/methodKlass.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -75,7 +75,6 @@
// Fix and bury in methodOop
m->set_interpreter_entry(NULL); // sets i2i entry and from_int
- m->set_highest_tier_compile(CompLevel_none);
m->set_adapter_entry(NULL);
m->clear_code(); // from_c/from_i get set to c2i/i2i
@@ -89,6 +88,7 @@
m->invocation_counter()->init();
m->backedge_counter()->init();
m->clear_number_of_breakpoints();
+
assert(m->is_parsable(), "must be parsable here.");
assert(m->size() == size, "wrong size for object");
// We should not publish an uprasable object's reference
@@ -246,8 +246,8 @@
st->print_cr(" - method size: %d", m->method_size());
if (m->intrinsic_id() != vmIntrinsics::_none)
st->print_cr(" - intrinsic id: %d %s", m->intrinsic_id(), vmIntrinsics::name_at(m->intrinsic_id()));
- if (m->highest_tier_compile() != CompLevel_none)
- st->print_cr(" - highest tier: %d", m->highest_tier_compile());
+ if (m->highest_comp_level() != CompLevel_none)
+ st->print_cr(" - highest level: %d", m->highest_comp_level());
st->print_cr(" - vtable index: %d", m->_vtable_index);
st->print_cr(" - i2i entry: " INTPTR_FORMAT, m->interpreter_entry());
st->print_cr(" - adapter: " INTPTR_FORMAT, m->adapter());
--- a/hotspot/src/share/vm/oops/methodOop.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/oops/methodOop.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -233,7 +233,7 @@
}
-bool methodOopDesc::was_executed_more_than(int n) const {
+bool methodOopDesc::was_executed_more_than(int n) {
// Invocation counter is reset when the methodOop is compiled.
// If the method has compiled code we therefore assume it has
// be excuted more than n times.
@@ -241,7 +241,8 @@
// interpreter doesn't bump invocation counter of trivial methods
// compiler does not bump invocation counter of compiled methods
return true;
- } else if (_invocation_counter.carry()) {
+ }
+ else if (_invocation_counter.carry() || (method_data() != NULL && method_data()->invocation_counter()->carry())) {
// The carry bit is set when the counter overflows and causes
// a compilation to occur. We don't know how many times
// the counter has been reset, so we simply assume it has
@@ -253,7 +254,7 @@
}
#ifndef PRODUCT
-void methodOopDesc::print_invocation_count() const {
+void methodOopDesc::print_invocation_count() {
if (is_static()) tty->print("static ");
if (is_final()) tty->print("final ");
if (is_synchronized()) tty->print("synchronized ");
@@ -574,16 +575,19 @@
// compilers must recognize this method specially, or not at all
return true;
}
-
-#ifdef COMPILER2
- if (is_tier1_compile(comp_level)) {
- if (is_not_tier1_compilable()) {
- return true;
- }
+ if (number_of_breakpoints() > 0) {
+ return true;
+ }
+ if (comp_level == CompLevel_any) {
+ return is_not_c1_compilable() || is_not_c2_compilable();
}
-#endif // COMPILER2
- return (_invocation_counter.state() == InvocationCounter::wait_for_nothing)
- || (number_of_breakpoints() > 0);
+ if (is_c1_compile(comp_level)) {
+ return is_not_c1_compilable();
+ }
+ if (is_c2_compile(comp_level)) {
+ return is_not_c2_compilable();
+ }
+ return false;
}
// call this when compiler finds that this method is not compilable
@@ -604,15 +608,18 @@
xtty->stamp();
xtty->end_elem();
}
-#ifdef COMPILER2
- if (is_tier1_compile(comp_level)) {
- set_not_tier1_compilable();
- return;
+ if (comp_level == CompLevel_all) {
+ set_not_c1_compilable();
+ set_not_c2_compilable();
+ } else {
+ if (is_c1_compile(comp_level)) {
+ set_not_c1_compilable();
+ } else
+ if (is_c2_compile(comp_level)) {
+ set_not_c2_compilable();
+ }
}
-#endif /* COMPILER2 */
- assert(comp_level == CompLevel_highest_tier, "unexpected compilation level");
- invocation_counter()->set_state(InvocationCounter::wait_for_nothing);
- backedge_counter()->set_state(InvocationCounter::wait_for_nothing);
+ CompilationPolicy::policy()->disable_compilation(this);
}
// Revert to using the interpreter and clear out the nmethod
@@ -649,7 +656,6 @@
set_method_data(NULL);
set_interpreter_throwout_count(0);
set_interpreter_invocation_count(0);
- _highest_tier_compile = CompLevel_none;
}
// Called when the method_holder is getting linked. Setup entrypoints so the method
@@ -746,8 +752,8 @@
int comp_level = code->comp_level();
// In theory there could be a race here. In practice it is unlikely
// and not worth worrying about.
- if (comp_level > mh->highest_tier_compile()) {
- mh->set_highest_tier_compile(comp_level);
+ if (comp_level > mh->highest_comp_level()) {
+ mh->set_highest_comp_level(comp_level);
}
OrderAccess::storestore();
@@ -1442,6 +1448,64 @@
}
+int methodOopDesc::invocation_count() {
+ if (TieredCompilation) {
+ const methodDataOop mdo = method_data();
+ if (invocation_counter()->carry() || ((mdo != NULL) ? mdo->invocation_counter()->carry() : false)) {
+ return InvocationCounter::count_limit;
+ } else {
+ return invocation_counter()->count() + ((mdo != NULL) ? mdo->invocation_counter()->count() : 0);
+ }
+ } else {
+ return invocation_counter()->count();
+ }
+}
+
+int methodOopDesc::backedge_count() {
+ if (TieredCompilation) {
+ const methodDataOop mdo = method_data();
+ if (backedge_counter()->carry() || ((mdo != NULL) ? mdo->backedge_counter()->carry() : false)) {
+ return InvocationCounter::count_limit;
+ } else {
+ return backedge_counter()->count() + ((mdo != NULL) ? mdo->backedge_counter()->count() : 0);
+ }
+ } else {
+ return backedge_counter()->count();
+ }
+}
+
+int methodOopDesc::highest_comp_level() const {
+ methodDataOop mdo = method_data();
+ if (mdo != NULL) {
+ return mdo->highest_comp_level();
+ } else {
+ return CompLevel_none;
+ }
+}
+
+int methodOopDesc::highest_osr_comp_level() const {
+ methodDataOop mdo = method_data();
+ if (mdo != NULL) {
+ return mdo->highest_osr_comp_level();
+ } else {
+ return CompLevel_none;
+ }
+}
+
+void methodOopDesc::set_highest_comp_level(int level) {
+ methodDataOop mdo = method_data();
+ if (mdo != NULL) {
+ mdo->set_highest_comp_level(level);
+ }
+}
+
+void methodOopDesc::set_highest_osr_comp_level(int level) {
+ methodDataOop mdo = method_data();
+ if (mdo != NULL) {
+ mdo->set_highest_osr_comp_level(level);
+ }
+}
+
BreakpointInfo::BreakpointInfo(methodOop m, int bci) {
_bci = bci;
_name_index = m->name_index();
--- a/hotspot/src/share/vm/oops/methodOop.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/oops/methodOop.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -62,9 +62,9 @@
// | method_size | max_stack |
// | max_locals | size_of_parameters |
// |------------------------------------------------------|
-// | intrinsic_id, highest_tier | (unused) |
+// | intrinsic_id, (unused) | throwout_count |
// |------------------------------------------------------|
-// | throwout_count | num_breakpoints |
+// | num_breakpoints | (unused) |
// |------------------------------------------------------|
// | invocation_counter |
// | backedge_counter |
@@ -83,7 +83,6 @@
class CheckedExceptionElement;
class LocalVariableTableElement;
class AdapterHandlerEntry;
-
class methodDataOopDesc;
class methodOopDesc : public oopDesc {
@@ -93,7 +92,7 @@
constMethodOop _constMethod; // Method read-only data.
constantPoolOop _constants; // Constant pool
methodDataOop _method_data;
- int _interpreter_invocation_count; // Count of times invoked
+ int _interpreter_invocation_count; // Count of times invoked (reused as prev_event_count in tiered)
AccessFlags _access_flags; // Access flags
int _vtable_index; // vtable index of this method (see VtableIndexFlag)
// note: can have vtables with >2**16 elements (because of inheritance)
@@ -105,11 +104,11 @@
u2 _max_locals; // Number of local variables used by this method
u2 _size_of_parameters; // size of the parameter block (receiver + arguments) in words
u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none)
- u1 _highest_tier_compile; // Highest compile level this method has ever seen.
u2 _interpreter_throwout_count; // Count of times method was exited via exception while interpreting
u2 _number_of_breakpoints; // fullspeed debugging support
InvocationCounter _invocation_counter; // Incremented before each activation of the method - used to trigger frequency-based optimizations
InvocationCounter _backedge_counter; // Incremented before each backedge taken - used to trigger frequencey-based optimizations
+
#ifndef PRODUCT
int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging)
#endif
@@ -221,8 +220,11 @@
// max locals
int max_locals() const { return _max_locals; }
void set_max_locals(int size) { _max_locals = size; }
- int highest_tier_compile() { return _highest_tier_compile;}
- void set_highest_tier_compile(int level) { _highest_tier_compile = level;}
+
+ int highest_comp_level() const;
+ void set_highest_comp_level(int level);
+ int highest_osr_comp_level() const;
+ void set_highest_osr_comp_level(int level);
// Count of times method was exited via exception while interpreting
void interpreter_throwout_increment() {
@@ -276,21 +278,29 @@
}
// invocation counter
- InvocationCounter* invocation_counter() { return &_invocation_counter; }
- InvocationCounter* backedge_counter() { return &_backedge_counter; }
- int invocation_count() const { return _invocation_counter.count(); }
- int backedge_count() const { return _backedge_counter.count(); }
- bool was_executed_more_than(int n) const;
- bool was_never_executed() const { return !was_executed_more_than(0); }
+ InvocationCounter* invocation_counter() { return &_invocation_counter; }
+ InvocationCounter* backedge_counter() { return &_backedge_counter; }
+
+ int invocation_count();
+ int backedge_count();
+
+ bool was_executed_more_than(int n);
+ bool was_never_executed() { return !was_executed_more_than(0); }
static void build_interpreter_method_data(methodHandle method, TRAPS);
- int interpreter_invocation_count() const { return _interpreter_invocation_count; }
+ int interpreter_invocation_count() {
+ if (TieredCompilation) return invocation_count();
+ else return _interpreter_invocation_count;
+ }
void set_interpreter_invocation_count(int count) { _interpreter_invocation_count = count; }
- int increment_interpreter_invocation_count() { return ++_interpreter_invocation_count; }
+ int increment_interpreter_invocation_count() {
+ if (TieredCompilation) ShouldNotReachHere();
+ return ++_interpreter_invocation_count;
+ }
#ifndef PRODUCT
- int compiled_invocation_count() const { return _compiled_invocation_count; }
+ int compiled_invocation_count() const { return _compiled_invocation_count; }
void set_compiled_invocation_count(int count) { _compiled_invocation_count = count; }
#endif // not PRODUCT
@@ -361,7 +371,7 @@
#ifndef PRODUCT
// operations on invocation counter
- void print_invocation_count() const;
+ void print_invocation_count();
#endif
// byte codes
@@ -587,8 +597,13 @@
static vmSymbols::SID klass_id_for_intrinsics(klassOop holder);
// On-stack replacement support
- bool has_osr_nmethod() { return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, InvocationEntryBci) != NULL; }
- nmethod* lookup_osr_nmethod_for(int bci) { return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, bci); }
+ bool has_osr_nmethod(int level, bool match_level) {
+ return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL;
+ }
+
+ nmethod* lookup_osr_nmethod_for(int bci, int level, bool match_level) {
+ return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, bci, level, match_level);
+ }
// Inline cache support
void cleanup_inline_caches();
@@ -600,22 +615,24 @@
// Indicates whether compilation failed earlier for this method, or
// whether it is not compilable for another reason like having a
// breakpoint set in it.
- bool is_not_compilable(int comp_level = CompLevel_highest_tier) const;
- void set_not_compilable(int comp_level = CompLevel_highest_tier, bool report = true);
- void set_not_compilable_quietly(int comp_level = CompLevel_highest_tier) {
+ bool is_not_compilable(int comp_level = CompLevel_any) const;
+ void set_not_compilable(int comp_level = CompLevel_all, bool report = true);
+ void set_not_compilable_quietly(int comp_level = CompLevel_all) {
set_not_compilable(comp_level, false);
}
-
- bool is_not_osr_compilable() const { return is_not_compilable() || access_flags().is_not_osr_compilable(); }
- void set_not_osr_compilable() { _access_flags.set_not_osr_compilable(); }
-
- bool is_not_tier1_compilable() const { return access_flags().is_not_tier1_compilable(); }
- void set_not_tier1_compilable() { _access_flags.set_not_tier1_compilable(); }
+ bool is_not_osr_compilable(int comp_level = CompLevel_any) const {
+ return is_not_compilable(comp_level) || access_flags().is_not_osr_compilable();
+ }
+ void set_not_osr_compilable() { _access_flags.set_not_osr_compilable(); }
+ bool is_not_c1_compilable() const { return access_flags().is_not_c1_compilable(); }
+ void set_not_c1_compilable() { _access_flags.set_not_c1_compilable(); }
+ bool is_not_c2_compilable() const { return access_flags().is_not_c2_compilable(); }
+ void set_not_c2_compilable() { _access_flags.set_not_c2_compilable(); }
// Background compilation support
- bool queued_for_compilation() const { return access_flags().queued_for_compilation(); }
- void set_queued_for_compilation() { _access_flags.set_queued_for_compilation(); }
- void clear_queued_for_compilation() { _access_flags.clear_queued_for_compilation(); }
+ bool queued_for_compilation() const { return access_flags().queued_for_compilation(); }
+ void set_queued_for_compilation() { _access_flags.set_queued_for_compilation(); }
+ void clear_queued_for_compilation() { _access_flags.clear_queued_for_compilation(); }
static methodOop method_from_bcp(address bcp);
--- a/hotspot/src/share/vm/opto/bytecodeInfo.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/opto/bytecodeInfo.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -140,7 +140,7 @@
} else {
// Not hot. Check for medium-sized pre-existing nmethod at cold sites.
if (callee_method->has_compiled_code() &&
- callee_method->instructions_size() > InlineSmallCode/4)
+ callee_method->instructions_size(CompLevel_full_optimization) > InlineSmallCode/4)
return "already compiled into a medium method";
}
if (size > max_size) {
@@ -180,7 +180,7 @@
}
}
- if (callee_method->has_compiled_code() && callee_method->instructions_size() > InlineSmallCode) {
+ if (callee_method->has_compiled_code() && callee_method->instructions_size(CompLevel_full_optimization) > InlineSmallCode) {
wci_result->set_profit(wci_result->profit() * 0.1);
// %%% adjust wci_result->size()?
}
@@ -206,7 +206,7 @@
// Now perform checks which are heuristic
- if( callee_method->has_compiled_code() && callee_method->instructions_size() > InlineSmallCode )
+ if( callee_method->has_compiled_code() && callee_method->instructions_size(CompLevel_full_optimization) > InlineSmallCode )
return "already compiled into a big method";
// don't inline exception code unless the top method belongs to an
--- a/hotspot/src/share/vm/opto/compile.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/opto/compile.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -850,25 +850,13 @@
set_decompile_count(0);
set_do_freq_based_layout(BlockLayoutByFrequency || method_has_option("BlockLayoutByFrequency"));
- // Compilation level related initialization
- if (env()->comp_level() == CompLevel_fast_compile) {
- set_num_loop_opts(Tier1LoopOptsCount);
- set_do_inlining(Tier1Inline != 0);
- set_max_inline_size(Tier1MaxInlineSize);
- set_freq_inline_size(Tier1FreqInlineSize);
- set_do_scheduling(false);
- set_do_count_invocations(Tier1CountInvocations);
- set_do_method_data_update(Tier1UpdateMethodData);
- } else {
- assert(env()->comp_level() == CompLevel_full_optimization, "unknown comp level");
- set_num_loop_opts(LoopOptsCount);
- set_do_inlining(Inline);
- set_max_inline_size(MaxInlineSize);
- set_freq_inline_size(FreqInlineSize);
- set_do_scheduling(OptoScheduling);
- set_do_count_invocations(false);
- set_do_method_data_update(false);
- }
+ set_num_loop_opts(LoopOptsCount);
+ set_do_inlining(Inline);
+ set_max_inline_size(MaxInlineSize);
+ set_freq_inline_size(FreqInlineSize);
+ set_do_scheduling(OptoScheduling);
+ set_do_count_invocations(false);
+ set_do_method_data_update(false);
if (debug_info()->recording_non_safepoints()) {
set_node_note_array(new(comp_arena()) GrowableArray<Node_Notes*>
--- a/hotspot/src/share/vm/prims/methodHandleWalk.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/prims/methodHandleWalk.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -979,7 +979,7 @@
// Inline the method.
InvocationCounter* ic = m->invocation_counter();
- ic->set_carry();
+ ic->set_carry_flag();
for (int i = 0; i < argc; i++) {
ArgToken arg = argv[i];
@@ -1209,7 +1209,7 @@
// Set the carry bit of the invocation counter to force inlining of
// the adapter.
InvocationCounter* ic = m->invocation_counter();
- ic->set_carry();
+ ic->set_carry_flag();
// Rewrite the method and set up the constant pool cache.
objArrayOop m_array = oopFactory::new_system_objArray(1, CHECK_(nullHandle));
--- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -50,7 +50,6 @@
bool Arguments::_UseOnStackReplacement = UseOnStackReplacement;
bool Arguments::_BackgroundCompilation = BackgroundCompilation;
bool Arguments::_ClipInlining = ClipInlining;
-intx Arguments::_Tier2CompileThreshold = Tier2CompileThreshold;
char* Arguments::SharedArchivePath = NULL;
@@ -913,7 +912,6 @@
AlwaysCompileLoopMethods = Arguments::_AlwaysCompileLoopMethods;
UseOnStackReplacement = Arguments::_UseOnStackReplacement;
BackgroundCompilation = Arguments::_BackgroundCompilation;
- Tier2CompileThreshold = Arguments::_Tier2CompileThreshold;
// Change from defaults based on mode
switch (mode) {
@@ -950,6 +948,31 @@
}
}
+void Arguments::set_tiered_flags() {
+ if (FLAG_IS_DEFAULT(CompilationPolicyChoice)) {
+ FLAG_SET_DEFAULT(CompilationPolicyChoice, 2);
+ }
+
+ if (CompilationPolicyChoice < 2) {
+ vm_exit_during_initialization(
+ "Incompatible compilation policy selected", NULL);
+ }
+
+#ifdef _LP64
+ if (FLAG_IS_DEFAULT(UseCompressedOops) || FLAG_IS_ERGO(UseCompressedOops)) {
+ UseCompressedOops = false;
+ }
+ if (UseCompressedOops) {
+ vm_exit_during_initialization(
+ "Tiered compilation is not supported with compressed oops yet", NULL);
+ }
+#endif
+ // Increase the code cache size - tiered compiles a lot more.
+ if (FLAG_IS_DEFAULT(ReservedCodeCacheSize)) {
+ FLAG_SET_DEFAULT(ReservedCodeCacheSize, ReservedCodeCacheSize * 2);
+ }
+}
+
#ifndef KERNEL
// If the user has chosen ParallelGCThreads > 0, we set UseParNewGC
// if it's not explictly set or unset. If the user has chosen
@@ -1299,7 +1322,7 @@
// Check that UseCompressedOops can be set with the max heap size allocated
// by ergonomics.
if (MaxHeapSize <= max_heap_for_compressed_oops()) {
-#ifndef COMPILER1
+#if !defined(COMPILER1) || defined(TIERED)
if (FLAG_IS_DEFAULT(UseCompressedOops) && !UseG1GC) {
FLAG_SET_ERGO(bool, UseCompressedOops, true);
}
@@ -1933,7 +1956,6 @@
Arguments::_UseOnStackReplacement = UseOnStackReplacement;
Arguments::_ClipInlining = ClipInlining;
Arguments::_BackgroundCompilation = BackgroundCompilation;
- Arguments::_Tier2CompileThreshold = Tier2CompileThreshold;
// Parse JAVA_TOOL_OPTIONS environment variable (if present)
jint result = parse_java_tool_options_environment_variable(&scp, &scp_assembly_required);
@@ -2651,23 +2673,6 @@
set_mode_flags(_int);
}
-#ifdef TIERED
- // If we are using tiered compilation in the tiered vm then c1 will
- // do the profiling and we don't want to waste that time in the
- // interpreter.
- if (TieredCompilation) {
- ProfileInterpreter = false;
- } else {
- // Since we are running vanilla server we must adjust the compile threshold
- // unless the user has already adjusted it because the default threshold assumes
- // we will run tiered.
-
- if (FLAG_IS_DEFAULT(CompileThreshold)) {
- CompileThreshold = Tier2CompileThreshold;
- }
- }
-#endif // TIERED
-
#ifndef COMPILER2
// Don't degrade server performance for footprint
if (FLAG_IS_DEFAULT(UseLargePages) &&
@@ -2682,7 +2687,6 @@
// Tiered compilation is undefined with C1.
TieredCompilation = false;
-
#else
if (!FLAG_IS_DEFAULT(OptoLoopAlignment) && FLAG_IS_DEFAULT(MaxLoopPad)) {
FLAG_SET_DEFAULT(MaxLoopPad, OptoLoopAlignment-1);
@@ -2939,7 +2943,7 @@
PrintGC = true;
}
-#if defined(_LP64) && defined(COMPILER1)
+#if defined(_LP64) && defined(COMPILER1) && !defined(TIERED)
UseCompressedOops = false;
#endif
@@ -2970,6 +2974,16 @@
return JNI_EINVAL;
}
+ if (TieredCompilation) {
+ set_tiered_flags();
+ } else {
+ // Check if the policy is valid. Policies 0 and 1 are valid for non-tiered setup.
+ if (CompilationPolicyChoice >= 2) {
+ vm_exit_during_initialization(
+ "Incompatible compilation policy selected", NULL);
+ }
+ }
+
#ifndef KERNEL
if (UseConcMarkSweepGC) {
// Set flags for CMS and ParNew. Check UseConcMarkSweep first
--- a/hotspot/src/share/vm/runtime/arguments.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -288,8 +288,9 @@
static bool _BackgroundCompilation;
static bool _ClipInlining;
static bool _CIDynamicCompilePriority;
- static intx _Tier2CompileThreshold;
+ // Tiered
+ static void set_tiered_flags();
// CMS/ParNew garbage collectors
static void set_parnew_gc_flags();
static void set_cms_and_parnew_gc_flags();
--- a/hotspot/src/share/vm/runtime/compilationPolicy.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/compilationPolicy.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -45,10 +45,17 @@
Unimplemented();
#endif
break;
-
+ case 2:
+#ifdef TIERED
+ CompilationPolicy::set_policy(new SimpleThresholdPolicy());
+#else
+ Unimplemented();
+#endif
+ break;
default:
- fatal("CompilationPolicyChoice must be in the range: [0-1]");
+ fatal("CompilationPolicyChoice must be in the range: [0-2]");
}
+ CompilationPolicy::policy()->initialize();
}
void CompilationPolicy::completed_vm_startup() {
@@ -61,16 +68,16 @@
// Returns true if m must be compiled before executing it
// This is intended to force compiles for methods (usually for
// debugging) that would otherwise be interpreted for some reason.
-bool CompilationPolicy::mustBeCompiled(methodHandle m) {
+bool CompilationPolicy::must_be_compiled(methodHandle m, int comp_level) {
if (m->has_compiled_code()) return false; // already compiled
- if (!canBeCompiled(m)) return false;
+ if (!can_be_compiled(m, comp_level)) return false;
return !UseInterpreter || // must compile all methods
(UseCompiler && AlwaysCompileLoopMethods && m->has_loops() && CompileBroker::should_compile_new_jobs()); // eagerly compile loop methods
}
// Returns true if m is allowed to be compiled
-bool CompilationPolicy::canBeCompiled(methodHandle m) {
+bool CompilationPolicy::can_be_compiled(methodHandle m, int comp_level) {
if (m->is_abstract()) return false;
if (DontCompileHugeMethods && m->code_size() > HugeMethodLimit) return false;
@@ -83,8 +90,16 @@
if (!AbstractInterpreter::can_be_compiled(m)) {
return false;
}
+ if (comp_level == CompLevel_all) {
+ return !m->is_not_compilable(CompLevel_simple) && !m->is_not_compilable(CompLevel_full_optimization);
+ } else {
+ return !m->is_not_compilable(comp_level);
+ }
+}
- return !m->is_not_compilable();
+bool CompilationPolicy::is_compilation_enabled() {
+ // NOTE: CompileBroker::should_compile_new_jobs() checks for UseCompiler
+ return !delay_compilation_during_startup() && CompileBroker::should_compile_new_jobs();
}
#ifndef PRODUCT
@@ -94,7 +109,7 @@
tty->print_cr (" Total: %3.3f sec.", _accumulated_time.seconds());
}
-static void trace_osr_completion(nmethod* osr_nm) {
+void NonTieredCompPolicy::trace_osr_completion(nmethod* osr_nm) {
if (TraceOnStackReplacement) {
if (osr_nm == NULL) tty->print_cr("compilation failed");
else tty->print_cr("nmethod " INTPTR_FORMAT, osr_nm);
@@ -102,7 +117,35 @@
}
#endif // !PRODUCT
-void CompilationPolicy::reset_counter_for_invocation_event(methodHandle m) {
+void NonTieredCompPolicy::initialize() {
+ // Setup the compiler thread numbers
+ if (CICompilerCountPerCPU) {
+ // Example: if CICompilerCountPerCPU is true, then we get
+ // max(log2(8)-1,1) = 2 compiler threads on an 8-way machine.
+ // May help big-app startup time.
+ _compiler_count = MAX2(log2_intptr(os::active_processor_count())-1,1);
+ } else {
+ _compiler_count = CICompilerCount;
+ }
+}
+
+int NonTieredCompPolicy::compiler_count(CompLevel comp_level) {
+#ifdef COMPILER1
+ if (is_c1_compile(comp_level)) {
+ return _compiler_count;
+ }
+#endif
+
+#ifdef COMPILER2
+ if (is_c2_compile(comp_level)) {
+ return _compiler_count;
+ }
+#endif
+
+ return 0;
+}
+
+void NonTieredCompPolicy::reset_counter_for_invocation_event(methodHandle m) {
// Make sure invocation and backedge counter doesn't overflow again right away
// as would be the case for native methods.
@@ -114,7 +157,7 @@
assert(!m->was_never_executed(), "don't reset to 0 -- could be mistaken for never-executed");
}
-void CompilationPolicy::reset_counter_for_back_branch_event(methodHandle m) {
+void NonTieredCompPolicy::reset_counter_for_back_branch_event(methodHandle m) {
// Delay next back-branch event but pump up invocation counter to triger
// whole method compilation.
InvocationCounter* i = m->invocation_counter();
@@ -128,6 +171,185 @@
b->set(b->state(), CompileThreshold / 2);
}
+//
+// CounterDecay
+//
+// Interates through invocation counters and decrements them. This
+// is done at each safepoint.
+//
+class CounterDecay : public AllStatic {
+ static jlong _last_timestamp;
+ static void do_method(methodOop m) {
+ m->invocation_counter()->decay();
+ }
+public:
+ static void decay();
+ static bool is_decay_needed() {
+ return (os::javaTimeMillis() - _last_timestamp) > CounterDecayMinIntervalLength;
+ }
+};
+
+jlong CounterDecay::_last_timestamp = 0;
+
+void CounterDecay::decay() {
+ _last_timestamp = os::javaTimeMillis();
+
+ // This operation is going to be performed only at the end of a safepoint
+ // and hence GC's will not be going on, all Java mutators are suspended
+ // at this point and hence SystemDictionary_lock is also not needed.
+ assert(SafepointSynchronize::is_at_safepoint(), "can only be executed at a safepoint");
+ int nclasses = SystemDictionary::number_of_classes();
+ double classes_per_tick = nclasses * (CounterDecayMinIntervalLength * 1e-3 /
+ CounterHalfLifeTime);
+ for (int i = 0; i < classes_per_tick; i++) {
+ klassOop k = SystemDictionary::try_get_next_class();
+ if (k != NULL && k->klass_part()->oop_is_instance()) {
+ instanceKlass::cast(k)->methods_do(do_method);
+ }
+ }
+}
+
+// Called at the end of the safepoint
+void NonTieredCompPolicy::do_safepoint_work() {
+ if(UseCounterDecay && CounterDecay::is_decay_needed()) {
+ CounterDecay::decay();
+ }
+}
+
+void NonTieredCompPolicy::reprofile(ScopeDesc* trap_scope, bool is_osr) {
+ ScopeDesc* sd = trap_scope;
+ for (; !sd->is_top(); sd = sd->sender()) {
+ // Reset ICs of inlined methods, since they can trigger compilations also.
+ sd->method()->invocation_counter()->reset();
+ }
+ InvocationCounter* c = sd->method()->invocation_counter();
+ if (is_osr) {
+ // It was an OSR method, so bump the count higher.
+ c->set(c->state(), CompileThreshold);
+ } else {
+ c->reset();
+ }
+ sd->method()->backedge_counter()->reset();
+}
+
+// This method can be called by any component of the runtime to notify the policy
+// that it's recommended to delay the complation of this method.
+void NonTieredCompPolicy::delay_compilation(methodOop method) {
+ method->invocation_counter()->decay();
+ method->backedge_counter()->decay();
+}
+
+void NonTieredCompPolicy::disable_compilation(methodOop method) {
+ method->invocation_counter()->set_state(InvocationCounter::wait_for_nothing);
+ method->backedge_counter()->set_state(InvocationCounter::wait_for_nothing);
+}
+
+CompileTask* NonTieredCompPolicy::select_task(CompileQueue* compile_queue) {
+ return compile_queue->first();
+}
+
+bool NonTieredCompPolicy::is_mature(methodOop method) {
+ methodDataOop mdo = method->method_data();
+ assert(mdo != NULL, "Should be");
+ uint current = mdo->mileage_of(method);
+ uint initial = mdo->creation_mileage();
+ if (current < initial)
+ return true; // some sort of overflow
+ uint target;
+ if (ProfileMaturityPercentage <= 0)
+ target = (uint) -ProfileMaturityPercentage; // absolute value
+ else
+ target = (uint)( (ProfileMaturityPercentage * CompileThreshold) / 100 );
+ return (current >= initial + target);
+}
+
+nmethod* NonTieredCompPolicy::event(methodHandle method, methodHandle inlinee, int branch_bci, int bci, CompLevel comp_level, TRAPS) {
+ assert(comp_level == CompLevel_none, "This should be only called from the interpreter");
+ NOT_PRODUCT(trace_frequency_counter_overflow(method, branch_bci, bci));
+ if (JvmtiExport::can_post_interpreter_events()) {
+ assert(THREAD->is_Java_thread(), "Wrong type of thread");
+ if (((JavaThread*)THREAD)->is_interp_only_mode()) {
+ // If certain JVMTI events (e.g. frame pop event) are requested then the
+ // thread is forced to remain in interpreted code. This is
+ // implemented partly by a check in the run_compiled_code
+ // section of the interpreter whether we should skip running
+ // compiled code, and partly by skipping OSR compiles for
+ // interpreted-only threads.
+ if (bci != InvocationEntryBci) {
+ reset_counter_for_back_branch_event(method);
+ return NULL;
+ }
+ }
+ }
+ if (bci == InvocationEntryBci) {
+ // when code cache is full, compilation gets switched off, UseCompiler
+ // is set to false
+ if (!method->has_compiled_code() && UseCompiler) {
+ method_invocation_event(method, CHECK_NULL);
+ } else {
+ // Force counter overflow on method entry, even if no compilation
+ // happened. (The method_invocation_event call does this also.)
+ reset_counter_for_invocation_event(method);
+ }
+ // compilation at an invocation overflow no longer goes and retries test for
+ // compiled method. We always run the loser of the race as interpreted.
+ // so return NULL
+ return NULL;
+ } else {
+ // counter overflow in a loop => try to do on-stack-replacement
+ nmethod* osr_nm = method->lookup_osr_nmethod_for(bci, CompLevel_highest_tier, true);
+ NOT_PRODUCT(trace_osr_request(method, osr_nm, bci));
+ // when code cache is full, we should not compile any more...
+ if (osr_nm == NULL && UseCompiler) {
+ method_back_branch_event(method, bci, CHECK_NULL);
+ osr_nm = method->lookup_osr_nmethod_for(bci, CompLevel_highest_tier, true);
+ }
+ if (osr_nm == NULL) {
+ reset_counter_for_back_branch_event(method);
+ return NULL;
+ }
+ return osr_nm;
+ }
+ return NULL;
+}
+
+#ifndef PRODUCT
+void NonTieredCompPolicy::trace_frequency_counter_overflow(methodHandle m, int branch_bci, int bci) {
+ if (TraceInvocationCounterOverflow) {
+ InvocationCounter* ic = m->invocation_counter();
+ InvocationCounter* bc = m->backedge_counter();
+ ResourceMark rm;
+ const char* msg =
+ bci == InvocationEntryBci
+ ? "comp-policy cntr ovfl @ %d in entry of "
+ : "comp-policy cntr ovfl @ %d in loop of ";
+ tty->print(msg, bci);
+ m->print_value();
+ tty->cr();
+ ic->print();
+ bc->print();
+ if (ProfileInterpreter) {
+ if (bci != InvocationEntryBci) {
+ methodDataOop mdo = m->method_data();
+ if (mdo != NULL) {
+ int count = mdo->bci_to_data(branch_bci)->as_JumpData()->taken();
+ tty->print_cr("back branch count = %d", count);
+ }
+ }
+ }
+ }
+}
+
+void NonTieredCompPolicy::trace_osr_request(methodHandle method, nmethod* osr, int bci) {
+ if (TraceOnStackReplacement) {
+ ResourceMark rm;
+ tty->print(osr != NULL ? "Reused OSR entry for " : "Requesting OSR entry for ");
+ method->print_short_name(tty);
+ tty->print_cr(" at bci %d", bci);
+ }
+}
+#endif // !PRODUCT
+
// SimpleCompPolicy - compile current method
void SimpleCompPolicy::method_invocation_event( methodHandle m, TRAPS) {
@@ -137,59 +359,28 @@
reset_counter_for_invocation_event(m);
const char* comment = "count";
- if (!delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) {
+ if (is_compilation_enabled() && can_be_compiled(m)) {
nmethod* nm = m->code();
if (nm == NULL ) {
const char* comment = "count";
- CompileBroker::compile_method(m, InvocationEntryBci,
+ CompileBroker::compile_method(m, InvocationEntryBci, CompLevel_highest_tier,
m, hot_count, comment, CHECK);
- } else {
-#ifdef TIERED
-
- if (nm->is_compiled_by_c1()) {
- const char* comment = "tier1 overflow";
- CompileBroker::compile_method(m, InvocationEntryBci,
- m, hot_count, comment, CHECK);
- }
-#endif // TIERED
}
}
}
-void SimpleCompPolicy::method_back_branch_event(methodHandle m, int branch_bci, int loop_top_bci, TRAPS) {
+void SimpleCompPolicy::method_back_branch_event(methodHandle m, int bci, TRAPS) {
assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
int hot_count = m->backedge_count();
const char* comment = "backedge_count";
- if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) {
- CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
-
- NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
+ if (is_compilation_enabled() && !m->is_not_osr_compilable() && can_be_compiled(m)) {
+ CompileBroker::compile_method(m, bci, CompLevel_highest_tier,
+ m, hot_count, comment, CHECK);
+ NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, CompLevel_highest_tier, true));)
}
}
-
-int SimpleCompPolicy::compilation_level(methodHandle m, int branch_bci)
-{
-#ifdef TIERED
- if (!TieredCompilation) {
- return CompLevel_highest_tier;
- }
- if (/* m()->tier1_compile_done() && */
- // QQQ HACK FIX ME set tier1_compile_done!!
- !m()->is_native()) {
- // Grab the nmethod so it doesn't go away while it's being queried
- nmethod* code = m()->code();
- if (code != NULL && code->is_compiled_by_c1()) {
- return CompLevel_highest_tier;
- }
- }
- return CompLevel_fast_compile;
-#else
- return CompLevel_highest_tier;
-#endif // TIERED
-}
-
// StackWalkCompPolicy - walk up stack to find a suitable method to compile
#ifdef COMPILER2
@@ -204,7 +395,7 @@
reset_counter_for_invocation_event(m);
const char* comment = "count";
- if (m->code() == NULL && !delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) {
+ if (is_compilation_enabled() && m->code() == NULL && can_be_compiled(m)) {
ResourceMark rm(THREAD);
JavaThread *thread = (JavaThread*)THREAD;
frame fr = thread->last_frame();
@@ -224,10 +415,6 @@
if (first->top_method()->code() != NULL) {
// called obsolete method/nmethod -- no need to recompile
if (TraceCompilationPolicy) tty->print_cr(" --> " INTPTR_FORMAT, first->top_method()->code());
- } else if (compilation_level(m, InvocationEntryBci) == CompLevel_fast_compile) {
- // Tier1 compilation policy avaoids stack walking.
- CompileBroker::compile_method(m, InvocationEntryBci,
- m, hot_count, comment, CHECK);
} else {
if (TimeCompilationPolicy) accumulated_time()->start();
GrowableArray<RFrame*>* stack = new GrowableArray<RFrame*>(50);
@@ -236,53 +423,25 @@
if (TimeCompilationPolicy) accumulated_time()->stop();
assert(top != NULL, "findTopInlinableFrame returned null");
if (TraceCompilationPolicy) top->print();
- CompileBroker::compile_method(top->top_method(), InvocationEntryBci,
+ CompileBroker::compile_method(top->top_method(), InvocationEntryBci, CompLevel_highest_tier,
m, hot_count, comment, CHECK);
}
}
}
-void StackWalkCompPolicy::method_back_branch_event(methodHandle m, int branch_bci, int loop_top_bci, TRAPS) {
+void StackWalkCompPolicy::method_back_branch_event(methodHandle m, int bci, TRAPS) {
assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
int hot_count = m->backedge_count();
const char* comment = "backedge_count";
- if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) {
- CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
+ if (is_compilation_enabled() && !m->is_not_osr_compilable() && can_be_compiled(m)) {
+ CompileBroker::compile_method(m, bci, CompLevel_highest_tier, m, hot_count, comment, CHECK);
- NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
+ NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, CompLevel_highest_tier, true));)
}
}
-int StackWalkCompPolicy::compilation_level(methodHandle m, int osr_bci)
-{
- int comp_level = CompLevel_full_optimization;
- if (TieredCompilation && osr_bci == InvocationEntryBci) {
- if (CompileTheWorld) {
- // Under CTW, the first compile is tier1, the second tier2
- if (m->highest_tier_compile() == CompLevel_none) {
- comp_level = CompLevel_fast_compile;
- }
- } else if (!m->has_osr_nmethod()) {
- // Before tier1 is done, use invocation_count + backedge_count to
- // compare against the threshold. After that, the counters may/will
- // be reset, so rely on the straight interpreter_invocation_count.
- if (m->highest_tier_compile() == CompLevel_initial_compile) {
- if (m->interpreter_invocation_count() < Tier2CompileThreshold) {
- comp_level = CompLevel_fast_compile;
- }
- } else if (m->invocation_count() + m->backedge_count() <
- Tier2CompileThreshold) {
- comp_level = CompLevel_fast_compile;
- }
- }
-
- }
- return comp_level;
-}
-
-
RFrame* StackWalkCompPolicy::findTopInlinableFrame(GrowableArray<RFrame*>* stack) {
// go up the stack until finding a frame that (probably) won't be inlined
// into its caller
@@ -372,7 +531,7 @@
// If the caller method is too big or something then we do not want to
// compile it just to inline a method
- if (!canBeCompiled(next_m)) {
+ if (!can_be_compiled(next_m)) {
msg = "caller cannot be compiled";
break;
}
--- a/hotspot/src/share/vm/runtime/compilationPolicy.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/compilationPolicy.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,53 +25,91 @@
// The CompilationPolicy selects which method (if any) should be compiled.
// It also decides which methods must always be compiled (i.e., are never
// interpreted).
+class CompileTask;
+class CompileQueue;
class CompilationPolicy : public CHeapObj {
- private:
static CompilationPolicy* _policy;
// Accumulated time
static elapsedTimer _accumulated_time;
static bool _in_vm_startup;
-
- public:
- virtual void method_invocation_event(methodHandle m, TRAPS) = 0;
- virtual void method_back_branch_event(methodHandle m, int branch_bci, int loop_top_bci, TRAPS) = 0;
- virtual int compilation_level(methodHandle m, int branch_bci) = 0;
-
- void reset_counter_for_invocation_event(methodHandle method);
- void reset_counter_for_back_branch_event(methodHandle method);
-
+public:
static void set_in_vm_startup(bool in_vm_startup) { _in_vm_startup = in_vm_startup; }
static void completed_vm_startup();
- static bool delayCompilationDuringStartup() { return _in_vm_startup; }
+ static bool delay_compilation_during_startup() { return _in_vm_startup; }
- static bool mustBeCompiled(methodHandle m); // m must be compiled before executing it
- static bool canBeCompiled(methodHandle m); // m is allowed to be compiled
-
+ // m must be compiled before executing it
+ static bool must_be_compiled(methodHandle m, int comp_level = CompLevel_all);
+ // m is allowed to be compiled
+ static bool can_be_compiled(methodHandle m, int comp_level = CompLevel_all);
+ static bool is_compilation_enabled();
static void set_policy(CompilationPolicy* policy) { _policy = policy; }
- static CompilationPolicy* policy() { return _policy; }
+ static CompilationPolicy* policy() { return _policy; }
// Profiling
elapsedTimer* accumulated_time() { return &_accumulated_time; }
void print_time() PRODUCT_RETURN;
+ virtual int compiler_count(CompLevel comp_level) = 0;
+ // main notification entry, return a pointer to an nmethod if the OSR is required,
+ // returns NULL otherwise.
+ virtual nmethod* event(methodHandle method, methodHandle inlinee, int branch_bci, int bci, CompLevel comp_level, TRAPS) = 0;
+ // safepoint() is called at the end of the safepoint
+ virtual void do_safepoint_work() = 0;
+ // reprofile request
+ virtual void reprofile(ScopeDesc* trap_scope, bool is_osr) = 0;
+ // delay_compilation(method) can be called by any component of the runtime to notify the policy
+ // that it's recommended to delay the complation of this method.
+ virtual void delay_compilation(methodOop method) = 0;
+ // disable_compilation() is called whenever the runtime decides to disable compilation of the
+ // specified method.
+ virtual void disable_compilation(methodOop method) = 0;
+ // Select task is called by CompileBroker. The queue is guaranteed to have at least one
+ // element and is locked. The function should select one and return it.
+ virtual CompileTask* select_task(CompileQueue* compile_queue) = 0;
+ // Tell the runtime if we think a given method is adequately profiled.
+ virtual bool is_mature(methodOop method) = 0;
+ // Do policy initialization
+ virtual void initialize() = 0;
};
-class SimpleCompPolicy : public CompilationPolicy {
+// A base class for baseline policies.
+class NonTieredCompPolicy : public CompilationPolicy {
+ int _compiler_count;
+protected:
+ static void trace_frequency_counter_overflow(methodHandle m, int branch_bci, int bci);
+ static void trace_osr_request(methodHandle method, nmethod* osr, int bci);
+ static void trace_osr_completion(nmethod* osr_nm);
+ void reset_counter_for_invocation_event(methodHandle method);
+ void reset_counter_for_back_branch_event(methodHandle method);
+public:
+ NonTieredCompPolicy() : _compiler_count(0) { }
+ virtual int compiler_count(CompLevel comp_level);
+ virtual void do_safepoint_work();
+ virtual void reprofile(ScopeDesc* trap_scope, bool is_osr);
+ virtual void delay_compilation(methodOop method);
+ virtual void disable_compilation(methodOop method);
+ virtual bool is_mature(methodOop method);
+ virtual void initialize();
+ virtual CompileTask* select_task(CompileQueue* compile_queue);
+ virtual nmethod* event(methodHandle method, methodHandle inlinee, int branch_bci, int bci, CompLevel comp_level, TRAPS);
+ virtual void method_invocation_event(methodHandle m, TRAPS) = 0;
+ virtual void method_back_branch_event(methodHandle m, int bci, TRAPS) = 0;
+};
+
+class SimpleCompPolicy : public NonTieredCompPolicy {
public:
- void method_invocation_event( methodHandle m, TRAPS);
- void method_back_branch_event(methodHandle m, int branch_bci, int loop_top_bci, TRAPS);
- int compilation_level(methodHandle m, int branch_bci);
+ virtual void method_invocation_event(methodHandle m, TRAPS);
+ virtual void method_back_branch_event(methodHandle m, int bci, TRAPS);
};
// StackWalkCompPolicy - existing C2 policy
#ifdef COMPILER2
-class StackWalkCompPolicy : public CompilationPolicy {
+class StackWalkCompPolicy : public NonTieredCompPolicy {
public:
- void method_invocation_event(methodHandle m, TRAPS);
- void method_back_branch_event(methodHandle m, int branch_bci, int loop_top_bci, TRAPS);
- int compilation_level(methodHandle m, int branch_bci);
+ virtual void method_invocation_event(methodHandle m, TRAPS);
+ virtual void method_back_branch_event(methodHandle m, int bci, TRAPS);
private:
RFrame* findTopInlinableFrame(GrowableArray<RFrame*>* stack);
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -1301,7 +1301,7 @@
bool update_trap_state = true;
bool make_not_entrant = false;
bool make_not_compilable = false;
- bool reset_counters = false;
+ bool reprofile = false;
switch (action) {
case Action_none:
// Keep the old code.
@@ -1328,7 +1328,7 @@
// had been traps taken from compiled code. This will update
// the MDO trap history so that the next compilation will
// properly detect hot trap sites.
- reset_counters = true;
+ reprofile = true;
break;
case Action_make_not_entrant:
// Request immediate recompilation, and get rid of the old code.
@@ -1422,7 +1422,7 @@
// this trap point already, run the method in the interpreter
// for a while to exercise it more thoroughly.
if (make_not_entrant && maybe_prior_recompile && maybe_prior_trap) {
- reset_counters = true;
+ reprofile = true;
}
}
@@ -1452,24 +1452,21 @@
if (trap_method() == nm->method()) {
make_not_compilable = true;
} else {
- trap_method->set_not_compilable();
+ trap_method->set_not_compilable(CompLevel_full_optimization);
// But give grace to the enclosing nm->method().
}
}
}
- // Reset invocation counters
- if (reset_counters) {
- if (nm->is_osr_method())
- reset_invocation_counter(trap_scope, CompileThreshold);
- else
- reset_invocation_counter(trap_scope);
+ // Reprofile
+ if (reprofile) {
+ CompilationPolicy::policy()->reprofile(trap_scope, nm->is_osr_method());
}
// Give up compiling
- if (make_not_compilable && !nm->method()->is_not_compilable()) {
+ if (make_not_compilable && !nm->method()->is_not_compilable(CompLevel_full_optimization)) {
assert(make_not_entrant, "consistent");
- nm->method()->set_not_compilable();
+ nm->method()->set_not_compilable(CompLevel_full_optimization);
}
} // Free marked resources
@@ -1569,22 +1566,6 @@
ignore_maybe_prior_recompile);
}
-void Deoptimization::reset_invocation_counter(ScopeDesc* trap_scope, jint top_count) {
- ScopeDesc* sd = trap_scope;
- for (; !sd->is_top(); sd = sd->sender()) {
- // Reset ICs of inlined methods, since they can trigger compilations also.
- sd->method()->invocation_counter()->reset();
- }
- InvocationCounter* c = sd->method()->invocation_counter();
- if (top_count != _no_count) {
- // It was an OSR method, so bump the count higher.
- c->set(c->state(), top_count);
- } else {
- c->reset();
- }
- sd->method()->backedge_counter()->reset();
-}
-
Deoptimization::UnrollBlock* Deoptimization::uncommon_trap(JavaThread* thread, jint trap_request) {
// Still in Java no safepoints
--- a/hotspot/src/share/vm/runtime/deoptimization.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/deoptimization.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -311,12 +311,6 @@
static void popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address);
private:
- enum {
- _no_count = -1
- };
-
- static void reset_invocation_counter(ScopeDesc* trap_scope, jint count = _no_count);
-
static methodDataOop get_method_data(JavaThread* thread, methodHandle m, bool create_if_missing);
// Update the mdo's count and per-BCI reason bits, returning previous state:
static ProfileData* query_update_method_data(methodDataHandle trap_mdo,
--- a/hotspot/src/share/vm/runtime/dtraceJSDT.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/dtraceJSDT.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -65,7 +65,7 @@
THROW_MSG_0(vmSymbols::java_lang_RuntimeException(),
"Unable to register DTrace probes (CodeCache: no room for DTrace nmethods).");
}
- h_method()->set_not_compilable(CompLevel_highest_tier);
+ h_method()->set_not_compilable();
h_method()->set_code(h_method, nm);
probes->nmethod_at_put(count++, nm);
}
--- a/hotspot/src/share/vm/runtime/globals.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/globals.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -35,14 +35,7 @@
define_pd_global(bool, TieredCompilation, false);
define_pd_global(intx, CompileThreshold, 0);
-define_pd_global(intx, Tier2CompileThreshold, 0);
-define_pd_global(intx, Tier3CompileThreshold, 0);
-define_pd_global(intx, Tier4CompileThreshold, 0);
-
define_pd_global(intx, BackEdgeThreshold, 0);
-define_pd_global(intx, Tier2BackEdgeThreshold, 0);
-define_pd_global(intx, Tier3BackEdgeThreshold, 0);
-define_pd_global(intx, Tier4BackEdgeThreshold, 0);
define_pd_global(intx, OnStackReplacePercentage, 0);
define_pd_global(bool, ResizeTLAB, false);
@@ -1971,7 +1964,7 @@
product(uintx, TenuredGenerationSizeSupplementDecay, 2, \
"Decay factor to TenuredGenerationSizeIncrement") \
\
- product(uintx, MaxGCPauseMillis, max_uintx, \
+ product(uintx, MaxGCPauseMillis, max_uintx, \
"Adaptive size policy maximum GC pause time goal in msec, " \
"or (G1 Only) the max. GC time per MMU time slice") \
\
@@ -2366,9 +2359,6 @@
develop(bool, EagerInitialization, false, \
"Eagerly initialize classes if possible") \
\
- product(bool, Tier1UpdateMethodData, trueInTiered, \
- "Update methodDataOops in Tier1-generated code") \
- \
develop(bool, TraceMethodReplacement, false, \
"Print when methods are replaced do to recompilation") \
\
@@ -2898,7 +2888,7 @@
"if non-zero, start verifying C heap after Nth call to " \
"malloc/realloc/free") \
\
- product(intx, TypeProfileWidth, 2, \
+ product(intx, TypeProfileWidth, 2, \
"number of receiver types to record in call/cast profile") \
\
develop(intx, BciProfileWidth, 2, \
@@ -3306,30 +3296,98 @@
product_pd(intx, BackEdgeThreshold, \
"Interpreter Back edge threshold at which an OSR compilation is invoked")\
\
- product(intx, Tier1BytecodeLimit, 10, \
- "Must have at least this many bytecodes before tier1" \
- "invocation counters are used") \
- \
- product_pd(intx, Tier2CompileThreshold, \
- "threshold at which a tier 2 compilation is invoked") \
- \
- product_pd(intx, Tier2BackEdgeThreshold, \
- "Back edge threshold at which a tier 2 compilation is invoked") \
- \
- product_pd(intx, Tier3CompileThreshold, \
- "threshold at which a tier 3 compilation is invoked") \
- \
- product_pd(intx, Tier3BackEdgeThreshold, \
- "Back edge threshold at which a tier 3 compilation is invoked") \
- \
- product_pd(intx, Tier4CompileThreshold, \
- "threshold at which a tier 4 compilation is invoked") \
- \
- product_pd(intx, Tier4BackEdgeThreshold, \
- "Back edge threshold at which a tier 4 compilation is invoked") \
+ product(intx, Tier0InvokeNotifyFreqLog, 7, \
+ "Interpreter (tier 0) invocation notification frequency.") \
+ \
+ product(intx, Tier2InvokeNotifyFreqLog, 11, \
+ "C1 without MDO (tier 2) invocation notification frequency.") \
+ \
+ product(intx, Tier3InvokeNotifyFreqLog, 10, \
+ "C1 with MDO profiling (tier 3) invocation notification " \
+ "frequency.") \
+ \
+ product(intx, Tier0BackedgeNotifyFreqLog, 10, \
+ "Interpreter (tier 0) invocation notification frequency.") \
+ \
+ product(intx, Tier2BackedgeNotifyFreqLog, 14, \
+ "C1 without MDO (tier 2) invocation notification frequency.") \
+ \
+ product(intx, Tier3BackedgeNotifyFreqLog, 13, \
+ "C1 with MDO profiling (tier 3) invocation notification " \
+ "frequency.") \
+ \
+ product(intx, Tier2CompileThreshold, 0, \
+ "threshold at which tier 2 compilation is invoked") \
+ \
+ product(intx, Tier2BackEdgeThreshold, 0, \
+ "Back edge threshold at which tier 2 compilation is invoked") \
+ \
+ product(intx, Tier3InvocationThreshold, 200, \
+ "Compile if number of method invocations crosses this " \
+ "threshold") \
+ \
+ product(intx, Tier3MinInvocationThreshold, 100, \
+ "Minimum invocation to compile at tier 3") \
+ \
+ product(intx, Tier3CompileThreshold, 2000, \
+ "Threshold at which tier 3 compilation is invoked (invocation " \
+ "minimum must be satisfied.") \
+ \
+ product(intx, Tier3BackEdgeThreshold, 7000, \
+ "Back edge threshold at which tier 3 OSR compilation is invoked") \
+ \
+ product(intx, Tier4InvocationThreshold, 5000, \
+ "Compile if number of method invocations crosses this " \
+ "threshold") \
+ \
+ product(intx, Tier4MinInvocationThreshold, 600, \
+ "Minimum invocation to compile at tier 4") \
+ \
+ product(intx, Tier4CompileThreshold, 15000, \
+ "Threshold at which tier 4 compilation is invoked (invocation " \
+ "minimum must be satisfied.") \
+ \
+ product(intx, Tier4BackEdgeThreshold, 40000, \
+ "Back edge threshold at which tier 4 OSR compilation is invoked") \
+ \
+ product(intx, Tier3DelayOn, 5, \
+ "If C2 queue size grows over this amount per compiler thread " \
+ "stop compiling at tier 3 and start compiling at tier 2") \
+ \
+ product(intx, Tier3DelayOff, 2, \
+ "If C2 queue size is less than this amount per compiler thread " \
+ "allow methods compiled at tier 2 transition to tier 3") \
+ \
+ product(intx, Tier3LoadFeedback, 5, \
+ "Tier 3 thresholds will increase twofold when C1 queue size " \
+ "reaches this amount per compiler thread") \
+ \
+ product(intx, Tier4LoadFeedback, 3, \
+ "Tier 4 thresholds will increase twofold when C2 queue size " \
+ "reaches this amount per compiler thread") \
+ \
+ product(intx, TieredCompileTaskTimeout, 50, \
+ "Kill compile task if method was not used within " \
+ "given timeout in milliseconds") \
+ \
+ product(intx, TieredStopAtLevel, 4, \
+ "Stop at given compilation level") \
+ \
+ product(intx, Tier0ProfilingStartPercentage, 200, \
+ "Start profiling in interpreter if the counters exceed tier 3" \
+ "thresholds by the specified percentage") \
+ \
+ product(intx, TieredRateUpdateMinTime, 1, \
+ "Minimum rate sampling interval (in milliseconds)") \
+ \
+ product(intx, TieredRateUpdateMaxTime, 25, \
+ "Maximum rate sampling interval (in milliseconds)") \
\
product_pd(bool, TieredCompilation, \
- "Enable two-tier compilation") \
+ "Enable tiered compilation") \
+ \
+ product(bool, PrintTieredEvents, false, \
+ "Print tiered events notifications") \
\
product(bool, StressTieredRuntime, false, \
"Alternate client and server compiler on compile requests") \
--- a/hotspot/src/share/vm/runtime/java.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/java.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -198,7 +198,7 @@
if (CountCompiledCalls) {
print_method_invocation_histogram();
}
- if (ProfileInterpreter || Tier1UpdateMethodData) {
+ if (ProfileInterpreter || C1UpdateMethodData) {
print_method_profiling_data();
}
if (TimeCompiler) {
--- a/hotspot/src/share/vm/runtime/javaCalls.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/javaCalls.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -329,9 +329,10 @@
assert(!thread->is_Compiler_thread(), "cannot compile from the compiler");
- if (CompilationPolicy::mustBeCompiled(method)) {
+ if (CompilationPolicy::must_be_compiled(method)) {
CompileBroker::compile_method(method, InvocationEntryBci,
- methodHandle(), 0, "mustBeCompiled", CHECK);
+ CompLevel_initial_compile,
+ methodHandle(), 0, "must_be_compiled", CHECK);
}
// Since the call stub sets up like the interpreter we call the from_interpreted_entry
--- a/hotspot/src/share/vm/runtime/safepoint.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/safepoint.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -430,29 +430,7 @@
return false;
}
-jlong CounterDecay::_last_timestamp = 0;
-static void do_method(methodOop m) {
- m->invocation_counter()->decay();
-}
-
-void CounterDecay::decay() {
- _last_timestamp = os::javaTimeMillis();
-
- // This operation is going to be performed only at the end of a safepoint
- // and hence GC's will not be going on, all Java mutators are suspended
- // at this point and hence SystemDictionary_lock is also not needed.
- assert(SafepointSynchronize::is_at_safepoint(), "can only be executed at a safepoint");
- int nclasses = SystemDictionary::number_of_classes();
- double classes_per_tick = nclasses * (CounterDecayMinIntervalLength * 1e-3 /
- CounterHalfLifeTime);
- for (int i = 0; i < classes_per_tick; i++) {
- klassOop k = SystemDictionary::try_get_next_class();
- if (k != NULL && k->klass_part()->oop_is_instance()) {
- instanceKlass::cast(k)->methods_do(do_method);
- }
- }
-}
// Various cleaning tasks that should be done periodically at safepoints
void SafepointSynchronize::do_cleanup_tasks() {
@@ -465,10 +443,9 @@
TraceTime t2("updating inline caches", TraceSafepointCleanupTime);
InlineCacheBuffer::update_inline_caches();
}
-
- if(UseCounterDecay && CounterDecay::is_decay_needed()) {
- TraceTime t3("decaying counter", TraceSafepointCleanupTime);
- CounterDecay::decay();
+ {
+ TraceTime t3("compilation policy safepoint handler", TraceSafepointCleanupTime);
+ CompilationPolicy::policy()->do_safepoint_work();
}
TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime);
--- a/hotspot/src/share/vm/runtime/safepoint.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/safepoint.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -147,6 +147,9 @@
static long last_non_safepoint_interval() {
return os::javaTimeMillis() - _end_of_last_safepoint;
}
+ static long end_of_last_safepoint() {
+ return _end_of_last_safepoint;
+ }
static bool is_cleanup_needed();
static void do_cleanup_tasks();
@@ -228,15 +231,4 @@
}
};
-//
-// CounterDecay
-//
-// Interates through invocation counters and decrements them. This
-// is done at each safepoint.
-//
-class CounterDecay : public AllStatic {
- static jlong _last_timestamp;
- public:
- static void decay();
- static bool is_decay_needed() { return (os::javaTimeMillis() - _last_timestamp) > CounterDecayMinIntervalLength; }
-};
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -0,0 +1,377 @@
+/*
+ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+# include "incls/_precompiled.incl"
+# include "incls/_simpleThresholdPolicy.cpp.incl"
+
+// Print an event.
+void SimpleThresholdPolicy::print_event(EventType type, methodHandle mh, methodHandle imh,
+ int bci, CompLevel level) {
+ bool inlinee_event = mh() != imh();
+
+ ttyLocker tty_lock;
+ tty->print("%lf: [", os::elapsedTime());
+
+ int invocation_count = mh->invocation_count();
+ int backedge_count = mh->backedge_count();
+ switch(type) {
+ case CALL:
+ tty->print("call");
+ break;
+ case LOOP:
+ tty->print("loop");
+ break;
+ case COMPILE:
+ tty->print("compile");
+ }
+
+ tty->print(" level: %d ", level);
+
+ ResourceMark rm;
+ char *method_name = mh->name_and_sig_as_C_string();
+ tty->print("[%s", method_name);
+ // We can have an inlinee, although currently we don't generate any notifications for the inlined methods.
+ if (inlinee_event) {
+ char *inlinee_name = imh->name_and_sig_as_C_string();
+ tty->print(" [%s]] ", inlinee_name);
+ }
+ else tty->print("] ");
+ tty->print("@%d queues: %d,%d", bci, CompileBroker::queue_size(CompLevel_full_profile),
+ CompileBroker::queue_size(CompLevel_full_optimization));
+
+ print_specific(type, mh, imh, bci, level);
+
+ if (type != COMPILE) {
+ methodDataHandle mdh = mh->method_data();
+ int mdo_invocations = 0, mdo_backedges = 0;
+ if (mdh() != NULL) {
+ mdo_invocations = mdh->invocation_count();
+ mdo_backedges = mdh->backedge_count();
+ }
+ tty->print(" total: %d,%d mdo: %d,%d",
+ invocation_count, backedge_count,
+ mdo_invocations, mdo_backedges);
+ tty->print(" max levels: %d,%d",
+ mh->highest_comp_level(), mh->highest_osr_comp_level());
+ if (inlinee_event) {
+ tty->print(" inlinee max levels: %d,%d", imh->highest_comp_level(), imh->highest_osr_comp_level());
+ }
+ tty->print(" compilable: ");
+ bool need_comma = false;
+ if (!mh->is_not_compilable(CompLevel_full_profile)) {
+ tty->print("c1");
+ need_comma = true;
+ }
+ if (!mh->is_not_compilable(CompLevel_full_optimization)) {
+ if (need_comma) tty->print(", ");
+ tty->print("c2");
+ need_comma = true;
+ }
+ if (!mh->is_not_osr_compilable()) {
+ if (need_comma) tty->print(", ");
+ tty->print("osr");
+ }
+ tty->print(" status:");
+ if (mh->queued_for_compilation()) {
+ tty->print(" in queue");
+ } else tty->print(" idle");
+ }
+ tty->print_cr("]");
+}
+
+void SimpleThresholdPolicy::initialize() {
+ if (FLAG_IS_DEFAULT(CICompilerCount)) {
+ FLAG_SET_DEFAULT(CICompilerCount, 3);
+ }
+ int count = CICompilerCount;
+ if (CICompilerCountPerCPU) {
+ count = MAX2(log2_intptr(os::active_processor_count()), 1) * 3 / 2;
+ }
+ set_c1_count(MAX2(count / 3, 1));
+ set_c2_count(MAX2(count - count / 3, 1));
+}
+
+void SimpleThresholdPolicy::set_carry_if_necessary(InvocationCounter *counter) {
+ if (!counter->carry() && counter->count() > InvocationCounter::count_limit / 2) {
+ counter->set_carry_flag();
+ }
+}
+
+// Set carry flags on the counters if necessary
+void SimpleThresholdPolicy::handle_counter_overflow(methodOop method) {
+ set_carry_if_necessary(method->invocation_counter());
+ set_carry_if_necessary(method->backedge_counter());
+ methodDataOop mdo = method->method_data();
+ if (mdo != NULL) {
+ set_carry_if_necessary(mdo->invocation_counter());
+ set_carry_if_necessary(mdo->backedge_counter());
+ }
+}
+
+// Called with the queue locked and with at least one element
+CompileTask* SimpleThresholdPolicy::select_task(CompileQueue* compile_queue) {
+ return compile_queue->first();
+}
+
+nmethod* SimpleThresholdPolicy::event(methodHandle method, methodHandle inlinee,
+ int branch_bci, int bci, CompLevel comp_level, TRAPS) {
+ if (comp_level == CompLevel_none &&
+ JvmtiExport::can_post_interpreter_events()) {
+ assert(THREAD->is_Java_thread(), "Should be java thread");
+ if (((JavaThread*)THREAD)->is_interp_only_mode()) {
+ return NULL;
+ }
+ }
+ nmethod *osr_nm = NULL;
+
+ handle_counter_overflow(method());
+ if (method() != inlinee()) {
+ handle_counter_overflow(inlinee());
+ }
+
+ if (PrintTieredEvents) {
+ print_event(bci == InvocationEntryBci ? CALL : LOOP, method, inlinee, bci, comp_level);
+ }
+
+ if (bci == InvocationEntryBci) {
+ method_invocation_event(method, inlinee, comp_level, THREAD);
+ } else {
+ method_back_branch_event(method, inlinee, bci, comp_level, THREAD);
+ int highest_level = method->highest_osr_comp_level();
+ if (highest_level > comp_level) {
+ osr_nm = method->lookup_osr_nmethod_for(bci, highest_level, false);
+ }
+ }
+ return osr_nm;
+}
+
+// Check if the method can be compiled, change level if necessary
+void SimpleThresholdPolicy::compile(methodHandle mh, int bci, CompLevel level, TRAPS) {
+ // Take the given ceiling into the account.
+ // NOTE: You can set it to 1 to get a pure C1 version.
+ if ((CompLevel)TieredStopAtLevel < level) {
+ level = (CompLevel)TieredStopAtLevel;
+ }
+ if (level == CompLevel_none) {
+ return;
+ }
+ // Check if the method can be compiled, if not - try different levels.
+ if (!can_be_compiled(mh, level)) {
+ if (level < CompLevel_full_optimization && can_be_compiled(mh, CompLevel_full_optimization)) {
+ compile(mh, bci, CompLevel_full_optimization, THREAD);
+ }
+ if (level == CompLevel_full_optimization && can_be_compiled(mh, CompLevel_simple)) {
+ compile(mh, bci, CompLevel_simple, THREAD);
+ }
+ return;
+ }
+ if (bci != InvocationEntryBci && mh->is_not_osr_compilable()) {
+ return;
+ }
+ if (PrintTieredEvents) {
+ print_event(COMPILE, mh, mh, bci, level);
+ }
+ if (!CompileBroker::compilation_is_in_queue(mh, bci)) {
+ submit_compile(mh, bci, level, THREAD);
+ }
+}
+
+// Tell the broker to compile the method
+void SimpleThresholdPolicy::submit_compile(methodHandle mh, int bci, CompLevel level, TRAPS) {
+ int hot_count = (bci == InvocationEntryBci) ? mh->invocation_count() : mh->backedge_count();
+ CompileBroker::compile_method(mh, bci, level, mh, hot_count, "tiered", THREAD);
+}
+
+// Call and loop predicates determine whether a transition to a higher
+// compilation level should be performed (pointers to predicate functions
+// are passed to common() transition function).
+bool SimpleThresholdPolicy::loop_predicate(int i, int b, CompLevel cur_level) {
+ switch(cur_level) {
+ case CompLevel_none:
+ case CompLevel_limited_profile: {
+ return loop_predicate_helper<CompLevel_none>(i, b, 1.0);
+ }
+ case CompLevel_full_profile: {
+ return loop_predicate_helper<CompLevel_full_profile>(i, b, 1.0);
+ }
+ default:
+ return true;
+ }
+}
+
+bool SimpleThresholdPolicy::call_predicate(int i, int b, CompLevel cur_level) {
+ switch(cur_level) {
+ case CompLevel_none:
+ case CompLevel_limited_profile: {
+ return call_predicate_helper<CompLevel_none>(i, b, 1.0);
+ }
+ case CompLevel_full_profile: {
+ return call_predicate_helper<CompLevel_full_profile>(i, b, 1.0);
+ }
+ default:
+ return true;
+ }
+}
+
+// Determine is a method is mature.
+bool SimpleThresholdPolicy::is_mature(methodOop method) {
+ if (is_trivial(method)) return true;
+ methodDataOop mdo = method->method_data();
+ if (mdo != NULL) {
+ int i = mdo->invocation_count();
+ int b = mdo->backedge_count();
+ double k = ProfileMaturityPercentage / 100.0;
+ return call_predicate_helper<CompLevel_full_profile>(i, b, k) ||
+ loop_predicate_helper<CompLevel_full_profile>(i, b, k);
+ }
+ return false;
+}
+
+// Common transition function. Given a predicate determines if a method should transition to another level.
+CompLevel SimpleThresholdPolicy::common(Predicate p, methodOop method, CompLevel cur_level) {
+ CompLevel next_level = cur_level;
+ int i = method->invocation_count();
+ int b = method->backedge_count();
+
+ switch(cur_level) {
+ case CompLevel_none:
+ {
+ methodDataOop mdo = method->method_data();
+ if (mdo != NULL) {
+ int mdo_i = mdo->invocation_count();
+ int mdo_b = mdo->backedge_count();
+ // If we were at full profile level, would we switch to full opt?
+ if ((this->*p)(mdo_i, mdo_b, CompLevel_full_profile)) {
+ next_level = CompLevel_full_optimization;
+ }
+ }
+ }
+ if (next_level == cur_level && (this->*p)(i, b, cur_level)) {
+ if (is_trivial(method)) {
+ next_level = CompLevel_simple;
+ } else {
+ next_level = CompLevel_full_profile;
+ }
+ }
+ break;
+ case CompLevel_limited_profile:
+ case CompLevel_full_profile:
+ if (is_trivial(method)) {
+ next_level = CompLevel_simple;
+ } else {
+ methodDataOop mdo = method->method_data();
+ guarantee(mdo != NULL, "MDO should always exist");
+ if (mdo->would_profile()) {
+ int mdo_i = mdo->invocation_count();
+ int mdo_b = mdo->backedge_count();
+ if ((this->*p)(mdo_i, mdo_b, cur_level)) {
+ next_level = CompLevel_full_optimization;
+ }
+ } else {
+ next_level = CompLevel_full_optimization;
+ }
+ }
+ break;
+ }
+ return next_level;
+}
+
+// Determine if a method should be compiled with a normal entry point at a different level.
+CompLevel SimpleThresholdPolicy::call_event(methodOop method, CompLevel cur_level) {
+ CompLevel highest_level = (CompLevel)method->highest_comp_level();
+ if (cur_level == CompLevel_none && highest_level > cur_level) {
+ // TODO: We may want to try to do more extensive reprofiling in this case.
+ return highest_level;
+ }
+
+ CompLevel osr_level = (CompLevel) method->highest_osr_comp_level();
+ CompLevel next_level = common(&SimpleThresholdPolicy::call_predicate, method, cur_level);
+
+ // If OSR method level is greater than the regular method level, the levels should be
+ // equalized by raising the regular method level in order to avoid OSRs during each
+ // invocation of the method.
+ if (osr_level == CompLevel_full_optimization && cur_level == CompLevel_full_profile) {
+ methodDataOop mdo = method->method_data();
+ guarantee(mdo != NULL, "MDO should not be NULL");
+ if (mdo->invocation_count() >= 1) {
+ next_level = CompLevel_full_optimization;
+ }
+ } else {
+ next_level = MAX2(osr_level, next_level);
+ }
+
+ return next_level;
+}
+
+// Determine if we should do an OSR compilation of a given method.
+CompLevel SimpleThresholdPolicy::loop_event(methodOop method, CompLevel cur_level) {
+ if (cur_level == CompLevel_none) {
+ // If there is a live OSR method that means that we deopted to the interpreter
+ // for the transition.
+ CompLevel osr_level = (CompLevel)method->highest_osr_comp_level();
+ if (osr_level > CompLevel_none) {
+ return osr_level;
+ }
+ }
+ return common(&SimpleThresholdPolicy::loop_predicate, method, cur_level);
+}
+
+
+// Handle the invocation event.
+void SimpleThresholdPolicy::method_invocation_event(methodHandle mh, methodHandle imh,
+ CompLevel level, TRAPS) {
+ if (is_compilation_enabled() && !CompileBroker::compilation_is_in_queue(mh, InvocationEntryBci)) {
+ CompLevel next_level = call_event(mh(), level);
+ if (next_level != level) {
+ compile(mh, InvocationEntryBci, next_level, THREAD);
+ }
+ }
+}
+
+// Handle the back branch event. Notice that we can compile the method
+// with a regular entry from here.
+void SimpleThresholdPolicy::method_back_branch_event(methodHandle mh, methodHandle imh,
+ int bci, CompLevel level, TRAPS) {
+ // If the method is already compiling, quickly bail out.
+ if (is_compilation_enabled() && !CompileBroker::compilation_is_in_queue(mh, bci)) {
+ // Use loop event as an opportinity to also check there's been
+ // enough calls.
+ CompLevel cur_level = comp_level(mh());
+ CompLevel next_level = call_event(mh(), cur_level);
+ CompLevel next_osr_level = loop_event(mh(), level);
+
+ next_level = MAX2(next_level,
+ next_osr_level < CompLevel_full_optimization ? next_osr_level : cur_level);
+ bool is_compiling = false;
+ if (next_level != cur_level) {
+ compile(mh, InvocationEntryBci, next_level, THREAD);
+ is_compiling = true;
+ }
+
+ // Do the OSR version
+ if (!is_compiling && next_osr_level != level) {
+ compile(mh, bci, next_osr_level, THREAD);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+class CompileTask;
+class CompileQueue;
+
+class SimpleThresholdPolicy : public CompilationPolicy {
+ int _c1_count, _c2_count;
+
+ // Check if the counter is big enough and set carry (effectively infinity).
+ inline void set_carry_if_necessary(InvocationCounter *counter);
+ // Set carry flags in the counters (in methodOop and MDO).
+ inline void handle_counter_overflow(methodOop method);
+ // Call and loop predicates determine whether a transition to a higher compilation
+ // level should be performed (pointers to predicate functions are passed to common_TF().
+ // Predicates also take compiler load into account.
+ typedef bool (SimpleThresholdPolicy::*Predicate)(int i, int b, CompLevel cur_level);
+ bool call_predicate(int i, int b, CompLevel cur_level);
+ bool loop_predicate(int i, int b, CompLevel cur_level);
+ // Common transition function. Given a predicate determines if a method should transition to another level.
+ CompLevel common(Predicate p, methodOop method, CompLevel cur_level);
+ // Transition functions.
+ // call_event determines if a method should be compiled at a different
+ // level with a regular invocation entry.
+ CompLevel call_event(methodOop method, CompLevel cur_level);
+ // loop_event checks if a method should be OSR compiled at a different
+ // level.
+ CompLevel loop_event(methodOop method, CompLevel cur_level);
+
+protected:
+ int c1_count() const { return _c1_count; }
+ int c2_count() const { return _c2_count; }
+ void set_c1_count(int x) { _c1_count = x; }
+ void set_c2_count(int x) { _c2_count = x; }
+
+ enum EventType { CALL, LOOP, COMPILE };
+ void print_event(EventType type, methodHandle mh, methodHandle imh, int bci, CompLevel level);
+ // Print policy-specific information if necessary
+ virtual void print_specific(EventType type, methodHandle mh, methodHandle imh, int bci, CompLevel level) { }
+ // Check if the method can be compiled, change level if necessary
+ void compile(methodHandle mh, int bci, CompLevel level, TRAPS);
+ // Submit a given method for compilation
+ virtual void submit_compile(methodHandle mh, int bci, CompLevel level, TRAPS);
+ // Simple methods are as good being compiled with C1 as C2.
+ // This function tells if it's such a function.
+ inline bool is_trivial(methodOop method);
+
+ // Predicate helpers are used by .*_predicate() methods as well as others.
+ // They check the given counter values, multiplied by the scale against the thresholds.
+ template<CompLevel level> static inline bool call_predicate_helper(int i, int b, double scale);
+ template<CompLevel level> static inline bool loop_predicate_helper(int i, int b, double scale);
+
+ // Get a compilation level for a given method.
+ static CompLevel comp_level(methodOop method) {
+ nmethod *nm = method->code();
+ if (nm != NULL && nm->is_in_use()) {
+ return (CompLevel)nm->comp_level();
+ }
+ return CompLevel_none;
+ }
+ virtual void method_invocation_event(methodHandle method, methodHandle inlinee,
+ CompLevel level, TRAPS);
+ virtual void method_back_branch_event(methodHandle method, methodHandle inlinee,
+ int bci, CompLevel level, TRAPS);
+public:
+ SimpleThresholdPolicy() : _c1_count(0), _c2_count(0) { }
+ virtual int compiler_count(CompLevel comp_level) {
+ if (is_c1_compile(comp_level)) return c1_count();
+ if (is_c2_compile(comp_level)) return c2_count();
+ return 0;
+ }
+ virtual void do_safepoint_work() { }
+ virtual void delay_compilation(methodOop method) { }
+ virtual void disable_compilation(methodOop method) { }
+ // TODO: we should honour reprofiling requests in the future. Currently reprofiling
+ // would happen but not to the extent we would ideally like.
+ virtual void reprofile(ScopeDesc* trap_scope, bool is_osr) { }
+ virtual nmethod* event(methodHandle method, methodHandle inlinee,
+ int branch_bci, int bci, CompLevel comp_level, TRAPS);
+ // Select task is called by CompileBroker. We should return a task or NULL.
+ virtual CompileTask* select_task(CompileQueue* compile_queue);
+ // Tell the runtime if we think a given method is adequately profiled.
+ virtual bool is_mature(methodOop method);
+ // Initialize: set compiler thread count
+ virtual void initialize();
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.inline.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+
+template<CompLevel level>
+bool SimpleThresholdPolicy::call_predicate_helper(int i, int b, double scale) {
+ switch(level) {
+ case CompLevel_none:
+ case CompLevel_limited_profile:
+ return (i > Tier3InvocationThreshold * scale) ||
+ (i > Tier3MinInvocationThreshold * scale && i + b > Tier3CompileThreshold * scale);
+ case CompLevel_full_profile:
+ return (i > Tier4InvocationThreshold * scale) ||
+ (i > Tier4MinInvocationThreshold * scale && i + b > Tier4CompileThreshold * scale);
+ }
+ return true;
+}
+
+template<CompLevel level>
+bool SimpleThresholdPolicy::loop_predicate_helper(int i, int b, double scale) {
+ switch(level) {
+ case CompLevel_none:
+ case CompLevel_limited_profile:
+ return b > Tier3BackEdgeThreshold * scale;
+ case CompLevel_full_profile:
+ return b > Tier4BackEdgeThreshold * scale;
+ }
+ return true;
+}
+
+// Simple methods are as good being compiled with C1 as C2.
+// Determine if a given method is such a case.
+bool SimpleThresholdPolicy::is_trivial(methodOop method) {
+ if (method->is_accessor()) return true;
+ if (method->code() != NULL) {
+ methodDataOop mdo = method->method_data();
+ if (mdo != NULL && mdo->num_loops() == 0 &&
+ (method->code_size() < 5 || (mdo->num_blocks() < 4) && (method->code_size() < 15))) {
+ return !mdo->would_profile();
+ }
+ }
+ return false;
+}
--- a/hotspot/src/share/vm/runtime/sweeper.cpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/runtime/sweeper.cpp Fri Sep 03 17:51:07 2010 -0700
@@ -368,8 +368,7 @@
disconnected++;
} else if (nm->is_speculatively_disconnected()) {
// This method was previously considered for preemptive unloading and was not called since then
- nm->method()->invocation_counter()->decay();
- nm->method()->backedge_counter()->decay();
+ CompilationPolicy::policy()->delay_compilation(nm->method());
nm->make_not_entrant();
made_not_entrant++;
}
--- a/hotspot/src/share/vm/utilities/accessFlags.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/utilities/accessFlags.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -39,7 +39,8 @@
JVM_ACC_HAS_LOOPS = 0x40000000, // Method has loops
JVM_ACC_LOOPS_FLAG_INIT = (int)0x80000000,// The loop flag has been initialized
JVM_ACC_QUEUED = 0x01000000, // Queued for compilation
- JVM_ACC_NOT_TIER1_COMPILABLE = 0x04000000,
+ JVM_ACC_NOT_C2_COMPILABLE = 0x02000000,
+ JVM_ACC_NOT_C1_COMPILABLE = 0x04000000,
JVM_ACC_NOT_OSR_COMPILABLE = 0x08000000,
JVM_ACC_HAS_LINE_NUMBER_TABLE = 0x00100000,
JVM_ACC_HAS_CHECKED_EXCEPTIONS = 0x00400000,
@@ -47,6 +48,7 @@
JVM_ACC_IS_OLD = 0x00010000, // RedefineClasses() has replaced this method
JVM_ACC_IS_OBSOLETE = 0x00020000, // RedefineClasses() has made method obsolete
JVM_ACC_IS_PREFIXED_NATIVE = 0x00040000, // JVMTI has prefixed this native method
+
JVM_MH_INVOKE_BITS // = 0x10001100 // MethodHandle.invoke quasi-native
= (JVM_ACC_NATIVE | JVM_ACC_SYNTHETIC | JVM_ACC_MONITOR_MATCH),
@@ -108,7 +110,8 @@
bool has_loops () const { return (_flags & JVM_ACC_HAS_LOOPS ) != 0; }
bool loops_flag_init () const { return (_flags & JVM_ACC_LOOPS_FLAG_INIT ) != 0; }
bool queued_for_compilation () const { return (_flags & JVM_ACC_QUEUED ) != 0; }
- bool is_not_tier1_compilable () const { return (_flags & JVM_ACC_NOT_TIER1_COMPILABLE ) != 0; }
+ bool is_not_c1_compilable () const { return (_flags & JVM_ACC_NOT_C1_COMPILABLE ) != 0; }
+ bool is_not_c2_compilable () const { return (_flags & JVM_ACC_NOT_C2_COMPILABLE ) != 0; }
bool is_not_osr_compilable () const { return (_flags & JVM_ACC_NOT_OSR_COMPILABLE ) != 0; }
bool has_linenumber_table () const { return (_flags & JVM_ACC_HAS_LINE_NUMBER_TABLE ) != 0; }
bool has_checked_exceptions () const { return (_flags & JVM_ACC_HAS_CHECKED_EXCEPTIONS ) != 0; }
@@ -172,7 +175,8 @@
void set_has_monitor_bytecodes() { atomic_set_bits(JVM_ACC_HAS_MONITOR_BYTECODES); }
void set_has_loops() { atomic_set_bits(JVM_ACC_HAS_LOOPS); }
void set_loops_flag_init() { atomic_set_bits(JVM_ACC_LOOPS_FLAG_INIT); }
- void set_not_tier1_compilable() { atomic_set_bits(JVM_ACC_NOT_TIER1_COMPILABLE); }
+ void set_not_c1_compilable() { atomic_set_bits(JVM_ACC_NOT_C1_COMPILABLE); }
+ void set_not_c2_compilable() { atomic_set_bits(JVM_ACC_NOT_C2_COMPILABLE); }
void set_not_osr_compilable() { atomic_set_bits(JVM_ACC_NOT_OSR_COMPILABLE); }
void set_has_linenumber_table() { atomic_set_bits(JVM_ACC_HAS_LINE_NUMBER_TABLE); }
void set_has_checked_exceptions() { atomic_set_bits(JVM_ACC_HAS_CHECKED_EXCEPTIONS); }
--- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -710,24 +710,41 @@
// Enumeration to distinguish tiers of compilation
enum CompLevel {
- CompLevel_none = 0,
- CompLevel_fast_compile = 1,
- CompLevel_full_optimization = 2,
+ CompLevel_any = -1,
+ CompLevel_all = -1,
+ CompLevel_none = 0, // Interpreter
+ CompLevel_simple = 1, // C1
+ CompLevel_limited_profile = 2, // C1, invocation & backedge counters
+ CompLevel_full_profile = 3, // C1, invocation & backedge counters + mdo
+ CompLevel_full_optimization = 4, // C2
- CompLevel_highest_tier = CompLevel_full_optimization,
-#ifdef TIERED
- CompLevel_initial_compile = CompLevel_fast_compile
+#if defined(COMPILER2)
+ CompLevel_highest_tier = CompLevel_full_optimization, // pure C2 and tiered
+#elif defined(COMPILER1)
+ CompLevel_highest_tier = CompLevel_simple, // pure C1
#else
- CompLevel_initial_compile = CompLevel_full_optimization
-#endif // TIERED
+ CompLevel_highest_tier = CompLevel_none,
+#endif
+
+#if defined(TIERED)
+ CompLevel_initial_compile = CompLevel_full_profile // tiered
+#elif defined(COMPILER1)
+ CompLevel_initial_compile = CompLevel_simple // pure C1
+#elif defined(COMPILER2)
+ CompLevel_initial_compile = CompLevel_full_optimization // pure C2
+#else
+ CompLevel_initial_compile = CompLevel_none
+#endif
};
-inline bool is_tier1_compile(int comp_level) {
- return comp_level == CompLevel_fast_compile;
+inline bool is_c1_compile(int comp_level) {
+ return comp_level > CompLevel_none && comp_level < CompLevel_full_optimization;
}
-inline bool is_tier2_compile(int comp_level) {
+
+inline bool is_c2_compile(int comp_level) {
return comp_level == CompLevel_full_optimization;
}
+
inline bool is_highest_tier_compile(int comp_level) {
return comp_level == CompLevel_highest_tier;
}
--- a/hotspot/src/share/vm/utilities/macros.hpp Thu Sep 02 11:40:02 2010 -0700
+++ b/hotspot/src/share/vm/utilities/macros.hpp Fri Sep 03 17:51:07 2010 -0700
@@ -71,6 +71,14 @@
#define NOT_COMPILER2(code) code
#endif // COMPILER2
+#ifdef TIERED
+#define TIERED_ONLY(code) code
+#define NOT_TIERED(code)
+#else
+#define TIERED_ONLY(code)
+#define NOT_TIERED(code) code
+#endif // TIERED
+
// PRODUCT variant
#ifdef PRODUCT