On Sat, 18 Feb 2023 09:21:25 GMT, Eirik Bjorsnos <d...@openjdk.org> wrote:
> 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. Benchmark results: Baseline: Benchmark (codePoints) (size) Mode Cnt Score Error Units RegionMatchesIC.Latin1.regionMatchesIC ascii-match 1024 avgt 15 2216.525 ± 79.626 ns/op RegionMatchesIC.Latin1.regionMatchesIC ascii-mismatch 1024 avgt 15 5.049 ± 0.044 ns/op RegionMatchesIC.Latin1.regionMatchesIC number-match 1024 avgt 15 708.977 ± 19.381 ns/op RegionMatchesIC.Latin1.regionMatchesIC number-mismatch 1024 avgt 15 3.726 ± 0.036 ns/op RegionMatchesIC.Latin1.regionMatchesIC lat1-match 1024 avgt 15 2134.499 ± 23.064 ns/op RegionMatchesIC.Latin1.regionMatchesIC lat1-mismatch 1024 avgt 15 4.227 ± 0.070 ns/op Patch: Benchmark (codePoints) (size) Mode Cnt Score Error Units RegionMatchesIC.Latin1.regionMatchesIC ascii-match 1024 avgt 15 809.729 ± 40.257 ns/op RegionMatchesIC.Latin1.regionMatchesIC ascii-mismatch 1024 avgt 15 4.334 ± 0.031 ns/op RegionMatchesIC.Latin1.regionMatchesIC number-match 1024 avgt 15 370.814 ± 39.790 ns/op RegionMatchesIC.Latin1.regionMatchesIC number-mismatch 1024 avgt 15 3.766 ± 0.072 ns/op RegionMatchesIC.Latin1.regionMatchesIC lat1-match 1024 avgt 15 1247.979 ± 7.826 ns/op RegionMatchesIC.Latin1.regionMatchesIC lat1-mismatch 1024 avgt 15 4.819 ± 0.026 ns/op ------------- PR: https://git.openjdk.org/jdk/pull/12632