Re-write the IndexOf code without the use of the pcmpestri instruction, only using AVX2 instructions. This change accelerates String.IndexOf on average 1.3x for AVX2. The benchmark numbers:
Benchmark Score Latest StringIndexOf.advancedWithMediumSub 343.573 317.934 0.925375393x StringIndexOf.advancedWithShortSub1 1039.081 1053.96 1.014319384x StringIndexOf.advancedWithShortSub2 55.828 110.541 1.980027943x StringIndexOf.constantPattern 9.361 11.906 1.271872663x StringIndexOf.searchCharLongSuccess 4.216 4.218 1.000474383x StringIndexOf.searchCharMediumSuccess 3.133 3.216 1.02649218x StringIndexOf.searchCharShortSuccess 3.76 3.761 1.000265957x StringIndexOf.success 9.186 9.713 1.057369911x StringIndexOf.successBig 14.341 46.343 3.231504079x StringIndexOfChar.latin1_AVX2_String 6220.918 12154.52 1.953814533x StringIndexOfChar.latin1_AVX2_char 5503.556 5540.044 1.006629895x StringIndexOfChar.latin1_SSE4_String 6978.854 6818.689 0.977049957x StringIndexOfChar.latin1_SSE4_char 5657.499 5474.624 0.967675646x StringIndexOfChar.latin1_Short_String 7132.541 6863.359 0.962260014x StringIndexOfChar.latin1_Short_char 16013.389 16162.437 1.009307711x StringIndexOfChar.latin1_mixed_String 7386.123 14771.622 1.999915517x StringIndexOfChar.latin1_mixed_char 9901.671 9782.245 0.987938803 ------------- Commit messages: - Fix whitespace - Merge branch 'openjdk:master' into indexof - Comments; added exhaustive-ish test - Subtracting 0x10 twice. - Stomped on r13 in switch branch calculation - Windows register preservation fix - Fix merge problem - Merge branch 'master' into indexof - Working version - Protecting against page faults - ... and 6 more: https://git.openjdk.org/jdk/compare/ce4e6e2b...60d762b9 Changes: https://git.openjdk.org/jdk/pull/16753/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16753&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8320448 Stats: 3062 lines in 14 files changed: 2928 ins; 11 del; 123 mod Patch: https://git.openjdk.org/jdk/pull/16753.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/16753/head:pull/16753 PR: https://git.openjdk.org/jdk/pull/16753