use of jdk.vm.ci.amd64.AMD64 in project graal by oracle.
the class StableArrayReadFoldingTest method testKillWithSameTypeUnaligned.
@Test
public void testKillWithSameTypeUnaligned() {
Assume.assumeTrue("Only test unaligned access on AMD64", getTarget().arch instanceof AMD64);
ResolvedJavaMethod method = getResolvedJavaMethod("killWithSameTypeUnaligned");
testAgainstExpected(method, new Result(true, null), null);
}
use of jdk.vm.ci.amd64.AMD64 in project graal by oracle.
the class NativeImageGenerator method createTarget.
public static TargetDescription createTarget(Platform platform) {
if (includedIn(platform, Platform.AMD64.class)) {
Architecture architecture;
if (NativeImageOptions.NativeArchitecture.getValue()) {
architecture = GraalAccess.getOriginalTarget().arch;
} else {
EnumSet<AMD64.CPUFeature> features = EnumSet.noneOf(AMD64.CPUFeature.class);
// SSE and SSE2 are added by defaults as they are required by Graal
features.add(AMD64.CPUFeature.SSE);
features.add(AMD64.CPUFeature.SSE2);
features.addAll(parseCSVtoEnum(AMD64.CPUFeature.class, NativeImageOptions.CPUFeatures.getValue()));
architecture = new AMD64(features, SubstrateTargetDescription.allFlags());
}
assert architecture instanceof AMD64 : "SVM supports only AMD64 architectures.";
return new SubstrateTargetDescription(architecture, true, 16, 0, false);
} else {
throw UserError.abort("Architecture specified by platform is not supported: " + platform.getClass().getTypeName());
}
}
use of jdk.vm.ci.amd64.AMD64 in project graal by oracle.
the class BitOpNodesTest method testBitCountLong.
@Test
public void testBitCountLong() {
Architecture arch = getBackend().getTarget().arch;
boolean isAmd64WithPopCount = arch instanceof AMD64 && ((AMD64) arch).getFeatures().contains(AMD64.CPUFeature.POPCNT);
boolean isSparc = arch instanceof SPARC;
Assume.assumeTrue("Only works on hardware with popcnt at the moment", isAmd64WithPopCount || isSparc);
ValueNode result = parseAndInline("bitCountLongSnippet");
Assert.assertEquals(StampFactory.forInteger(JavaKind.Int, 8, 40), result.stamp(NodeView.DEFAULT));
}
use of jdk.vm.ci.amd64.AMD64 in project graal by oracle.
the class AMD64CPUFeatureAccess method verifyHostSupportsArchitecture.
public static void verifyHostSupportsArchitecture(Architecture imageArchitecture) {
AMD64 architecture = (AMD64) imageArchitecture;
EnumSet<AMD64.CPUFeature> features = determineHostCPUFeatures();
if (!features.containsAll(architecture.getFeatures())) {
List<AMD64.CPUFeature> missingFeatures = new ArrayList<>();
for (AMD64.CPUFeature feature : architecture.getFeatures()) {
if (!features.contains(feature)) {
missingFeatures.add(feature);
}
}
throw VMError.shouldNotReachHere("Current target does not support the following CPU features that are required by the image: " + missingFeatures);
}
}
use of jdk.vm.ci.amd64.AMD64 in project graal by oracle.
the class AMD64HotSpotLIRGenerator method emitForeignCallOp.
@Override
protected void emitForeignCallOp(ForeignCallLinkage linkage, Value result, Value[] arguments, Value[] temps, LIRFrameState info) {
currentRuntimeCallInfo = info;
HotSpotForeignCallLinkage hsLinkage = (HotSpotForeignCallLinkage) linkage;
AMD64 arch = (AMD64) target().arch;
if (arch.getFeatures().contains(AMD64.CPUFeature.AVX) && hsLinkage.mayContainFP() && !hsLinkage.isCompiledStub()) {
/*
* If the target may contain FP ops, and it is not compiled by us, we may have an
* AVX-SSE transition.
*
* We exclude the argument registers from the zeroing LIR instruction since it violates
* the LIR semantics of @Temp that values must not be live. Note that the emitted
* machine instruction actually zeros _all_ XMM registers which is fine since we know
* that their upper half is not used.
*/
append(new AMD64VZeroUpper(arguments));
}
super.emitForeignCallOp(linkage, result, arguments, temps, info);
}
Aggregations