On Thu, 24 Aug 2023 23:55:28 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

>> src/java.base/share/classes/jdk/internal/foreign/abi/Binding.java line 695:
>> 
>>> 693:      *   Negative [shiftAmount] shifts right and converts to int if 
>>> needed.
>>> 694:      */
>>> 695:     record ShiftLeft(int shiftAmount, Class<?> type) implements 
>>> Binding {
>> 
>> Given the situation you are facing, perhaps adding the new binding here is 
>> unavoidable. Let's wait to hear from @JornVernee. In the meantime, can you 
>> point me to a document which explains this behavior? I'm curious and I'd 
>> like to know more :-)
>
> Maybe I'm starting to see it - it's not a special rule, as much as it is a 
> consequence of the endianness. E.g. if you have a struct that is 64 + 32 
> bytes, you can store the first 64 bytes as a long. Then, there's an issue as 
> we have to fill another long, but we have only 32 bits of value. Is it the 
> problem that if we just copy the value into the long word "as is" it will be 
> stored in the "wrong" 32 bits? So the shift takes care of that, I guess?

If my assumption above is correct, then maybe another way to solve the problem, 
would be to, instead of adding a new shift binding, to generalize the VM store 
binding we have to allow writing a smaller value into a bigger storage, with an 
offset. Correct?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/15417#discussion_r1304982593

Reply via email to