On Thu, 18 May 2023 09:28:14 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

>> The FFM API exposes layout constants for Java primitives. Among those there 
>> are constants for `JAVA_LONG` and `JAVA_DOUBLE`. Currently, the alignment of 
>> these layouts is set the same as their size (e.g. 8 bytes).
>> 
>> This is obviously correct on 64-bit platforms, but on 32-bit platform it is 
>> not, as such platforms cannot guarantee that doubles and longs will be 
>> always 64-bit aligned. This will also result in problems when trying to use 
>> e.g. `JAVA_DOUBLE` to model a C double for the linker API on 32-bit 
>> platforms.
>> 
>> For these reasons, it would be preferable to define the alignment of 
>> `JAVA_LONG` and `JAVA_DOUBLE` constants as `ADDRESS.byteSize()`. 
>> 
>> This patch rectifies alignment of those layout constants to reflect 
>> platform-dependent constraints. It also fixes the maximum alignment 
>> constraint supported by heap segments, so that it is 4 for long[] and 
>> double[] on 32-bit platforms.
>
> Maurizio Cimadamore has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Address review comments
>   Actually tweak alignment of ValueLayout.OfLong/ValueLayout.OfDouble

src/java.base/share/classes/jdk/internal/foreign/layout/ValueLayouts.java line 
298:

> 296: 
> 297:         public static OfLong of(ByteOrder order) {
> 298:             return new OfLongImpl(order, ADDRESS_SIZE_BITS, 
> Optional.empty());

Whoops - I forgot these all-important changes :-)

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/14007#discussion_r1197604492

Reply via email to