Search in sources :

Example 1 with JumpTable

use of org.graalvm.compiler.code.CompilationResult.JumpTable in project graal by oracle.

the class HotSpotCompiledCodeBuilder method createCompiledCode.

public static HotSpotCompiledCode createCompiledCode(CodeCacheProvider codeCache, ResolvedJavaMethod method, HotSpotCompilationRequest compRequest, CompilationResult compResult) {
    String name = compResult.getName();
    byte[] targetCode = compResult.getTargetCode();
    int targetCodeSize = compResult.getTargetCodeSize();
    Site[] sites = getSortedSites(codeCache, compResult);
    Assumption[] assumptions = compResult.getAssumptions();
    ResolvedJavaMethod[] methods = compResult.getMethods();
    List<CodeAnnotation> annotations = compResult.getAnnotations();
    Comment[] comments = new Comment[annotations.size()];
    if (!annotations.isEmpty()) {
        for (int i = 0; i < comments.length; i++) {
            CodeAnnotation annotation = annotations.get(i);
            String text;
            if (annotation instanceof CodeComment) {
                CodeComment codeComment = (CodeComment) annotation;
                text = codeComment.value;
            } else if (annotation instanceof JumpTable) {
                JumpTable jumpTable = (JumpTable) annotation;
                text = "JumpTable [" + jumpTable.low + " .. " + jumpTable.high + "]";
            } else {
                text = annotation.toString();
            }
            comments[i] = new Comment(annotation.position, text);
        }
    }
    DataSection data = compResult.getDataSection();
    byte[] dataSection = new byte[data.getSectionSize()];
    ByteBuffer buffer = ByteBuffer.wrap(dataSection).order(ByteOrder.nativeOrder());
    Builder<DataPatch> patchBuilder = Stream.builder();
    data.buildDataSection(buffer, (position, vmConstant) -> {
        patchBuilder.accept(new DataPatch(position, new ConstantReference(vmConstant)));
    });
    int dataSectionAlignment = data.getSectionAlignment();
    DataPatch[] dataSectionPatches = patchBuilder.build().toArray(len -> new DataPatch[len]);
    int totalFrameSize = compResult.getTotalFrameSize();
    StackSlot customStackArea = compResult.getCustomStackArea();
    boolean isImmutablePIC = compResult.isImmutablePIC();
    if (method instanceof HotSpotResolvedJavaMethod) {
        HotSpotResolvedJavaMethod hsMethod = (HotSpotResolvedJavaMethod) method;
        int entryBCI = compResult.getEntryBCI();
        boolean hasUnsafeAccess = compResult.hasUnsafeAccess();
        int id;
        long jvmciEnv;
        if (compRequest != null) {
            id = compRequest.getId();
            jvmciEnv = compRequest.getJvmciEnv();
        } else {
            id = hsMethod.allocateCompileId(entryBCI);
            jvmciEnv = 0L;
        }
        return new HotSpotCompiledNmethod(name, targetCode, targetCodeSize, sites, assumptions, methods, comments, dataSection, dataSectionAlignment, dataSectionPatches, isImmutablePIC, totalFrameSize, customStackArea, hsMethod, entryBCI, id, jvmciEnv, hasUnsafeAccess);
    } else {
        return new HotSpotCompiledCode(name, targetCode, targetCodeSize, sites, assumptions, methods, comments, dataSection, dataSectionAlignment, dataSectionPatches, isImmutablePIC, totalFrameSize, customStackArea);
    }
}
Also used : Site(jdk.vm.ci.code.site.Site) CodeAnnotation(org.graalvm.compiler.code.CompilationResult.CodeAnnotation) HotSpotCompiledCode(jdk.vm.ci.hotspot.HotSpotCompiledCode) ConstantReference(jdk.vm.ci.code.site.ConstantReference) JumpTable(org.graalvm.compiler.code.CompilationResult.JumpTable) Assumption(jdk.vm.ci.meta.Assumptions.Assumption) CodeComment(org.graalvm.compiler.code.CompilationResult.CodeComment) Comment(jdk.vm.ci.hotspot.HotSpotCompiledCode.Comment) HotSpotResolvedJavaMethod(jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod) StackSlot(jdk.vm.ci.code.StackSlot) ByteBuffer(java.nio.ByteBuffer) Infopoint(jdk.vm.ci.code.site.Infopoint) CodeComment(org.graalvm.compiler.code.CompilationResult.CodeComment) DataPatch(jdk.vm.ci.code.site.DataPatch) DataSection(org.graalvm.compiler.code.DataSection) HotSpotCompiledNmethod(jdk.vm.ci.hotspot.HotSpotCompiledNmethod) HotSpotResolvedJavaMethod(jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod) ResolvedJavaMethod(jdk.vm.ci.meta.ResolvedJavaMethod)

