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