RFR: 8274242: Implement fast-path for ASCII-compatible CharsetEncoders on x86

Volker Simonis simonis at openjdk.java.net
Mon Sep 27 09:38:01 UTC 2021


On Tue, 21 Sep 2021 21:58:48 GMT, Claes Redestad <redestad at openjdk.org> wrote:

> This patch extends the `ISO_8859_1.implEncodeISOArray` intrinsic on x86 to work also for ASCII encoding, which makes for example the `UTF_8$Encoder` perform on par with (or outperform) similarly getting charset encoded bytes from a String. The former took a small performance hit in JDK 9, and the latter improved greatly in the same release.
> 
> Extending the `EncodeIsoArray` intrinsics on other platforms should be possible, but I'm unfamiliar with the macro assembler in general and unlike the x86 intrinsic they don't use a simple vectorized mask to implement the latin-1 check. For example aarch64 seem to filter out the low bytes and then check if there's any bits set in the high bytes. Clever, but very different to the 0xFF80 2-byte mask that an ASCII test wants.

src/hotspot/share/opto/c2compiler.cpp line 222:

> 220: #if !defined(X86)
> 221:     return false; // not yet implemented
> 222: #endif

It might be a little more work, but I think it's cleaner to move the decision whether the intrinisc is supported into the Matcher like for most other intrinsics and keep this code here platform independent. Otherwise we will get an increasing cascade of ifdefs as people start implementing this for other platforms.

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

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


More information about the core-libs-dev mailing list