@@ -17105,14 +17105,17 @@ instruct string_compareUU_sve(iRegP_R1 str1, iRegI_R2 cnt1, iRegP_R3 str2, iRegI
17105
17105
%}
17106
17106
17107
17107
instruct string_indexofUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
17108
- iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
17109
- iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6, rFlagsReg cr)
17108
+ iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2,
17109
+ iRegINoSp tmp3, iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6,
17110
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, rFlagsReg cr)
17110
17111
%{
17111
17112
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
17112
17113
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
17113
17114
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
17114
- TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6, KILL cr);
17115
- format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UU)" %}
17115
+ TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6,
17116
+ TEMP vtmp0, TEMP vtmp1, KILL cr);
17117
+ format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UU) "
17118
+ "# KILL $str1 $cnt1 $str2 $cnt2 $tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 V0-V1 cr" %}
17116
17119
17117
17120
ins_encode %{
17118
17121
__ string_indexof($str1$$Register, $str2$$Register,
@@ -17126,14 +17129,17 @@ instruct string_indexofUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2
17126
17129
%}
17127
17130
17128
17131
instruct string_indexofLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
17129
- iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
17130
- iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6, rFlagsReg cr)
17132
+ iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
17133
+ iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6,
17134
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, rFlagsReg cr)
17131
17135
%{
17132
17136
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL);
17133
17137
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
17134
17138
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
17135
- TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6, KILL cr);
17136
- format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (LL)" %}
17139
+ TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6,
17140
+ TEMP vtmp0, TEMP vtmp1, KILL cr);
17141
+ format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (LL) "
17142
+ "# KILL $str1 $cnt1 $str2 $cnt2 $tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 V0-V1 cr" %}
17137
17143
17138
17144
ins_encode %{
17139
17145
__ string_indexof($str1$$Register, $str2$$Register,
@@ -17147,14 +17153,17 @@ instruct string_indexofLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2
17147
17153
%}
17148
17154
17149
17155
instruct string_indexofUL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2 cnt2,
17150
- iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2, iRegINoSp tmp3,
17151
- iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6, rFlagsReg cr)
17156
+ iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2,iRegINoSp tmp3,
17157
+ iRegINoSp tmp4, iRegINoSp tmp5, iRegINoSp tmp6,
17158
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, rFlagsReg cr)
17152
17159
%{
17153
17160
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL);
17154
17161
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2)));
17155
17162
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2,
17156
- TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, TEMP tmp6, KILL cr);
17157
- format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UL)" %}
17163
+ TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5,
17164
+ TEMP tmp6, TEMP vtmp0, TEMP vtmp1, KILL cr);
17165
+ format %{ "String IndexOf $str1,$cnt1,$str2,$cnt2 -> $result (UL) "
17166
+ "# KILL $str1 cnt1 $str2 $cnt2 $tmp1 $tmp2 $tmp3 $tmp4 $tmp5 $tmp6 V0-V1 cr" %}
17158
17167
17159
17168
ins_encode %{
17160
17169
__ string_indexof($str1$$Register, $str2$$Register,
@@ -17168,14 +17177,15 @@ instruct string_indexofUL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2, iRegI_R2
17168
17177
%}
17169
17178
17170
17179
instruct string_indexof_conUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
17171
- immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2 ,
17172
- iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
17180
+ immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1,
17181
+ iRegINoSp tmp2, iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
17173
17182
%{
17174
17183
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU);
17175
17184
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
17176
17185
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
17177
17186
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
17178
- format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UU)" %}
17187
+ format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UU) "
17188
+ "# KILL $str1 $cnt1 $str2 $tmp1 $tmp2 $tmp3 $tmp4 cr" %}
17179
17189
17180
17190
ins_encode %{
17181
17191
int icnt2 = (int)$int_cnt2$$constant;
@@ -17189,14 +17199,15 @@ instruct string_indexof_conUU(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
17189
17199
%}
17190
17200
17191
17201
instruct string_indexof_conLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
17192
- immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2 ,
17193
- iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
17202
+ immI_le_4 int_cnt2, iRegI_R0 result, iRegINoSp tmp1,
17203
+ iRegINoSp tmp2, iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
17194
17204
%{
17195
17205
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL);
17196
17206
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
17197
17207
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
17198
17208
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
17199
- format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (LL)" %}
17209
+ format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (LL) "
17210
+ "# KILL $str1 $cnt1 $str2 $tmp1 $tmp2 $tmp3 $tmp4 cr" %}
17200
17211
17201
17212
ins_encode %{
17202
17213
int icnt2 = (int)$int_cnt2$$constant;
@@ -17210,14 +17221,15 @@ instruct string_indexof_conLL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
17210
17221
%}
17211
17222
17212
17223
instruct string_indexof_conUL(iRegP_R1 str1, iRegI_R4 cnt1, iRegP_R3 str2,
17213
- immI_1 int_cnt2, iRegI_R0 result, iRegINoSp tmp1, iRegINoSp tmp2 ,
17214
- iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
17224
+ immI_1 int_cnt2, iRegI_R0 result, iRegINoSp tmp1,
17225
+ iRegINoSp tmp2, iRegINoSp tmp3, iRegINoSp tmp4, rFlagsReg cr)
17215
17226
%{
17216
17227
predicate(((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL);
17217
17228
match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2)));
17218
17229
effect(USE_KILL str1, USE_KILL str2, USE_KILL cnt1,
17219
17230
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr);
17220
- format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UL)" %}
17231
+ format %{ "String IndexOf $str1,$cnt1,$str2,$int_cnt2 -> $result (UL) "
17232
+ "# KILL $str1 $cnt1 $str2 $tmp1 $tmp2 $tmp3 $tmp4 cr" %}
17221
17233
17222
17234
ins_encode %{
17223
17235
int icnt2 = (int)$int_cnt2$$constant;
@@ -17334,13 +17346,17 @@ instruct string_equalsU(iRegP_R1 str1, iRegP_R3 str2, iRegI_R4 cnt,
17334
17346
17335
17347
instruct array_equalsB(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
17336
17348
iRegP_R3 tmp1, iRegP_R4 tmp2, iRegP_R5 tmp3,
17349
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2, vRegD_V3 vtmp3,
17350
+ vRegD_V4 vtmp4, vRegD_V5 vtmp5, vRegD_V6 vtmp6, vRegD_V7 vtmp7,
17337
17351
iRegP_R10 tmp, rFlagsReg cr)
17338
17352
%{
17339
17353
predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL);
17340
17354
match(Set result (AryEq ary1 ary2));
17341
- effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr);
17355
+ effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3,
17356
+ TEMP vtmp0, TEMP vtmp1, TEMP vtmp2, TEMP vtmp3, TEMP vtmp4, TEMP vtmp5,
17357
+ TEMP vtmp6, TEMP vtmp7, KILL cr);
17342
17358
17343
- format %{ "Array Equals $ary1,ary2 -> $result // KILL $tmp" %}
17359
+ format %{ "Array Equals $ary1,ary2 -> $result # KILL $ary1 $ary2 $tmp $tmp1 $tmp2 $tmp3 V0-V7 cr " %}
17344
17360
ins_encode %{
17345
17361
address tpc = __ arrays_equals($ary1$$Register, $ary2$$Register,
17346
17362
$tmp1$$Register, $tmp2$$Register, $tmp3$$Register,
@@ -17355,13 +17371,17 @@ instruct array_equalsB(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
17355
17371
17356
17372
instruct array_equalsC(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result,
17357
17373
iRegP_R3 tmp1, iRegP_R4 tmp2, iRegP_R5 tmp3,
17374
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2, vRegD_V3 vtmp3,
17375
+ vRegD_V4 vtmp4, vRegD_V5 vtmp5, vRegD_V6 vtmp6, vRegD_V7 vtmp7,
17358
17376
iRegP_R10 tmp, rFlagsReg cr)
17359
17377
%{
17360
17378
predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU);
17361
17379
match(Set result (AryEq ary1 ary2));
17362
- effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr);
17380
+ effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, TEMP tmp1, TEMP tmp2, TEMP tmp3,
17381
+ TEMP vtmp0, TEMP vtmp1, TEMP vtmp2, TEMP vtmp3, TEMP vtmp4, TEMP vtmp5,
17382
+ TEMP vtmp6, TEMP vtmp7, KILL cr);
17363
17383
17364
- format %{ "Array Equals $ary1,ary2 -> $result // KILL $tmp" %}
17384
+ format %{ "Array Equals $ary1,ary2 -> $result # KILL $ary1 $ary2 $tmp $tmp1 $tmp2 $tmp3 V0-V7 cr " %}
17365
17385
ins_encode %{
17366
17386
address tpc = __ arrays_equals($ary1$$Register, $ary2$$Register,
17367
17387
$tmp1$$Register, $tmp2$$Register, $tmp3$$Register,
@@ -17391,36 +17411,39 @@ instruct count_positives(iRegP_R1 ary1, iRegI_R2 len, iRegI_R0 result, rFlagsReg
17391
17411
17392
17412
// fast char[] to byte[] compression
17393
17413
instruct string_compress(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len,
17394
- vRegD_V0 tmp1 , vRegD_V1 tmp2 ,
17395
- vRegD_V2 tmp3, vRegD_V3 tmp4 ,
17414
+ vRegD_V0 vtmp0 , vRegD_V1 vtmp1, vRegD_V2 vtmp2 ,
17415
+ vRegD_V3 vtmp3, vRegD_V4 vtmp4, vRegD_V5 vtmp5 ,
17396
17416
iRegI_R0 result, rFlagsReg cr)
17397
17417
%{
17398
17418
match(Set result (StrCompressedCopy src (Binary dst len)));
17399
- effect(TEMP tmp1 , TEMP tmp2 , TEMP tmp3 , TEMP tmp4 ,
17419
+ effect(TEMP vtmp0 , TEMP vtmp1 , TEMP vtmp2 , TEMP vtmp3, TEMP vtmp4, TEMP vtmp5 ,
17400
17420
USE_KILL src, USE_KILL dst, USE len, KILL cr);
17401
17421
17402
- format %{ "String Compress $src,$dst,$len -> $result // KILL $src, $dst" %}
17422
+ format %{ "String Compress $src,$dst,$len -> $result # KILL $src $dst V0-V5 cr " %}
17403
17423
ins_encode %{
17404
17424
__ char_array_compress($src$$Register, $dst$$Register, $len$$Register,
17405
- $result$$Register,
17406
- $tmp1 $$FloatRegister, $tmp2 $$FloatRegister,
17407
- $tmp3 $$FloatRegister, $tmp4 $$FloatRegister);
17425
+ $result$$Register, $vtmp0$$FloatRegister, $vtmp1$$FloatRegister,
17426
+ $vtmp2 $$FloatRegister, $vtmp3 $$FloatRegister,
17427
+ $vtmp4 $$FloatRegister, $vtmp5 $$FloatRegister);
17408
17428
%}
17409
17429
ins_pipe(pipe_slow);
17410
17430
%}
17411
17431
17412
17432
// fast byte[] to char[] inflation
17413
- instruct string_inflate(Universe dummy, iRegP_R0 src, iRegP_R1 dst, iRegI_R2 len,
17414
- vRegD_V0 tmp1, vRegD_V1 tmp2, vRegD_V2 tmp3, iRegP_R3 tmp4, rFlagsReg cr)
17433
+ instruct string_inflate(Universe dummy, iRegP_R0 src, iRegP_R1 dst, iRegI_R2 len, iRegP_R3 tmp,
17434
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2, vRegD_V3 vtmp3,
17435
+ vRegD_V4 vtmp4, vRegD_V5 vtmp5, vRegD_V6 vtmp6, rFlagsReg cr)
17415
17436
%{
17416
17437
match(Set dummy (StrInflatedCopy src (Binary dst len)));
17417
- effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr);
17438
+ effect(TEMP vtmp0, TEMP vtmp1, TEMP vtmp2, TEMP vtmp3,
17439
+ TEMP vtmp4, TEMP vtmp5, TEMP vtmp6, TEMP tmp,
17440
+ USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr);
17418
17441
17419
- format %{ "String Inflate $src,$dst // KILL $tmp1, $tmp2 " %}
17442
+ format %{ "String Inflate $src,$dst # KILL $tmp $src $dst $len V0-V6 cr " %}
17420
17443
ins_encode %{
17421
17444
address tpc = __ byte_array_inflate($src$$Register, $dst$$Register, $len$$Register,
17422
- $tmp1 $$FloatRegister, $tmp2 $$FloatRegister,
17423
- $tmp3 $$FloatRegister, $tmp4 $$Register);
17445
+ $vtmp0 $$FloatRegister, $vtmp1 $$FloatRegister,
17446
+ $vtmp2 $$FloatRegister, $tmp $$Register);
17424
17447
if (tpc == NULL) {
17425
17448
ciEnv::current()->record_failure("CodeCache is full");
17426
17449
return;
@@ -17431,41 +17454,43 @@ instruct string_inflate(Universe dummy, iRegP_R0 src, iRegP_R1 dst, iRegI_R2 len
17431
17454
17432
17455
// encode char[] to byte[] in ISO_8859_1
17433
17456
instruct encode_iso_array(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len,
17434
- vRegD_V0 vtmp0, vRegD_V1 vtmp1,
17435
- vRegD_V2 vtmp2, vRegD_V3 vtmp3 ,
17457
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2,
17458
+ vRegD_V3 vtmp3, vRegD_V4 vtmp4, vRegD_V5 vtmp5 ,
17436
17459
iRegI_R0 result, rFlagsReg cr)
17437
17460
%{
17438
17461
predicate(!((EncodeISOArrayNode*)n)->is_ascii());
17439
17462
match(Set result (EncodeISOArray src (Binary dst len)));
17440
- effect(USE_KILL src, USE_KILL dst, USE len,
17441
- KILL vtmp0 , KILL vtmp1 , KILL vtmp2 , KILL vtmp3 , KILL cr);
17463
+ effect(USE_KILL src, USE_KILL dst, USE len, KILL vtmp0, KILL vtmp1,
17464
+ KILL vtmp2 , KILL vtmp3 , KILL vtmp4 , KILL vtmp5 , KILL cr);
17442
17465
17443
- format %{ "Encode ISO array $src,$dst,$len -> $result" %}
17466
+ format %{ "Encode ISO array $src,$dst,$len -> $result # KILL $src $dst V0-V5 cr " %}
17444
17467
ins_encode %{
17445
17468
__ encode_iso_array($src$$Register, $dst$$Register, $len$$Register,
17446
17469
$result$$Register, false,
17447
17470
$vtmp0$$FloatRegister, $vtmp1$$FloatRegister,
17448
- $vtmp2$$FloatRegister, $vtmp3$$FloatRegister);
17471
+ $vtmp2$$FloatRegister, $vtmp3$$FloatRegister,
17472
+ $vtmp4$$FloatRegister, $vtmp5$$FloatRegister);
17449
17473
%}
17450
17474
ins_pipe(pipe_class_memory);
17451
17475
%}
17452
17476
17453
17477
instruct encode_ascii_array(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len,
17454
- vRegD_V0 vtmp0, vRegD_V1 vtmp1,
17455
- vRegD_V2 vtmp2, vRegD_V3 vtmp3 ,
17478
+ vRegD_V0 vtmp0, vRegD_V1 vtmp1, vRegD_V2 vtmp2,
17479
+ vRegD_V3 vtmp3, vRegD_V4 vtmp4, vRegD_V5 vtmp5 ,
17456
17480
iRegI_R0 result, rFlagsReg cr)
17457
17481
%{
17458
17482
predicate(((EncodeISOArrayNode*)n)->is_ascii());
17459
17483
match(Set result (EncodeISOArray src (Binary dst len)));
17460
- effect(USE_KILL src, USE_KILL dst, USE len,
17461
- KILL vtmp0 , KILL vtmp1 , KILL vtmp2 , KILL vtmp3 , KILL cr);
17484
+ effect(USE_KILL src, USE_KILL dst, USE len, KILL vtmp0, KILL vtmp1,
17485
+ KILL vtmp2 , KILL vtmp3 , KILL vtmp4 , KILL vtmp5 , KILL cr);
17462
17486
17463
- format %{ "Encode ASCII array $src,$dst,$len -> $result" %}
17487
+ format %{ "Encode ASCII array $src,$dst,$len -> $result # KILL $src $dst V0-V5 cr " %}
17464
17488
ins_encode %{
17465
17489
__ encode_iso_array($src$$Register, $dst$$Register, $len$$Register,
17466
17490
$result$$Register, true,
17467
17491
$vtmp0$$FloatRegister, $vtmp1$$FloatRegister,
17468
- $vtmp2$$FloatRegister, $vtmp3$$FloatRegister);
17492
+ $vtmp2$$FloatRegister, $vtmp3$$FloatRegister,
17493
+ $vtmp4$$FloatRegister, $vtmp5$$FloatRegister);
17469
17494
%}
17470
17495
ins_pipe(pipe_class_memory);
17471
17496
%}
0 commit comments