[foreign-abi] RFR: 8254260: Consider splitting binding recipe operators that serve a dual role [v3]

Jorn Vernee jvernee at openjdk.java.net
Fri Oct 9 13:14:30 UTC 2020


> Hi,
> 
> This patch splits the binding recipe operators that currently serve a dual purpose into 2 operators each:
> - MOVE -> VM_STORE and VM_LOAD
> - DEREFERENCE -> BUFFER_STORE and BUFFER_LOAD
> - CONVERT_ADDRESS -> BOX_ADDRESS and UNBOX_ADDRESS
> 
> Note that I also added a TO_SEGMENT operator which converts a MemoryAddress into a MemorySegment. This was previously
> done as part of the COPY operator, but only for upcalls, so I had to split out this functionality so that COPY could
> have only one interpretation as well. This will also enable some more optimizations down the line, such as merely
> wrapping a by-value struct passed as a pointer in a MemorySegment, instead of having to make a copy.  This also
> regularized the use of allocators by the operators. Now an allocator is always passed as an argument, and that's what
> is used to do allocations, instead of relying implicitly on MemorySegment::allocateNative. (The index of the allocator
> argument is now also always passed when specializing an operator, to indicate the dependency, and so that operator
> impls don't have to 'guess' which argument index is the allocator (see for instance the implementation of
> Copy::specialize).  The rest of the patch is more or less a mechanical renaming, and updating the tests/CallArrangers
> to use the different operator names.  Thanks, Jorn

Jorn Vernee has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev
excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since
the last revision:

 - Merge branch 'foreign-abi' into Op_Split
 - Review Comments
 - - Split Move operator into VMStore and VMLoad
   - Split Dereference operator into BufferStore and BufferLoad
   - Add ToSegment operator for converting a MemoryAddress into a MemorySegment
   - updated implementation and tests.

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

Changes:
  - all: https://git.openjdk.java.net/panama-foreign/pull/375/files
  - new: https://git.openjdk.java.net/panama-foreign/pull/375/files/9ffebc00..a38291d2

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=375&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=375&range=01-02

  Stats: 23116 lines in 612 files changed: 12743 ins; 6174 del; 4199 mod
  Patch: https://git.openjdk.java.net/panama-foreign/pull/375.diff
  Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/375/head:pull/375

PR: https://git.openjdk.java.net/panama-foreign/pull/375


More information about the panama-dev mailing list