Example 2 with JumpTable

use of org.graalvm.compiler.code.CompilationResult.JumpTable in project graal by oracle.

the class HexCodeFile method addAnnotations.

/**
 * Adds any jump tables, lookup tables or code comments from a list of code annotations.
 */
public static void addAnnotations(HexCodeFile hcf, List<CodeAnnotation> annotations) {
    if (annotations == null || annotations.isEmpty()) {
        return;
    }
    for (CodeAnnotation a : annotations) {
        if (a instanceof JumpTable) {
            JumpTable table = (JumpTable) a;
            hcf.jumpTables.add(table);
        } else if (a instanceof CodeComment) {
            CodeComment comment = (CodeComment) a;
            hcf.addComment(comment.position, comment.value);
        }
    }
}
Also used : CodeAnnotation(org.graalvm.compiler.code.CompilationResult.CodeAnnotation) CodeComment(org.graalvm.compiler.code.CompilationResult.CodeComment) JumpTable(org.graalvm.compiler.code.CompilationResult.JumpTable)

Example 3 with JumpTable

use of org.graalvm.compiler.code.CompilationResult.JumpTable in project graal by oracle.

the class HexCodeFile method writeTo.

public void writeTo(OutputStream out) {
    PrintStream ps = out instanceof PrintStream ? (PrintStream) out : new PrintStream(out);
    ps.printf("Platform %s %d %s%n", isa, wordWidth, SECTION_DELIM);
    ps.printf("HexCode %x %s %s%n", startAddress, HexCodeFile.hexCodeString(code), SECTION_DELIM);
    for (JumpTable table : jumpTables) {
        ps.printf("JumpTable %d %d %d %d %s%n", table.position, table.entrySize, table.low, table.high, SECTION_DELIM);
    }
    for (Map.Entry<Integer, List<String>> e : comments.entrySet()) {
        int pos = e.getKey();
        for (String comment : e.getValue()) {
            ps.printf("Comment %d %s %s%n", pos, comment, SECTION_DELIM);
        }
    }
    for (Map.Entry<Integer, List<String>> e : operandComments.entrySet()) {
        for (String c : e.getValue()) {
            ps.printf("OperandComment %d %s %s%n", e.getKey(), c, SECTION_DELIM);
        }
    }
    ps.flush();
}
Also used : PrintStream(java.io.PrintStream) JumpTable(org.graalvm.compiler.code.CompilationResult.JumpTable) ArrayList(java.util.ArrayList) List(java.util.List) TreeMap(java.util.TreeMap) Map(java.util.Map)

Aggregations

JumpTable (org.graalvm.compiler.code.CompilationResult.JumpTable)3 CodeAnnotation (org.graalvm.compiler.code.CompilationResult.CodeAnnotation)2 CodeComment (org.graalvm.compiler.code.CompilationResult.CodeComment)2 PrintStream (java.io.PrintStream)1 ByteBuffer (java.nio.ByteBuffer)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1 StackSlot (jdk.vm.ci.code.StackSlot)1 ConstantReference (jdk.vm.ci.code.site.ConstantReference)1 DataPatch (jdk.vm.ci.code.site.DataPatch)1 Infopoint (jdk.vm.ci.code.site.Infopoint)1 Site (jdk.vm.ci.code.site.Site)1 HotSpotCompiledCode (jdk.vm.ci.hotspot.HotSpotCompiledCode)1 Comment (jdk.vm.ci.hotspot.HotSpotCompiledCode.Comment)1 HotSpotCompiledNmethod (jdk.vm.ci.hotspot.HotSpotCompiledNmethod)1 HotSpotResolvedJavaMethod (jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod)1 Assumption (jdk.vm.ci.meta.Assumptions.Assumption)1 ResolvedJavaMethod (jdk.vm.ci.meta.ResolvedJavaMethod)1