The MemorySegment::mismatch implementation added vectorized mismatch of long 
sizes. The implementation is trivial, but the starting point for a more 
optimized implementation, if needed. ArraysSupport::vectorizedMismatchLarge 
incorrectly returns the bitwise complement of the offset of the first mismatch, 
where it should return the bitwise complement of the number of remaining pairs 
of elements to be checked in the tail of the two arrays. The 
AbstractMemorySegmentImpl::mismatch masked this problem, since it seamlessly 
compared the remaining tail, which is larger than it should be.

Webrev:
  https://cr.openjdk.java.net/~chegar/8247696/webrev.00/

I updated the exiting BulkOps micro-benchmark to cover mismatch. Here are the 
results, compared to ByteBuffer::mismatch, on my machine:

Benchmark                          Mode  Cnt        Score        Error  Units
BulkOps.mismatch_large_bytebuffer  avgt   30   740186.973 ? 119314.207  ns/op
BulkOps.mismatch_large_segment     avgt   30   683475.305 ?  76355.043  ns/op
BulkOps.mismatch_small_bytebuffer  avgt   30        7.367 ?      0.523  ns/op
BulkOps.mismatch_small_segment     avgt   30        4.140 ?      0.602  ns/op


-Chris.

Reply via email to