changeset 21707:e0f311284930

made HotSpotDisassemblerProvider a stand alone JVMCI service implementation of DisassemblerProvider
author Doug Simon <doug.simon@oracle.com>
date Wed, 03 Jun 2015 17:12:05 +0200
parents 4c00096fc415
children 6df25b1418be
files graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/HexCodeFile.java
diffstat 7 files changed, 19 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- 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);
             }
--- 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();
     }
--- 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
--- 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);
     }
--- 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);
--- 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;
     }
--- 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();