hotspot/src/cpu/aarch64/vm/aarch64.ad
changeset 33628 09241459a8b8
parent 33090 141ffb78d088
child 34162 16b54851eaf6
equal deleted inserted replaced
33627:c5b7455f846e 33628:09241459a8b8
 14148 %}
 14148 %}
 14149 
 14149 
 14150 instruct string_compare(iRegP_R1 str1, iRegI_R2 cnt1, iRegP_R3 str2, iRegI_R4 cnt2,
 14150 instruct string_compare(iRegP_R1 str1, iRegI_R2 cnt1, iRegP_R3 str2, iRegI_R4 cnt2,
 14151                         iRegI_R0 result, iRegP_R10 tmp1, rFlagsReg cr)
 14151                         iRegI_R0 result, iRegP_R10 tmp1, rFlagsReg cr)
 14152 %{
 14152 %{
       
 14153   predicate(!CompactStrings);
 14153   match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2)));
 14154   match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2)));
 14154   effect(KILL tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr);
 14155   effect(KILL tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr);
 14155 
 14156 
 14156   format %{ "String Compare $str1,$cnt1,$str2,$cnt2 -> $result   # KILL $tmp1" %}
 14157   format %{ "String Compare $str1,$cnt1,$str2,$cnt2 -> $result   # KILL $tmp1" %}
 14157   ins_encode %{
 14158   ins_encode %{
 14163 %}
 14164 %}
 14164 
 14165 
 14165 instruct string_indexof(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
 14166 instruct string_indexof(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
 14166        iRegI_R0 result, iRegI tmp1, iRegI tmp2, iRegI tmp3, iRegI tmp4, rFlagsReg cr)
 14167        iRegI_R0 result, iRegI tmp1, iRegI tmp2, iRegI tmp3, iRegI tmp4, rFlagsReg cr)
 14167 %{
 14168 %{
       
 14169   predicate(!CompactStrings);
 14168   match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
 14170   match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
 14169   effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
 14171   effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
 14170          TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
 14172          TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
 14171   format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result" %}
 14173   format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result" %}
 14172 
 14174 
 14182 
 14184 
 14183 instruct string_indexof_con(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
 14185 instruct string_indexof_con(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
 14184                  immI_le_4 int_cnt2, iRegI_R0 result, iRegI tmp1, iRegI tmp2,
 14186                  immI_le_4 int_cnt2, iRegI_R0 result, iRegI tmp1, iRegI tmp2,
 14185                  iRegI tmp3, iRegI tmp4, rFlagsReg cr)
 14187                  iRegI tmp3, iRegI tmp4, rFlagsReg cr)
 14186 %{
 14188 %{
       
 14189   predicate(!CompactStrings);
 14187   match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
 14190   match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
 14188   effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
 14191   effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
 14189          TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
 14192          TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
 14190   format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result" %}
 14193   format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result" %}
 14191 
 14194 
 14201 %}
 14204 %}
 14202 
 14205 
 14203 instruct string_equals(iRegP_R1 str1, iRegP_R3 str2, iRegI_R4 cnt,
 14206 instruct string_equals(iRegP_R1 str1, iRegP_R3 str2, iRegI_R4 cnt,
 14204                         iRegI_R0 result, iRegP_R10 tmp, rFlagsReg cr)
 14207                         iRegI_R0 result, iRegP_R10 tmp, rFlagsReg cr)
 14205 %{
 14208 %{
       
 14209   predicate(!CompactStrings);
 14206   match(Set result (StrEquals (Binary str1 str2) cnt));
 14210   match(Set result (StrEquals (Binary str1 str2) cnt));
 14207   effect(KILL tmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL cr);
 14211   effect(KILL tmp, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL cr);
 14208 
 14212 
 14209   format %{ "String Equals $str1,$str2,$cnt -> $result    // KILL $tmp" %}
 14213   format %{ "String Equals $str1,$str2,$cnt -> $result    // KILL $tmp" %}
 14210   ins_encode %{
 14214   ins_encode %{
 14216 %}
 14220 %}
 14217 
 14221 
 14218 instruct array_equals(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
 14222 instruct array_equals(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
 14219                       iRegP_R10 tmp, rFlagsReg cr)
 14223                       iRegP_R10 tmp, rFlagsReg cr)
 14220 %{
 14224 %{
       
 14225   predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU);
 14221   match(Set result (AryEq ary1 ary2));
 14226   match(Set result (AryEq ary1 ary2));
 14222   effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, KILL cr);
 14227   effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, KILL cr);
 14223 
 14228 
 14224   format %{ "Array Equals $ary1,ary2 -> $result    // KILL $tmp" %}
 14229   format %{ "Array Equals $ary1,ary2 -> $result    // KILL $tmp" %}
 14225   ins_encode %{
 14230   ins_encode %{