This PR suggests we can speed up `StringLatin1.regionMatchesCI` by applying 
'the oldest ASCII trick in the book'.

The new static method `CharacterDataLatin1.equalsIgnoreCase` compares two 
latin1 bytes for equality ignoring case. `StringLatin1.regionMatchesCI` is 
updated to use `equalsIgnoreCase`

To verify the correctness of `equalsIgnoreCase`, a new test is added  to 
`EqualsIgnoreCase` with an exhaustive verification that all 256x256 latin1 code 
point pairs have an `equalsIgnoreCase` consistent with Character.toUpperCase, 
Character.toLowerCase.

Performance is tested for matching and mismatching cases of code point pairs 
picked from the ASCII letter, ASCII number and latin1 letter ranges. Results in 
the first comment below.

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

Commit messages:
 - Exhaustive verification needs to cover the case b1 == b2
 - Move multiplication exclusion to the lat1 range branch
 - Speed up StringLatin1.regionMatchesCI by applying the 'oldest ASCII trick in 
the book'

Changes: https://git.openjdk.org/jdk/pull/12632/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12632&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8302871
  Stats: 158 lines in 4 files changed: 148 ins; 5 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/12632.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12632/head:pull/12632

PR: https://git.openjdk.org/jdk/pull/12632

Reply via email to