@@ -16770,14 +16770,17 @@ instruct string_compareLU(iRegP_R1 str1, iRegI_R2 cnt1, iRegP_R3 str2, iRegI_R4
16770
16770
%}
16771
16771
16772
16772
instruct string_indexofUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
16773
- iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
16774
- iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6, rFlagsReg cr)
16773
+ iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2,
16774
+ iRegINoSp tmp3, iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6,
16775
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, rFlagsReg cr)
16775
16776
%{
16776
16777
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
16777
16778
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
16778
16779
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
16779
- TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6, KILL cr);
16780
- format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UU)" %}
16780
+ TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6,
16781
+ TEMP vtmp0, TEMP vtmp1, KILL cr);
16782
+ format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UU) "
16783
+ "# KILL $str1 $cnt1 $str2 $cnt2 $tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 V0-V1 cr" %}
16781
16784
16782
16785
ins_encode %{
16783
16786
__ string_indexof($str1$$Register, $str2$$Register,
@@ -16791,14 +16794,17 @@ instruct string_indexofUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2
16791
16794
%}
16792
16795
16793
16796
instruct string_indexofLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
16794
- iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
16795
- iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6, rFlagsReg cr)
16797
+ iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
16798
+ iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6,
16799
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, rFlagsReg cr)
16796
16800
%{
16797
16801
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL);
16798
16802
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
16799
16803
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
16800
- TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6, KILL cr);
16801
- format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (LL)" %}
16804
+ TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6,
16805
+ TEMP vtmp0, TEMP vtmp1, KILL cr);
16806
+ format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (LL) "
16807
+ "# KILL $str1 $cnt1 $str2 $cnt2 $tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 V0-V1 cr" %}
16802
16808
16803
16809
ins_encode %{
16804
16810
__ string_indexof($str1$$Register, $str2$$Register,
@@ -16812,14 +16818,17 @@ instruct string_indexofLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2
16812
16818
%}
16813
16819
16814
16820
instruct string_indexofUL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
16815
- iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
16816
- iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6, rFlagsReg cr)
16821
+ iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2,iRegINoSp tmp3,
16822
+ iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6,
16823
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, rFlagsReg cr)
16817
16824
%{
16818
16825
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL);
16819
16826
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
16820
16827
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
16821
- TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6, KILL cr);
16822
- format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UL)" %}
16828
+ TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5,
16829
+ TEMP tmp6, TEMP vtmp0, TEMP vtmp1, KILL cr);
16830
+ format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UL) "
16831
+ "# KILL $str1 cnt1 $str2 $cnt2 $tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 V0-V1 cr" %}
16823
16832
16824
16833
ins_encode %{
16825
16834
__ string_indexof($str1$$Register, $str2$$Register,
@@ -16833,14 +16842,15 @@ instruct string_indexofUL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2
16833
16842
%}
16834
16843
16835
16844
instruct string_indexof_conUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
16836
- immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2 ,
16837
- iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
16845
+ immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1,
16846
+ iRegINoSp tmp2, iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
16838
16847
%{
16839
16848
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
16840
16849
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
16841
16850
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
16842
16851
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
16843
- format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UU)" %}
16852
+ format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UU) "
16853
+ "# KILL $str1 $cnt1 $str2 $tmp1 $tmp2 $tmp3 $tmp4 cr" %}
16844
16854
16845
16855
ins_encode %{
16846
16856
int icnt2 = (int)$int_cnt2$$constant;
@@ -16854,14 +16864,15 @@ instruct string_indexof_conUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
16854
16864
%}
16855
16865
16856
16866
instruct string_indexof_conLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
16857
- immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2 ,
16858
- iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
16867
+ immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1,
16868
+ iRegINoSp tmp2, iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
16859
16869
%{
16860
16870
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL);
16861
16871
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
16862
16872
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
16863
16873
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
16864
- format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (LL)" %}
16874
+ format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (LL) "
16875
+ "# KILL $str1 $cnt1 $str2 $tmp1 $tmp2 $tmp3 $tmp4 cr" %}
16865
16876
16866
16877
ins_encode %{
16867
16878
int icnt2 = (int)$int_cnt2$$constant;
@@ -16875,14 +16886,15 @@ instruct string_indexof_conLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
16875
16886
%}
16876
16887
16877
16888
instruct string_indexof_conUL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
16878
- immI_1 int_cnt2, iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2 ,
16879
- iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
16889
+ immI_1 int_cnt2, iRegI_R0 result, iRegINoSp tmp1,
16890
+ iRegINoSp tmp2, iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
16880
16891
%{
16881
16892
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL);
16882
16893
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
16883
16894
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
16884
16895
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
16885
- format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UL)" %}
16896
+ format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UL) "
16897
+ "# KILL $str1 $cnt1 $str2 $tmp1 $tmp2 $tmp3 $tmp4 cr" %}
16886
16898
16887
16899
ins_encode %{
16888
16900
int icnt2 = (int)$int_cnt2$$constant;
@@ -16967,13 +16979,17 @@ instruct string_equalsU(iRegP_R1 str1, iRegP_R3 str2, iRegI_R4 cnt,
16967
16979
16968
16980
instruct array_equalsB(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
16969
16981
iRegP_R3 tmp1, iRegP_R4 tmp2, iRegP_R5 tmp3,
16982
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2, vRegD_V3 vtmp3,
16983
+ vRegD_V4 vtmp4, vRegD_V5 vtmp5, vRegD_V6 vtmp6, vRegD_V7 vtmp7,
16970
16984
iRegP_R10 tmp, rFlagsReg cr)
16971
16985
%{
16972
16986
predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL);
16973
16987
match(Set result (AryEq ary1 ary2));
16974
- effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr);
16988
+ effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3,
16989
+ TEMP vtmp0, TEMP vtmp1, TEMP vtmp2, TEMP vtmp3, TEMP vtmp4, TEMP vtmp5,
16990
+ TEMP vtmp6, TEMP vtmp7, KILL cr);
16975
16991
16976
- format %{ "Array Equals $ary1,ary2 -> $result // KILL $tmp" %}
16992
+ format %{ "Array Equals $ary1,ary2 -> $result # KILL $ary1 $ary2 $tmp $tmp1 $tmp2 $tmp3 V0-V7 cr " %}
16977
16993
ins_encode %{
16978
16994
address tpc = __ arrays_equals($ary1$$Register, $ary2$$Register,
16979
16995
$tmp1$$Register, $tmp2$$Register, $tmp3$$Register,
@@ -16988,13 +17004,17 @@ instruct array_equalsB(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
16988
17004
16989
17005
instruct array_equalsC(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
16990
17006
iRegP_R3 tmp1, iRegP_R4 tmp2, iRegP_R5 tmp3,
17007
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2, vRegD_V3 vtmp3,
17008
+ vRegD_V4 vtmp4, vRegD_V5 vtmp5, vRegD_V6 vtmp6, vRegD_V7 vtmp7,
16991
17009
iRegP_R10 tmp, rFlagsReg cr)
16992
17010
%{
16993
17011
predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU);
16994
17012
match(Set result (AryEq ary1 ary2));
16995
- effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr);
17013
+ effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3,
17014
+ TEMP vtmp0, TEMP vtmp1, TEMP vtmp2, TEMP vtmp3, TEMP vtmp4, TEMP vtmp5,
17015
+ TEMP vtmp6, TEMP vtmp7, KILL cr);
16996
17016
16997
- format %{ "Array Equals $ary1,ary2 -> $result // KILL $tmp" %}
17017
+ format %{ "Array Equals $ary1,ary2 -> $result # KILL $ary1 $ary2 $tmp $tmp1 $tmp2 $tmp3 V0-V7 cr " %}
16998
17018
ins_encode %{
16999
17019
address tpc = __ arrays_equals($ary1$$Register, $ary2$$Register,
17000
17020
$tmp1$$Register, $tmp2$$Register, $tmp3$$Register,
@@ -17024,36 +17044,39 @@ instruct has_negatives(iRegP_R1 ary1, iRegI_R2 len, iRegI_R0 result, rFlagsReg c
17024
17044
17025
17045
// fast char[] to byte[] compression
17026
17046
instruct string_compress(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len,
17027
- vRegD_V0 tmp1 , vRegD_V1 tmp2 ,
17028
- vRegD_V2 tmp3, vRegD_V3 tmp4 ,
17047
+ vRegD_V0 vtmp0 , vRegD_V1 vtmp1, vRegD_V2 vtmp2 ,
17048
+ vRegD_V3 vtmp3, vRegD_V4 vtmp4, vRegD_V5 vtmp5 ,
17029
17049
iRegI_R0 result, rFlagsReg cr)
17030
17050
%{
17031
17051
match(Set result (StrCompressedCopy src (Binary dst len)));
17032
- effect(TEMP tmp1 , TEMP tmp2 , TEMP tmp3 , TEMP tmp4 ,
17052
+ effect(TEMP vtmp0 , TEMP vtmp1 , TEMP vtmp2 , TEMP vtmp3, TEMP vtmp4, TEMP vtmp5 ,
17033
17053
USE_KILL src, USE_KILL dst, USE len, KILL cr);
17034
17054
17035
- format %{ "String Compress $src,$dst,$len -> $result // KILL $src, $dst" %}
17055
+ format %{ "String Compress $src,$dst,$len -> $result # KILL $src $dst V0-V5 cr " %}
17036
17056
ins_encode %{
17037
17057
__ char_array_compress($src$$Register, $dst$$Register, $len$$Register,
17038
- $result$$Register,
17039
- $tmp1 $$FloatRegister, $tmp2 $$FloatRegister,
17040
- $tmp3 $$FloatRegister, $tmp4 $$FloatRegister);
17058
+ $result$$Register, $vtmp0$$FloatRegister, $vtmp1$$FloatRegister,
17059
+ $vtmp2 $$FloatRegister, $vtmp3 $$FloatRegister,
17060
+ $vtmp4 $$FloatRegister, $vtmp5 $$FloatRegister);
17041
17061
%}
17042
17062
ins_pipe(pipe_slow);
17043
17063
%}
17044
17064
17045
17065
// fast byte[] to char[] inflation
17046
- instruct string_inflate(Universe dummy, iRegP_R0 src, iRegP_R1 dst, iRegI_R2 len,
17047
- vRegD_V0 tmp1, vRegD_V1 tmp2, vRegD_V2 tmp3, iRegP_R3 tmp4, rFlagsReg cr)
17066
+ instruct string_inflate(Universe dummy, iRegP_R0 src, iRegP_R1 dst, iRegI_R2 len, iRegP_R3 tmp,
17067
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2, vRegD_V3 vtmp3,
17068
+ vRegD_V4 vtmp4, vRegD_V5 vtmp5, vRegD_V6 vtmp6, rFlagsReg cr)
17048
17069
%{
17049
17070
match(Set dummy (StrInflatedCopy src (Binary dst len)));
17050
- effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr);
17071
+ effect(TEMP vtmp0, TEMP vtmp1, TEMP vtmp2, TEMP vtmp3,
17072
+ TEMP vtmp4, TEMP vtmp5, TEMP vtmp6, TEMP tmp,
17073
+ USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr);
17051
17074
17052
- format %{ "String Inflate $src,$dst // KILL $tmp1, $tmp2 " %}
17075
+ format %{ "String Inflate $src,$dst # KILL $tmp $src $dst $len V0-V6 cr " %}
17053
17076
ins_encode %{
17054
17077
address tpc = __ byte_array_inflate($src$$Register, $dst$$Register, $len$$Register,
17055
- $tmp1 $$FloatRegister, $tmp2 $$FloatRegister,
17056
- $tmp3 $$FloatRegister, $tmp4 $$Register);
17078
+ $vtmp0 $$FloatRegister, $vtmp1 $$FloatRegister,
17079
+ $vtmp2 $$FloatRegister, $tmp $$Register);
17057
17080
if (tpc == NULL) {
17058
17081
ciEnv::current()->record_failure("CodeCache is full");
17059
17082
return;
@@ -17064,41 +17087,43 @@ instruct string_inflate(Universe dummy, iRegP_R0 src, iRegP_R1 dst, iRegI_R2 len
17064
17087
17065
17088
// encode char[] to byte[] in ISO_8859_1
17066
17089
instruct encode_iso_array(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len,
17067
- vRegD_V0 vtmp0, vRegD_V1 vtmp1,
17068
- vRegD_V2 vtmp2, vRegD_V3 vtmp3 ,
17090
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2,
17091
+ vRegD_V3 vtmp3, vRegD_V4 vtmp4, vRegD_V5 vtmp5 ,
17069
17092
iRegI_R0 result, rFlagsReg cr)
17070
17093
%{
17071
17094
predicate(!((EncodeISOArrayNode*)n)->is_ascii());
17072
17095
match(Set result (EncodeISOArray src (Binary dst len)));
17073
- effect(USE_KILL src, USE_KILL dst, USE len,
17074
- KILL vtmp0 , KILL vtmp1 , KILL vtmp2 , KILL vtmp3 , KILL cr);
17096
+ effect(USE_KILL src, USE_KILL dst, USE len, KILL vtmp0, KILL vtmp1,
17097
+ KILL vtmp2 , KILL vtmp3 , KILL vtmp4 , KILL vtmp5 , KILL cr);
17075
17098
17076
- format %{ "Encode ISO array $src,$dst,$len -> $result" %}
17099
+ format %{ "Encode ISO array $src,$dst,$len -> $result # KILL $src $dst V0-V5 cr " %}
17077
17100
ins_encode %{
17078
17101
__ encode_iso_array($src$$Register, $dst$$Register, $len$$Register,
17079
17102
$result$$Register, false,
17080
17103
$vtmp0$$FloatRegister, $vtmp1$$FloatRegister,
17081
- $vtmp2$$FloatRegister, $vtmp3$$FloatRegister);
17104
+ $vtmp2$$FloatRegister, $vtmp3$$FloatRegister,
17105
+ $vtmp4$$FloatRegister, $vtmp5$$FloatRegister);
17082
17106
%}
17083
17107
ins_pipe(pipe_class_memory);
17084
17108
%}
17085
17109
17086
17110
instruct encode_ascii_array(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len,
17087
- vRegD_V0 vtmp0, vRegD_V1 vtmp1,
17088
- vRegD_V2 vtmp2, vRegD_V3 vtmp3 ,
17111
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2,
17112
+ vRegD_V3 vtmp3, vRegD_V4 vtmp4, vRegD_V5 vtmp5 ,
17089
17113
iRegI_R0 result, rFlagsReg cr)
17090
17114
%{
17091
17115
predicate(((EncodeISOArrayNode*)n)->is_ascii());
17092
17116
match(Set result (EncodeISOArray src (Binary dst len)));
17093
- effect(USE_KILL src, USE_KILL dst, USE len,
17094
- KILL vtmp0 , KILL vtmp1 , KILL vtmp2 , KILL vtmp3 , KILL cr);
17117
+ effect(USE_KILL src, USE_KILL dst, USE len, KILL vtmp0, KILL vtmp1,
17118
+ KILL vtmp2 , KILL vtmp3 , KILL vtmp4 , KILL vtmp5 , KILL cr);
17095
17119
17096
- format %{ "Encode ASCII array $src,$dst,$len -> $result" %}
17120
+ format %{ "Encode ASCII array $src,$dst,$len -> $result # KILL $src $dst V0-V5 cr " %}
17097
17121
ins_encode %{
17098
17122
__ encode_iso_array($src$$Register, $dst$$Register, $len$$Register,
17099
17123
$result$$Register, true,
17100
17124
$vtmp0$$FloatRegister, $vtmp1$$FloatRegister,
17101
- $vtmp2$$FloatRegister, $vtmp3$$FloatRegister);
17125
+ $vtmp2$$FloatRegister, $vtmp3$$FloatRegister,
17126
+ $vtmp4$$FloatRegister, $vtmp5$$FloatRegister);
17102
17127
%}
17103
17128
ins_pipe(pipe_class_memory);
17104
17129
%}
0 commit comments