--- old/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.amd64/src/jdk/vm/ci/hotspot/amd64/AMD64HotSpotJVMCIBackendFactory.java 2015-11-02 17:05:52.000000000 -1000 +++ new/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.amd64/src/jdk/vm/ci/hotspot/amd64/AMD64HotSpotJVMCIBackendFactory.java 2015-11-02 17:05:52.000000000 -1000 @@ -22,18 +22,26 @@ */ package jdk.vm.ci.hotspot.amd64; -import static jdk.vm.ci.inittimer.InitTimer.*; +import static jdk.vm.ci.inittimer.InitTimer.timer; -import java.util.*; +import java.util.EnumSet; -import jdk.vm.ci.amd64.*; -import jdk.vm.ci.code.*; -import jdk.vm.ci.compiler.*; -import jdk.vm.ci.hotspot.*; -import jdk.vm.ci.inittimer.*; -import jdk.vm.ci.meta.*; -import jdk.vm.ci.runtime.*; -import jdk.vm.ci.service.*; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.code.stack.StackIntrospection; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotMetaAccessProvider; +import jdk.vm.ci.hotspot.HotSpotStackIntrospection; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.inittimer.InitTimer; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.runtime.JVMCIBackend; +import jdk.vm.ci.service.ServiceProvider; @ServiceProvider(HotSpotJVMCIBackendFactory.class) public class AMD64HotSpotJVMCIBackendFactory implements HotSpotJVMCIBackendFactory { @@ -68,6 +76,9 @@ if ((config.x86CPUFeatures & config.cpuLZCNT) != 0) { features.add(AMD64.CPUFeature.LZCNT); } + if ((config.x86CPUFeatures & config.cpuERMS) != 0) { + features.add(AMD64.CPUFeature.ERMS); + } if ((config.x86CPUFeatures & config.cpuAVX) != 0) { features.add(AMD64.CPUFeature.AVX); } @@ -77,12 +88,42 @@ if ((config.x86CPUFeatures & config.cpuAES) != 0) { features.add(AMD64.CPUFeature.AES); } - if ((config.x86CPUFeatures & config.cpuERMS) != 0) { - features.add(AMD64.CPUFeature.ERMS); + if ((config.x86CPUFeatures & config.cpu3DNOWPREFETCH) != 0) { + features.add(AMD64.CPUFeature.AMD_3DNOW_PREFETCH); } if ((config.x86CPUFeatures & config.cpuBMI1) != 0) { features.add(AMD64.CPUFeature.BMI1); } + if ((config.x86CPUFeatures & config.cpuBMI2) != 0) { + features.add(AMD64.CPUFeature.BMI2); + } + if ((config.x86CPUFeatures & config.cpuRTM) != 0) { + features.add(AMD64.CPUFeature.RTM); + } + if ((config.x86CPUFeatures & config.cpuADX) != 0) { + features.add(AMD64.CPUFeature.ADX); + } + if ((config.x86CPUFeatures & config.cpuAVX512F) != 0) { + features.add(AMD64.CPUFeature.AVX512F); + } + if ((config.x86CPUFeatures & config.cpuAVX512DQ) != 0) { + features.add(AMD64.CPUFeature.AVX512DQ); + } + if ((config.x86CPUFeatures & config.cpuAVX512PF) != 0) { + features.add(AMD64.CPUFeature.AVX512PF); + } + if ((config.x86CPUFeatures & config.cpuAVX512ER) != 0) { + features.add(AMD64.CPUFeature.AVX512ER); + } + if ((config.x86CPUFeatures & config.cpuAVX512CD) != 0) { + features.add(AMD64.CPUFeature.AVX512CD); + } + if ((config.x86CPUFeatures & config.cpuAVX512BW) != 0) { + features.add(AMD64.CPUFeature.AVX512BW); + } + if ((config.x86CPUFeatures & config.cpuAVX512VL) != 0) { + features.add(AMD64.CPUFeature.AVX512VL); + } return features; } @@ -97,12 +138,12 @@ return flags; } - protected TargetDescription createTarget(HotSpotVMConfig config, CompilerFactory compilerFactory) { + protected TargetDescription createTarget(HotSpotVMConfig config) { final int stackFrameAlignment = 16; final int implicitNullCheckLimit = 4096; final boolean inlineObjects = true; Architecture arch = new AMD64(computeFeatures(config), computeFlags(config)); - return new TargetDescription(compilerFactory.initializeArchitecture(arch), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects); + return new TargetDescription(arch, true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects); } protected HotSpotConstantReflectionProvider createConstantReflection(HotSpotJVMCIRuntimeProvider runtime) { @@ -132,15 +173,16 @@ } @SuppressWarnings("try") - public JVMCIBackend createJVMCIBackend(HotSpotJVMCIRuntimeProvider runtime, CompilerFactory compilerFactory, JVMCIBackend host) { + public JVMCIBackend createJVMCIBackend(HotSpotJVMCIRuntimeProvider runtime, JVMCIBackend host) { assert host == null; - TargetDescription target = createTarget(runtime.getConfig(), compilerFactory); + TargetDescription target = createTarget(runtime.getConfig()); RegisterConfig regConfig; HotSpotCodeCacheProvider codeCache; ConstantReflectionProvider constantReflection; HotSpotMetaAccessProvider metaAccess; + StackIntrospection stackIntrospection; try (InitTimer t = timer("create providers")) { try (InitTimer rt = timer("create MetaAccess provider")) { metaAccess = createMetaAccess(runtime); @@ -154,13 +196,16 @@ try (InitTimer rt = timer("create ConstantReflection provider")) { constantReflection = createConstantReflection(runtime); } + try (InitTimer rt = timer("create StackIntrospection provider")) { + stackIntrospection = new HotSpotStackIntrospection(runtime); + } } try (InitTimer rt = timer("instantiate backend")) { - return createBackend(metaAccess, codeCache, constantReflection); + return createBackend(metaAccess, codeCache, constantReflection, stackIntrospection); } } - protected JVMCIBackend createBackend(HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, ConstantReflectionProvider constantReflection) { - return new JVMCIBackend(metaAccess, codeCache, constantReflection); + protected JVMCIBackend createBackend(HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, ConstantReflectionProvider constantReflection, StackIntrospection stackIntrospection) { + return new JVMCIBackend(metaAccess, codeCache, constantReflection, stackIntrospection); } }