Search in sources :

Example 21 with AMD64.rbx

use of jdk.vm.ci.amd64.AMD64.rbx in project graal by oracle.

the class AMD64ArithmeticLIRGenerator method emitDiv.

@Override
public Value emitDiv(Value a, Value b, LIRFrameState state) {
    TargetDescription target = getLIRGen().target();
    boolean isAvx = ((AMD64) target.arch).getFeatures().contains(CPUFeature.AVX);
    LIRKind resultKind = LIRKind.combine(a, b);
    switch((AMD64Kind) a.getPlatformKind()) {
        case DWORD:
            AMD64MulDivOp op = emitIDIV(DWORD, a, b, state);
            return getLIRGen().emitMove(op.getQuotient());
        case QWORD:
            AMD64MulDivOp lop = emitIDIV(QWORD, a, b, state);
            return getLIRGen().emitMove(lop.getQuotient());
        case SINGLE:
            if (isAvx) {
                return emitBinary(resultKind, AVXOp.DIV, SS, false, a, b);
            } else {
                return emitBinary(resultKind, SSEOp.DIV, SS, false, a, b);
            }
        case DOUBLE:
            if (isAvx) {
                return emitBinary(resultKind, AVXOp.DIV, SD, false, a, b);
            } else {
                return emitBinary(resultKind, SSEOp.DIV, SD, false, a, b);
            }
        default:
            throw GraalError.shouldNotReachHere();
    }
}
Also used : AMD64MulDivOp(org.graalvm.compiler.lir.amd64.AMD64MulDivOp) AMD64Kind(jdk.vm.ci.amd64.AMD64Kind) TargetDescription(jdk.vm.ci.code.TargetDescription) LIRKind(org.graalvm.compiler.core.common.LIRKind)

Example 22 with AMD64.rbx

use of jdk.vm.ci.amd64.AMD64.rbx in project graal by oracle.

the class AMD64ArrayCompareToOp method supportsAVX512VLBW.

private static boolean supportsAVX512VLBW(TargetDescription target) {
    AMD64 arch = (AMD64) target.arch;
    EnumSet<CPUFeature> features = arch.getFeatures();
    return features.contains(CPUFeature.AVX512BW) && features.contains(CPUFeature.AVX512VL);
}
Also used : AMD64(jdk.vm.ci.amd64.AMD64) CPUFeature(jdk.vm.ci.amd64.AMD64.CPUFeature)

Example 23 with AMD64.rbx

use of jdk.vm.ci.amd64.AMD64.rbx in project graal by oracle.

the class BitOpNodesTest method testBitCountIntEmpty.

@Test
public void testBitCountIntEmpty() {
    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("bitCountIntEmptySnippet");
    Assert.assertEquals(StampFactory.forInteger(JavaKind.Int, 0, 24), result.stamp(NodeView.DEFAULT));
}
Also used : AMD64(jdk.vm.ci.amd64.AMD64) SPARC(jdk.vm.ci.sparc.SPARC) Architecture(jdk.vm.ci.code.Architecture) ValueNode(org.graalvm.compiler.nodes.ValueNode) Test(org.junit.Test) GraalCompilerTest(org.graalvm.compiler.core.test.GraalCompilerTest)

Example 24 with AMD64.rbx

use of jdk.vm.ci.amd64.AMD64.rbx in project graal by oracle.

the class BitOpNodesTest method testBitCountInt.

@Test
public void testBitCountInt() {
    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("bitCountIntSnippet");
    Assert.assertEquals(StampFactory.forInteger(JavaKind.Int, 8, 24), result.stamp(NodeView.DEFAULT));
}
Also used : AMD64(jdk.vm.ci.amd64.AMD64) SPARC(jdk.vm.ci.sparc.SPARC) Architecture(jdk.vm.ci.code.Architecture) ValueNode(org.graalvm.compiler.nodes.ValueNode) Test(org.junit.Test) GraalCompilerTest(org.graalvm.compiler.core.test.GraalCompilerTest)

Example 25 with AMD64.rbx

use of jdk.vm.ci.amd64.AMD64.rbx in project graal by oracle.

the class BitOpNodesTest method testBitCountLongEmpty.

@Test
public void testBitCountLongEmpty() {
    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("bitCountLongEmptySnippet");
    Assert.assertEquals(StampFactory.forInteger(JavaKind.Int, 0, 40), result.stamp(NodeView.DEFAULT));
}
Also used : AMD64(jdk.vm.ci.amd64.AMD64) SPARC(jdk.vm.ci.sparc.SPARC) Architecture(jdk.vm.ci.code.Architecture) ValueNode(org.graalvm.compiler.nodes.ValueNode) Test(org.junit.Test) GraalCompilerTest(org.graalvm.compiler.core.test.GraalCompilerTest)

Aggregations

AMD64 (jdk.vm.ci.amd64.AMD64)13 AMD64Kind (jdk.vm.ci.amd64.AMD64Kind)11 TargetDescription (jdk.vm.ci.code.TargetDescription)9 Test (org.junit.Test)6 Architecture (jdk.vm.ci.code.Architecture)5 LIRKind (org.graalvm.compiler.core.common.LIRKind)5 SPARC (jdk.vm.ci.sparc.SPARC)4 GraalCompilerTest (org.graalvm.compiler.core.test.GraalCompilerTest)4 ValueNode (org.graalvm.compiler.nodes.ValueNode)4 RegisterValue (jdk.vm.ci.code.RegisterValue)3 Variable (org.graalvm.compiler.lir.Variable)3 CompareAndSwapOp (org.graalvm.compiler.lir.amd64.AMD64Move.CompareAndSwapOp)3 AllocatableValue (jdk.vm.ci.meta.AllocatableValue)2 ResolvedJavaMethod (jdk.vm.ci.meta.ResolvedJavaMethod)2 AMD64AddressValue (org.graalvm.compiler.lir.amd64.AMD64AddressValue)2 Before (org.junit.Before)2 SubstrateTargetDescription (com.oracle.svm.core.graal.meta.SubstrateTargetDescription)1 ArrayList (java.util.ArrayList)1 CPUFeature (jdk.vm.ci.amd64.AMD64.CPUFeature)1 AMD64.rax (jdk.vm.ci.amd64.AMD64.rax)1