On Wed, 4 Sep 2024 09:09:32 GMT, Per Minborg <pminb...@openjdk.org> wrote:
> This PR proposes to improve the performance of `MemorySegment::mismatch` by > using Java code rather than transitioning to native code. src/java.base/share/classes/jdk/internal/foreign/SegmentBulkOperations.java line 123: > 121: // This method is intended for 0 <= bytes < 7 > 122: @ForceInline > 123: private static long mismatchSmall(AbstractMemorySegmentImpl src, > long srcOffset, Question. Isn't this: // 0...0X00 if (remaining >= 4) { if (SCOPED_MEMORY_ACCESS.getInt(src.sessionImpl(), src.unsafeGetBase(), src.unsafeGetOffset() + srcFromOffset + offset) != SCOPED_MEMORY_ACCESS.getInt(dst.sessionImpl(), dst.unsafeGetBase(), dst.unsafeGetOffset() + dstFromOffset + offset)) { return mismatchSmall(src, srcFromOffset + offset, dst, dstFromOffset + offset, offset, 4, srcAndDstBytesDiffer); } offset += 4; remaining -= 4; } // 0...00X0 if (remaining >= 2) { if (SCOPED_MEMORY_ACCESS.getShort(src.sessionImpl(), src.unsafeGetBase(), src.unsafeGetOffset() + srcFromOffset + offset) != SCOPED_MEMORY_ACCESS.getShort(dst.sessionImpl(), dst.unsafeGetBase(), dst.unsafeGetOffset() + dstFromOffset + offset)) { return mismatchSmall(src, srcFromOffset + offset, dst, dstFromOffset + offset, offset, 2, srcAndDstBytesDiffer); } offset += 2; remaining -= 2; } // 0...000X if (remaining == 1) { if (SCOPED_MEMORY_ACCESS.getByte(src.sessionImpl(), src.unsafeGetBase(), src.unsafeGetOffset() + srcFromOffset + offset) != SCOPED_MEMORY_ACCESS.getByte(dst.sessionImpl(), dst.unsafeGetBase(), dst.unsafeGetOffset() + dstFromOffset + offset)) { return offset; } } An optimized version of "mismatchSmall" ? Can we reuse the code? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20848#discussion_r1743461331