[foreign-memaccess+abi] RFR: 8310362: Improve composability of handle derived from layouts [v4]

Jorn Vernee jvernee at openjdk.org
Fri Jun 23 15:17:58 UTC 2023


> Me and Maurizio have been discussing how to better address certain use cases like accessing structs with variable length array members, or matrices that have a dynamic row and column size.
> 
> The solution we came up with is captured in this patch. It adds an additional base offset parameter to the handles produced by `MemoryLayout::varHandle`, `MemoryLayout::sliceHandle` and `MemoryLayout::byteOffsetHandle`. This allows these handles to be composed with other offset computations that are not necessarily derived from layouts.
> 
> This patch also adds a `scale` method to MemoryLayout, which can be used to scale and index by the size of a layout. Essentially: `offset + layout.byteSize() * index`. This is useful for expressing ad-hoc offset computations. A `scaleHandle` method is also added for convience, which returns a MethodHandle for `scale` bound to the receiver layout.
> 
> Both these changes allowed for several simplifications:
> - `MethodHandles::memorySegmentViewVarHandle` can be removed, as it's now exactly the same as calling ML::varHandle on a ValueLayout with an empty layout path. (the former method also didn't take advantage of the access handle cache found on ValueLayouts).
> - `ValueLayout::arrayHandle` is removed, as most use cases can now simply be expressed using ML::varHandle + ML::scaleHandle. e.g.:
> 
> MethodHandles.collectCoordinates(layout.varHandle(),
>             1, MethodHandles.insertArguments(layout.scaleHandle(), 0, 0L));

Jorn Vernee has updated the pull request incrementally with two additional commits since the last revision:

 - var handle doc polish
 - add negative index check

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

Changes:
  - all: https://git.openjdk.org/panama-foreign/pull/840/files
  - new: https://git.openjdk.org/panama-foreign/pull/840/files/9d37f24e..b9706dd4

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=panama-foreign&pr=840&range=03
 - incr: https://webrevs.openjdk.org/?repo=panama-foreign&pr=840&range=02-03

  Stats: 67 lines in 2 files changed: 32 ins; 17 del; 18 mod
  Patch: https://git.openjdk.org/panama-foreign/pull/840.diff
  Fetch: git fetch https://git.openjdk.org/panama-foreign.git pull/840/head:pull/840

PR: https://git.openjdk.org/panama-foreign/pull/840


More information about the panama-dev mailing list