< prev index next >
src/cpu/aarch64/vm/aarch64.ad
Print this page
rev 11229 : 8156839: aarch64: indexOf does not support CompactStrings
Summary: Add support for LL to indexOf intrinsic
Reviewed-by: aph
*** 3329,3339 ****
const bool Matcher::match_rule_supported(int opcode) {
switch (opcode) {
case Op_StrComp:
- case Op_StrIndexOf:
if (CompactStrings) return false;
break;
default:
break;
}
--- 3329,3338 ----
*** 14951,14961 ****
$tmp1$$Register);
%}
ins_pipe(pipe_class_memory);
%}
! instruct string_indexof(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
iRegI_R0 result, iRegI tmp1, iRegI tmp2, iRegI tmp3, iRegI tmp4, rFlagsReg cr)
%{
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
--- 14950,14960 ----
$tmp1$$Register);
%}
ins_pipe(pipe_class_memory);
%}
! instruct string_indexofUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
iRegI_R0 result, iRegI tmp1, iRegI tmp2, iRegI tmp3, iRegI tmp4, rFlagsReg cr)
%{
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
*** 14965,14980 ****
ins_encode %{
__ string_indexof($str1$$Register, $str2$$Register,
$cnt1$$Register, $cnt2$$Register,
$tmp1$$Register, $tmp2$$Register,
$tmp3$$Register, $tmp4$$Register,
! -1, $result$$Register);
%}
ins_pipe(pipe_class_memory);
%}
! instruct string_indexof_con(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
immI_le_4 int_cnt2, iRegI_R0 result, iRegI tmp1, iRegI tmp2,
iRegI tmp3, iRegI tmp4, rFlagsReg cr)
%{
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
--- 14964,14998 ----
ins_encode %{
__ string_indexof($str1$$Register, $str2$$Register,
$cnt1$$Register, $cnt2$$Register,
$tmp1$$Register, $tmp2$$Register,
$tmp3$$Register, $tmp4$$Register,
! -1, $result$$Register, StrIntrinsicNode::UU);
%}
ins_pipe(pipe_class_memory);
%}
! instruct string_indexofLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
! iRegI_R0 result, iRegI tmp1, iRegI tmp2, iRegI tmp3, iRegI tmp4, rFlagsReg cr)
! %{
! predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL);
! match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
! effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
! TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
! format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result" %}
!
! ins_encode %{
! __ string_indexof($str1$$Register, $str2$$Register,
! $cnt1$$Register, $cnt2$$Register,
! $tmp1$$Register, $tmp2$$Register,
! $tmp3$$Register, $tmp4$$Register,
! -1, $result$$Register, StrIntrinsicNode::LL);
! %}
! ins_pipe(pipe_class_memory);
! %}
!
! instruct string_indexof_conUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
immI_le_4 int_cnt2, iRegI_R0 result, iRegI tmp1, iRegI tmp2,
iRegI tmp3, iRegI tmp4, rFlagsReg cr)
%{
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
*** 14986,14996 ****
int icnt2 = (int)$int_cnt2$$constant;
__ string_indexof($str1$$Register, $str2$$Register,
$cnt1$$Register, zr,
$tmp1$$Register, $tmp2$$Register,
$tmp3$$Register, $tmp4$$Register,
! icnt2, $result$$Register);
%}
ins_pipe(pipe_class_memory);
%}
instruct string_equalsL(iRegP_R1 str1, iRegP_R3 str2, iRegI_R4 cnt,
--- 15004,15035 ----
int icnt2 = (int)$int_cnt2$$constant;
__ string_indexof($str1$$Register, $str2$$Register,
$cnt1$$Register, zr,
$tmp1$$Register, $tmp2$$Register,
$tmp3$$Register, $tmp4$$Register,
! icnt2, $result$$Register, StrIntrinsicNode::UU);
! %}
! ins_pipe(pipe_class_memory);
! %}
!
! instruct string_indexof_conLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
! immI_le_4 int_cnt2, iRegI_R0 result, iRegI tmp1, iRegI tmp2,
! iRegI tmp3, iRegI tmp4, rFlagsReg cr)
! %{
! predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL);
! match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
! effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
! TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
! format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result" %}
!
! ins_encode %{
! int icnt2 = (int)$int_cnt2$$constant;
! __ string_indexof($str1$$Register, $str2$$Register,
! $cnt1$$Register, zr,
! $tmp1$$Register, $tmp2$$Register,
! $tmp3$$Register, $tmp4$$Register,
! icnt2, $result$$Register, StrIntrinsicNode::LL);
%}
ins_pipe(pipe_class_memory);
%}
instruct string_equalsL(iRegP_R1 str1, iRegP_R3 str2, iRegI_R4 cnt,
< prev index next >