# HG changeset patch # User Doug Simon # Date 1433344325 -7200 # Node ID e0f31128493061ea5bb54a0e90e86167ecd4cd4c # Parent 4c00096fc415405d93c8e1bcf012d69357e14e9a made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider diff -r 4c00096fc415 -r e0f311284930 graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java --- a/graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java Wed Jun 03 16:52:41 2015 +0200 +++ b/graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java Wed Jun 03 17:12:05 2015 +0200 @@ -22,17 +22,6 @@ */ package com.oracle.graal.asm.test; -import com.oracle.jvmci.code.RegisterConfig; -import com.oracle.jvmci.code.CompilationResult; -import com.oracle.jvmci.code.CodeUtil; -import com.oracle.jvmci.code.InstalledCode; -import com.oracle.jvmci.code.CallingConvention; -import com.oracle.jvmci.code.DisassemblerProvider; -import com.oracle.jvmci.code.TargetDescription; -import com.oracle.jvmci.code.CodeCacheProvider; -import com.oracle.jvmci.code.InvalidInstalledCodeException; -import com.oracle.jvmci.meta.MetaAccessProvider; -import com.oracle.jvmci.meta.ResolvedJavaMethod; import java.lang.reflect.*; import org.junit.*; @@ -41,8 +30,11 @@ import com.oracle.graal.phases.util.*; import com.oracle.graal.runtime.*; import com.oracle.graal.test.*; +import com.oracle.jvmci.code.*; import com.oracle.jvmci.debug.*; import com.oracle.jvmci.debug.Debug.Scope; +import com.oracle.jvmci.meta.*; +import com.oracle.jvmci.service.*; public abstract class AssemblerTest extends GraalTest { @@ -76,8 +68,7 @@ InstalledCode code = codeCache.addMethod(method, compResult, null, null); - DisassemblerProvider dis = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getDisassembler(); - if (dis != null) { + for (DisassemblerProvider dis : Services.load(DisassemblerProvider.class)) { String disasm = dis.disassemble(code); Assert.assertTrue(code.toString(), disasm == null || disasm.length() > 0); } diff -r 4c00096fc415 -r e0f311284930 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Wed Jun 03 16:52:41 2015 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Wed Jun 03 17:12:05 2015 +0200 @@ -79,8 +79,6 @@ public abstract SuitesProvider getSuites(); - public abstract DisassemblerProvider getDisassembler(); - public TargetDescription getTarget() { return providers.getCodeCache().getTarget(); } diff -r 4c00096fc415 -r e0f311284930 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Wed Jun 03 16:52:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Wed Jun 03 17:12:05 2015 +0200 @@ -58,7 +58,6 @@ HotSpotLoweringProvider lowerer; HotSpotSnippetReflectionProvider snippetReflection; HotSpotReplacementsImpl replacements; - HotSpotDisassemblerProvider disassembler; HotSpotSuitesProvider suites; HotSpotWordTypes wordTypes; Plugins plugins; @@ -84,9 +83,6 @@ try (InitTimer rt = timer("create Replacements provider")) { replacements = createReplacements(runtime, p, snippetReflection); } - try (InitTimer rt = timer("create Disassembler provider")) { - disassembler = createDisassembler(runtime); - } try (InitTimer rt = timer("create WordTypes")) { wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); } @@ -97,7 +93,7 @@ try (InitTimer rt = timer("create Suites provider")) { suites = createSuites(runtime, plugins); } - providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, snippetReflection, wordTypes, plugins); + providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, suites, registers, snippetReflection, wordTypes, plugins); } try (InitTimer rt = timer("instantiate backend")) { return createBackend(runtime, providers); @@ -120,10 +116,6 @@ return new HotSpotRegisters(AMD64.r15, AMD64.r12, AMD64.rsp); } - protected HotSpotDisassemblerProvider createDisassembler(HotSpotGraalRuntimeProvider runtime) { - return new HotSpotDisassemblerProvider(runtime); - } - protected HotSpotReplacementsImpl createReplacements(HotSpotGraalRuntimeProvider runtime, Providers p, SnippetReflectionProvider snippetReflection) { return new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), p.getCodeCache().getTarget()); } @@ -172,15 +164,15 @@ } else { /* * System V Application Binary Interface, AMD64 Architecture Processor Supplement - * + * * Draft Version 0.96 - * + * * http://www.uclibc.org/docs/psABI-x86_64.pdf - * + * * 3.2.1 - * + * * ... - * + * * This subsection discusses usage of each register. Registers %rbp, %rbx and %r12 * through %r15 "belong" to the calling function and the called function is required to * preserve their values. In other words, a called function must preserve these diff -r 4c00096fc415 -r e0f311284930 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Wed Jun 03 16:52:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Wed Jun 03 17:12:05 2015 +0200 @@ -57,13 +57,11 @@ Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, stampProvider); HotSpotSnippetReflectionProvider snippetReflection = new HotSpotSnippetReflectionProvider(runtime); HotSpotReplacementsImpl replacements = new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), target); - HotSpotDisassemblerProvider disassembler = new HotSpotDisassemblerProvider(runtime); HotSpotWordTypes wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); Plugins plugins = createGraphBuilderPlugins(runtime, metaAccess, constantReflection, foreignCalls, stampProvider, snippetReflection, replacements, wordTypes); replacements.setGraphBuilderPlugins(plugins); HotSpotSuitesProvider suites = createSuites(runtime, plugins); - HotSpotProviders providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, snippetReflection, - wordTypes, plugins); + HotSpotProviders providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, suites, registers, snippetReflection, wordTypes, plugins); return createBackend(runtime, providers); } diff -r 4c00096fc415 -r e0f311284930 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Wed Jun 03 16:52:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Wed Jun 03 17:12:05 2015 +0200 @@ -236,11 +236,6 @@ return getProviders().getSuites(); } - @Override - public DisassemblerProvider getDisassembler() { - return getProviders().getDisassembler(); - } - protected void profileInstructions(LIR lir, CompilationResultBuilder crb) { if (HotSpotBackend.Options.ASMInstructionProfiling.getValue() != null) { HotSpotInstructionProfiling.countInstructions(lir, crb.asm); diff -r 4c00096fc415 -r e0f311284930 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Wed Jun 03 16:52:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Wed Jun 03 17:12:05 2015 +0200 @@ -22,26 +22,22 @@ */ package com.oracle.graal.hotspot.meta; -import com.oracle.jvmci.code.DisassemblerProvider; -import com.oracle.jvmci.code.InstalledCode; -import com.oracle.graal.hotspot.*; +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; + +import com.oracle.jvmci.code.*; import com.oracle.jvmci.hotspot.*; +import com.oracle.jvmci.service.*; /** * HotSpot implementation of {@link DisassemblerProvider}. */ +@ServiceProvider(DisassemblerProvider.class) public class HotSpotDisassemblerProvider implements DisassemblerProvider { - protected final HotSpotGraalRuntimeProvider runtime; - - public HotSpotDisassemblerProvider(HotSpotGraalRuntimeProvider runtime) { - this.runtime = runtime; - } - public String disassemble(InstalledCode code) { if (code.isValid()) { long codeBlob = ((HotSpotInstalledCode) code).getAddress(); - return runtime.getCompilerToVM().disassembleCodeBlob(codeBlob); + return runtime().getCompilerToVM().disassembleCodeBlob(codeBlob); } return null; } diff -r 4c00096fc415 -r e0f311284930 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java Wed Jun 03 16:52:41 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java Wed Jun 03 17:12:05 2015 +0200 @@ -38,7 +38,6 @@ */ public class HotSpotProviders extends Providers { - private final HotSpotDisassemblerProvider disassembler; private final SuitesProvider suites; private final HotSpotRegistersProvider registers; private final SnippetReflectionProvider snippetReflection; @@ -46,10 +45,9 @@ private final Plugins graphBuilderPlugins; public HotSpotProviders(MetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, ConstantReflectionProvider constantReflection, HotSpotForeignCallsProvider foreignCalls, - LoweringProvider lowerer, Replacements replacements, HotSpotDisassemblerProvider disassembler, SuitesProvider suites, HotSpotRegistersProvider registers, - SnippetReflectionProvider snippetReflection, HotSpotWordTypes wordTypes, Plugins graphBuilderPlugins) { + LoweringProvider lowerer, Replacements replacements, SuitesProvider suites, HotSpotRegistersProvider registers, SnippetReflectionProvider snippetReflection, + HotSpotWordTypes wordTypes, Plugins graphBuilderPlugins) { super(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, new HotSpotStampProvider()); - this.disassembler = disassembler; this.suites = suites; this.registers = registers; this.snippetReflection = snippetReflection; @@ -62,10 +60,6 @@ return (HotSpotCodeCacheProvider) super.getCodeCache(); } - public HotSpotDisassemblerProvider getDisassembler() { - return disassembler; - } - @Override public HotSpotForeignCallsProvider getForeignCalls() { return (HotSpotForeignCallsProvider) super.getForeignCalls();