Vector API: stack overflow on Big Endian

Doerr, Martin martin.doerr at sap.com
Wed Oct 21 11:10:45 UTC 2020


Hi,

I noticed stack overflow issues because of endless recursion on Big Endian platforms (s390 and PPC64) in several tests:

E.g. Int64VectorLoadStoreTests:

        at jdk.incubator.vector/jdk.incubator.vector.IntVector.maybeSwap(IntVector.java:3330)
        at jdk.incubator.vector/jdk.incubator.vector.IntVector.intoByteBuffer(IntVector.java:3151)
        at jdk.incubator.vector/jdk.incubator.vector.AbstractVector.defaultReinterpret(AbstractVector.java:505)
        at java.base/jdk.internal.vm.vector.VectorSupport.convert(VectorSupport.java:441)
        at jdk.incubator.vector/jdk.incubator.vector.AbstractVector.convert0(AbstractVector.java:686)
        at jdk.incubator.vector/jdk.incubator.vector.AbstractVector.asVectorRawTemplate(AbstractVector.java:173)
        at jdk.incubator.vector/jdk.incubator.vector.AbstractVector.asByteVectorRawTemplate(AbstractVector.java:179)
        at jdk.incubator.vector/jdk.incubator.vector.Int64Vector.asByteVectorRaw(Int64Vector.java:177)
        at jdk.incubator.vector/jdk.incubator.vector.Int64Vector.asByteVectorRaw(Int64Vector.java:41)
        at jdk.incubator.vector/jdk.incubator.vector.IntVector.reinterpretAsBytes(IntVector.java:3366)
        at jdk.incubator.vector/jdk.incubator.vector.IntVector.maybeSwap(IntVector.java:3330)

Note that maybeSwap is endianness sensitive:
    IntVector maybeSwap(ByteOrder bo) {
        if (bo != NATIVE_ENDIAN) {
            return this.reinterpretAsBytes()
                .rearrange(swapBytesShuffle())
                .reinterpretAsInts();
        }
        return this;
    }

How is this supposed to work?
Is anything platform specific missing?

Thanks and best regards,
Martin



More information about the hotspot-compiler-dev mailing list