< 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 >