[foreign-abi] RFR 8228486: Add ABI-specific layout constants

Nick Gasson nick.gasson at arm.com
Wed Jul 24 10:58:04 UTC 2019


Hi Maurizio,

This looks OK to me and all the jdk_foreign tests are passing with the 
v3 webrev.

Thanks,
Nick


On 24/07/2019 18:37, Maurizio Cimadamore wrote:
> Nick,
> following the discussions on Layout equality, I went and changed back
> the AbstractLayout::equals method to take annotations into account.
> 
> So, I've replaced the problematic spot in the aarch64 calling sequence
> builder (isHomogeneousFloatAggregate) with this:
> 
> for (MemoryLayout elem : groupLayout.memberLayouts()) {
>               ArgumentClassImpl argClass =
>                       (ArgumentClassImpl)Utils.getAnnotation(elem,
> ArgumentClassImpl.ABI_CLASS);
>               if (!(elem instanceof ValueLayout) ||
>                       elem.bitSize() != baseType.bitSize() ||
>                       elem.bitAlignment() != baseType.bitAlignment() ||
>                       baseArgClass != argClass) {
>                   return false;
>               }
>           }
> 
> 
> I think using equals will be problematic because equals will be affected
> by names attached to the group elements.
> 
> What do you think?
> 
> Here's an updated webrev:
> 
> http://cr.openjdk.java.net/~mcimadamore/panama/8228486_v3/
> 
> Maurizio
> 
> On 24/07/2019 09:56, Maurizio Cimadamore wrote:
>> Thanks - I'll fix and push
>>
>> Maurizio
>>
>> On 24/07/2019 07:14, Nick Gasson wrote:
>>> Hi Maurizio,
>>>
>>>> Updated webrev:
>>>>
>>>> http://cr.openjdk.java.net/~mcimadamore/panama/8228486_v2/
>>>>
>>> Needs this change NativeTestHelper.java and then all the tests pass on
>>> AArch64:
>>>
>>> --- a/test/jdk/java/foreign/NativeTestHelper.java
>>> +++ b/test/jdk/java/foreign/NativeTestHelper.java
>>> @@ -48,8 +48,8 @@ public class NativeTestHelper {
>>>        public static final ValueLayout C_INT =
>>> pick(MemoryLayouts.SysV.C_INT, MemoryLayouts.WinABI.C_INT,
>>> MemoryLayouts.AArch64ABI.C_INT);
>>>        public static final ValueLayout C_FLOAT =
>>> pick(MemoryLayouts.SysV.C_FLOAT, MemoryLayouts.WinABI.C_FLOAT,
>>> MemoryLayouts.AArch64ABI.C_FLOAT);
>>>        public static final ValueLayout C_ULONG =
>>> pick(MemoryLayouts.SysV.C_ULONG, MemoryLayouts.WinABI.C_ULONG,
>>> MemoryLayouts.AArch64ABI.C_ULONG);
>>> -    public static final ValueLayout C_DOUBLE =
>>> pick(MemoryLayouts.SysV.C_DOUBLE, MemoryLayouts.WinABI.C_DOUBLE,
>>> MemoryLayouts.AArch64ABI.C_POINTER);
>>> -    public static final ValueLayout C_POINTER =
>>> pick(MemoryLayouts.SysV.C_POINTER, MemoryLayouts.WinABI.C_POINTER,
>>> MemoryLayouts.AArch64ABI.C_DOUBLE);
>>> +    public static final ValueLayout C_DOUBLE =
>>> pick(MemoryLayouts.SysV.C_DOUBLE, MemoryLayouts.WinABI.C_DOUBLE,
>>> MemoryLayouts.AArch64ABI.C_DOUBLE);
>>> +    public static final ValueLayout C_POINTER =
>>> pick(MemoryLayouts.SysV.C_POINTER, MemoryLayouts.WinABI.C_POINTER,
>>> MemoryLayouts.AArch64ABI.C_POINTER);
>>>
>>>        private static ValueLayout pick(ValueLayout sysv, ValueLayout
>>> win, ValueLayout aarch) {
>>>            if (isX86) {
>>>
>>>
>>> Thanks,
>>> Nick


More information about the panama-dev mailing list