RFR(S): 8225169: fix LongDoubleTest on AArch64

Nick Gasson nick.gasson at arm.com
Fri Jun 14 03:33:23 UTC 2019


Hi,

LongDoubleTest fails on AArch64 when using the direct invoker but passes 
with the universal invoker.

DirectSignatureShuffler::isDirectBinding accepts vector arguments where 
the argument size matches the storage size. On AArch64 a `long double' 
argument is passed as a quad precision IEEE754-2008 floating point 
number using all 128 bits of a vector register, whereas a `double' 
argument uses the least significant 64 bits of a vector register. But 
both are passed using the vector storage class which has size 128 bits.

The direct invoker only has specialisations for `double' so 
isDirectBinding should only accept vector class arguments that are 
exactly 64 bits wide.

Bug: https://bugs.openjdk.java.net/browse/JDK-8225169
Webrev: http://cr.openjdk.java.net/~ngasson/foreign/8225169/webrev.0/

There's also a trivial unrelated change to LayoutTypeImpl::pointerSize 
to switch NativeTypes.LittleEndian.SysVABI to AArch64ABI that I missed 
before.

Tested jtreg jdk_foreign on x86 and AArch64.

Thanks,
Nick


More information about the panama-dev mailing list