RFR: 8268363: AArch64: Implement string_indexof_char intrinsic in SVE

Andrew Haley aph at openjdk.java.net
Sun Jun 27 14:51:11 UTC 2021


On Wed, 23 Jun 2021 04:19:11 GMT, TatWai Chong <github.com+78814694+tatwaichong at openjdk.org> wrote:

> This patch implements string_indexof_char intrinsic in SVE for both
> UTF-16 and Latin-8 variants. In the current underneath implementation,
> there is only 4 and 8 characters are compared at a time in UTF-16 and
> Latin-8 respectively. In this patch, we adopt SVE to vectorize this
> intrinsic so that a wider comparison can be performed each time.
> 
> I've run [1] with this patch on an SVE machine, and the performance of
> StringIndexOfChar.latin1_mixed_char (length=65) and
> StringIndexOfChar.utf16_mixed_char (length=65) are improved significantly,
> while no visible regression for other cases with shorter strings.
> (length=7, 8, 15, 16 and 32)
> 
> [1] https://github.com/openjdk/jdk/blob/master/test/micro/org/openjdk/bench/java/lang/StringIndexOfChar.java

src/hotspot/cpu/aarch64/aarch64.ad line 16707:

> 16705:     __ string_indexof_char_sve($str1$$Register, $cnt1$$Register, $ch$$Register, $result$$Register,
> 16706:                                as_FloatRegister($ztmp1$$reg), as_FloatRegister($ztmp2$$reg),
> 16707:                                as_PRegister($pgtmp$$reg), as_PRegister($ptmp$$reg), true /* isL */);

Please consider moving the SVE-specific pattern into aarch64_sve_ad.m4 and regenerating aarch64_sve.ad

src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp line 611:

> 609:   BIND(DONE);
> 610: }
> 611: 

That really is nice! I do like SVE.

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

PR: https://git.openjdk.java.net/jdk/pull/4567


More information about the hotspot-compiler-dev mailing list