graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File basic-graal Sdiff graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64

graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java

Print this page




  23 package com.oracle.graal.hotspot.amd64;
  24 
  25 import static com.oracle.graal.hotspot.InitTimer.*;
  26 
  27 import java.util.*;
  28 
  29 import com.oracle.graal.amd64.*;
  30 import com.oracle.graal.api.code.*;
  31 import com.oracle.graal.api.meta.*;
  32 import com.oracle.graal.api.replacements.*;
  33 import com.oracle.graal.api.runtime.*;
  34 import com.oracle.graal.hotspot.*;
  35 import com.oracle.graal.hotspot.meta.*;
  36 import com.oracle.graal.nodes.spi.*;
  37 import com.oracle.graal.phases.util.*;
  38 
  39 @ServiceProvider(HotSpotBackendFactory.class)
  40 public class AMD64HotSpotBackendFactory implements HotSpotBackendFactory {
  41 
  42     protected Architecture createArchitecture(HotSpotVMConfig config) {
  43         return new AMD64(computeFeatures(config));
  44     }
  45 
  46     protected EnumSet<AMD64.CPUFeature> computeFeatures(HotSpotVMConfig config) {
  47         // Configure the feature set using the HotSpot flag settings.
  48         EnumSet<AMD64.CPUFeature> features = EnumSet.noneOf(AMD64.CPUFeature.class);
  49         assert config.useSSE >= 2 : "minimum config for x64";
  50         features.add(AMD64.CPUFeature.SSE);
  51         features.add(AMD64.CPUFeature.SSE2);
  52         if ((config.x86CPUFeatures & config.cpuSSE3) != 0) {
  53             features.add(AMD64.CPUFeature.SSE3);
  54         }
  55         if ((config.x86CPUFeatures & config.cpuSSSE3) != 0) {
  56             features.add(AMD64.CPUFeature.SSSE3);
  57         }
  58         if ((config.x86CPUFeatures & config.cpuSSE4A) != 0) {
  59             features.add(AMD64.CPUFeature.SSE4a);
  60         }
  61         if ((config.x86CPUFeatures & config.cpuSSE41) != 0) {
  62             features.add(AMD64.CPUFeature.SSE4_1);
  63         }


  74             features.add(AMD64.CPUFeature.ERMS);
  75         }
  76         if ((config.x86CPUFeatures & config.cpuLZCNT) != 0) {
  77             features.add(AMD64.CPUFeature.LZCNT);
  78         }
  79         if ((config.x86CPUFeatures & config.cpuPOPCNT) != 0) {
  80             features.add(AMD64.CPUFeature.POPCNT);
  81         }
  82         if ((config.x86CPUFeatures & config.cpuAES) != 0) {
  83             features.add(AMD64.CPUFeature.AES);
  84         }
  85         if ((config.x86CPUFeatures & config.cpu3DNOWPREFETCH) != 0) {
  86             features.add(AMD64.CPUFeature.AMD_3DNOW_PREFETCH);
  87         }
  88         if ((config.x86CPUFeatures & config.cpuBMI1) != 0) {
  89             features.add(AMD64.CPUFeature.BMI1);
  90         }
  91         return features;
  92     }
  93 











  94     protected TargetDescription createTarget(HotSpotVMConfig config) {
  95         final int stackFrameAlignment = 16;
  96         final int implicitNullCheckLimit = 4096;
  97         final boolean inlineObjects = true;
  98         return new HotSpotTargetDescription(createArchitecture(config), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects);
  99     }
 100 
 101     @Override
 102     public HotSpotBackend createBackend(HotSpotGraalRuntime runtime, HotSpotBackend host) {
 103         assert host == null;
 104         TargetDescription target = createTarget(runtime.getConfig());
 105 
 106         HotSpotProviders providers;
 107         HotSpotRegistersProvider registers;
 108         RegisterConfig regConfig;
 109         HotSpotCodeCacheProvider codeCache;
 110         HotSpotConstantReflectionProvider constantReflection;
 111         HotSpotHostForeignCallsProvider foreignCalls;
 112         Value[] nativeABICallerSaveRegisters;
 113         HotSpotMetaAccessProvider metaAccess;




  23 package com.oracle.graal.hotspot.amd64;
  24 
  25 import static com.oracle.graal.hotspot.InitTimer.*;
  26 
  27 import java.util.*;
  28 
  29 import com.oracle.graal.amd64.*;
  30 import com.oracle.graal.api.code.*;
  31 import com.oracle.graal.api.meta.*;
  32 import com.oracle.graal.api.replacements.*;
  33 import com.oracle.graal.api.runtime.*;
  34 import com.oracle.graal.hotspot.*;
  35 import com.oracle.graal.hotspot.meta.*;
  36 import com.oracle.graal.nodes.spi.*;
  37 import com.oracle.graal.phases.util.*;
  38 
  39 @ServiceProvider(HotSpotBackendFactory.class)
  40 public class AMD64HotSpotBackendFactory implements HotSpotBackendFactory {
  41 
  42     protected Architecture createArchitecture(HotSpotVMConfig config) {
  43         return new AMD64(computeFeatures(config), computeFlags(config));
  44     }
  45 
  46     protected EnumSet<AMD64.CPUFeature> computeFeatures(HotSpotVMConfig config) {
  47         // Configure the feature set using the HotSpot flag settings.
  48         EnumSet<AMD64.CPUFeature> features = EnumSet.noneOf(AMD64.CPUFeature.class);
  49         assert config.useSSE >= 2 : "minimum config for x64";
  50         features.add(AMD64.CPUFeature.SSE);
  51         features.add(AMD64.CPUFeature.SSE2);
  52         if ((config.x86CPUFeatures & config.cpuSSE3) != 0) {
  53             features.add(AMD64.CPUFeature.SSE3);
  54         }
  55         if ((config.x86CPUFeatures & config.cpuSSSE3) != 0) {
  56             features.add(AMD64.CPUFeature.SSSE3);
  57         }
  58         if ((config.x86CPUFeatures & config.cpuSSE4A) != 0) {
  59             features.add(AMD64.CPUFeature.SSE4a);
  60         }
  61         if ((config.x86CPUFeatures & config.cpuSSE41) != 0) {
  62             features.add(AMD64.CPUFeature.SSE4_1);
  63         }


  74             features.add(AMD64.CPUFeature.ERMS);
  75         }
  76         if ((config.x86CPUFeatures & config.cpuLZCNT) != 0) {
  77             features.add(AMD64.CPUFeature.LZCNT);
  78         }
  79         if ((config.x86CPUFeatures & config.cpuPOPCNT) != 0) {
  80             features.add(AMD64.CPUFeature.POPCNT);
  81         }
  82         if ((config.x86CPUFeatures & config.cpuAES) != 0) {
  83             features.add(AMD64.CPUFeature.AES);
  84         }
  85         if ((config.x86CPUFeatures & config.cpu3DNOWPREFETCH) != 0) {
  86             features.add(AMD64.CPUFeature.AMD_3DNOW_PREFETCH);
  87         }
  88         if ((config.x86CPUFeatures & config.cpuBMI1) != 0) {
  89             features.add(AMD64.CPUFeature.BMI1);
  90         }
  91         return features;
  92     }
  93 
  94     protected EnumSet<AMD64.Flag> computeFlags(HotSpotVMConfig config) {
  95         EnumSet<AMD64.Flag> flags = EnumSet.noneOf(AMD64.Flag.class);
  96         if (config.useCountLeadingZerosInstruction) {
  97             flags.add(AMD64.Flag.UseCountLeadingZerosInstruction);
  98         }
  99         if (config.useCountTrailingZerosInstruction) {
 100             flags.add(AMD64.Flag.UseCountTrailingZerosInstruction);
 101         }
 102         return flags;
 103     }
 104 
 105     protected TargetDescription createTarget(HotSpotVMConfig config) {
 106         final int stackFrameAlignment = 16;
 107         final int implicitNullCheckLimit = 4096;
 108         final boolean inlineObjects = true;
 109         return new HotSpotTargetDescription(createArchitecture(config), true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects);
 110     }
 111 
 112     @Override
 113     public HotSpotBackend createBackend(HotSpotGraalRuntime runtime, HotSpotBackend host) {
 114         assert host == null;
 115         TargetDescription target = createTarget(runtime.getConfig());
 116 
 117         HotSpotProviders providers;
 118         HotSpotRegistersProvider registers;
 119         RegisterConfig regConfig;
 120         HotSpotCodeCacheProvider codeCache;
 121         HotSpotConstantReflectionProvider constantReflection;
 122         HotSpotHostForeignCallsProvider foreignCalls;
 123         Value[] nativeABICallerSaveRegisters;
 124         HotSpotMetaAccessProvider metaAccess;


graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File