This change add 3 new methods in Objects: public static long checkIndex(long index, long length) public static long checkFromToIndex(long fromIndex, long toIndex, long length) public static long checkFromIndexSize(long fromIndex, long size, long length)
This mirrors the int utility methods that were added by JDK-8135248 with the same motivations. As is the case with the int checkIndex(), the long checkIndex() method is JIT compiled as an intrinsic. It allows the JIT to compile checkIndex to an unsigned comparison and properly recognize it as a range check that then becomes a candidate for the existing range check optimizations. This has proven to be important for panama's MemorySegment API and a prototype of this change (with some extra c2 improvements) showed that panama micro benchmark results improve significantly. This change includes: - the API change - the C2 intrinsic - tests for the API and the C2 intrinsic This is a joint work with Paul who reviewed and reworked the API change and filled the CSR. ------------- Commit messages: - Update headers and add intrinsic to Graal test ignore list - move compiler test and add bug to test - non x86_64 arch support - c2 test case - intrinsic - Use overloads of method names. - Vladimir's comments - checkLongIndex Changes: https://git.openjdk.java.net/jdk/pull/1003/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1003&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8255150 Stats: 895 lines in 30 files changed: 848 ins; 1 del; 46 mod Patch: https://git.openjdk.java.net/jdk/pull/1003.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/1003/head:pull/1003 PR: https://git.openjdk.java.net/jdk/pull/1003