Mercurial > hg > graal-jvmci-8
diff graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java @ 14574:6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
author | twisti |
---|---|
date | Mon, 17 Mar 2014 17:32:35 -0700 |
parents | e14198669e5c |
children | de31e0f56fe7 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Mon Mar 17 23:46:20 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Mon Mar 17 17:32:35 2014 -0700 @@ -36,11 +36,13 @@ import com.oracle.graal.api.code.CompilationResult.PrimitiveData; import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; +import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.bridge.*; import com.oracle.graal.hotspot.bridge.CompilerToVM.CodeInstallResult; import com.oracle.graal.hotspot.data.*; import com.oracle.graal.java.*; +import com.oracle.graal.lir.asm.*; import com.oracle.graal.printer.*; /** @@ -60,6 +62,54 @@ protected abstract RegisterConfig createRegisterConfig(); + /** + * Constants used to mark special positions in code being installed into the code cache by Graal + * C++ code. + */ + public enum MarkId { + VERIFIED_ENTRY(config().codeInstallerMarkIdVerifiedEntry), + UNVERIFIED_ENTRY(config().codeInstallerMarkIdUnverifiedEntry), + OSR_ENTRY(config().codeInstallerMarkIdOsrEntry), + EXCEPTION_HANDLER_ENTRY(config().codeInstallerMarkIdExceptionHandlerEntry), + DEOPT_HANDLER_ENTRY(config().codeInstallerMarkIdDeoptHandlerEntry), + INVOKEINTERFACE(config().codeInstallerMarkIdInvokeinterface), + INVOKEVIRTUAL(config().codeInstallerMarkIdInvokevirtual), + INVOKESTATIC(config().codeInstallerMarkIdInvokestatic), + INVOKESPECIAL(config().codeInstallerMarkIdInvokespecial), + INLINE_INVOKE(config().codeInstallerMarkIdInlineInvoke), + POLL_NEAR(config().codeInstallerMarkIdPollNear), + POLL_RETURN_NEAR(config().codeInstallerMarkIdPollReturnNear), + POLL_FAR(config().codeInstallerMarkIdPollFar), + POLL_RETURN_FAR(config().codeInstallerMarkIdPollReturnFar); + + private final int value; + + private MarkId(int value) { + this.value = value; + } + + private static HotSpotVMConfig config() { + return HotSpotGraalRuntime.runtime().getConfig(); + } + + public static MarkId getEnum(int value) { + for (MarkId e : values()) { + if (e.value == value) { + return e; + } + } + throw GraalInternalError.shouldNotReachHere("unknown enum value " + value); + } + + /** + * Helper method to {@link CompilationResultBuilder#recordMark(Object) record a mark} with a + * {@link CompilationResultBuilder}. + */ + public static void recordMark(CompilationResultBuilder crb, MarkId mark) { + crb.recordMark(mark.value); + } + } + @Override public String disassemble(CompilationResult compResult, InstalledCode installedCode) { byte[] code = installedCode == null ? Arrays.copyOf(compResult.getTargetCode(), compResult.getTargetCodeSize()) : installedCode.getCode(); @@ -88,7 +138,7 @@ hcf.addOperandComment(site.pcOffset, "{" + site.data.toString() + "}"); } for (Mark mark : compResult.getMarks()) { - hcf.addComment(mark.pcOffset, getMarkName(mark)); + hcf.addComment(mark.pcOffset, MarkId.getEnum((int) mark.id).toString()); } } return hcf.toEmbeddedString(); @@ -114,25 +164,6 @@ return String.valueOf(call.target); } - /** - * Decodes a mark to a mnemonic if possible. - */ - private static String getMarkName(Mark mark) { - Field[] fields = Marks.class.getDeclaredFields(); - for (Field f : fields) { - if (Modifier.isStatic(f.getModifiers()) && f.getName().startsWith("MARK_")) { - f.setAccessible(true); - try { - if (f.get(null).equals(mark.id)) { - return f.getName(); - } - } catch (Exception e) { - } - } - } - return "MARK:" + mark.id; - } - private static void addExceptionHandlersComment(CompilationResult compResult, HexCodeFile hcf) { if (!compResult.getExceptionHandlers().isEmpty()) { String nl = HexCodeFile.NEW_LINE;