String intrinsics defunct on arch != amd64 after 8141132: JEP 254: Compact Strings

Volker Simonis volker.simonis at gmail.com
Mon Nov 30 18:54:54 UTC 2015


Hi,

I'm currently trying to fix the String intrinsics
(SpecialStringCompareTo, SpecialStringEquals, SpecialStringIndexOf) on
ppc64 after change "8141132: JEP 254: Compact Strings" - at least for
the case where the strings are not compressed (i.e. UTF16 byte
arrays).

For SpecialStringCompareTo and SpecialStringEquals this was not too
hard, but when I wanted to test the intrinsics for
SpecialStringIndexOf I realized that they never got generated. I think
it is because of this code in library_call.cpp

bool LibraryCallKit::inline_string_indexOf(StrIntrinsicNode::ArgEnc ae) {
  if (!Matcher::has_match_rule(Op_StrIndexOf) || !UseSSE42Intrinsics) {
    return false;
  }

If "UseSSE42Intrinsics" is false, which it always is on ppc64,
inline_string_indexOf() will always return false.

So I wonder how this code is supposed to ever work on non-amd64 architectures?

Moreover, "UseSSE42Intrinsics" is clearly a architecture-dependant
option. I already wondered that according to vm_version_aarch64.cpp it
seems to exists on aarch64 (is this really true Andrew?). But it's
surely not available on PowerPC, SPARC, ...

So I think "UseSSE42Intrinsics" should be at least guarded with
X86_ONLY/AARCH64_ONLY in shared files. Probably even better would be
to move the check right into the Matcher.

What do you think?

Regards,
Volker


More information about the hotspot-compiler-dev mailing list