@@ -8448,6 +8448,21 @@ instruct cmovLL_reg_LTGE(cmpOpL cmp, flagsRegL_LTGE xcc, iRegL dst, iRegL src) %
8448
8448
ins_pipe(ialu_reg);
8449
8449
%}
8450
8450
8451
+ instruct cmovLL_reg_LTGE_U(cmpOpL cmp, flagsRegUL_LTGE xcc, iRegL dst, iRegL src) %{
8452
+ match(Set dst (CMoveL (Binary cmp xcc) (Binary dst src)));
8453
+ predicate(_kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
8454
+
8455
+ ins_cost(150);
8456
+ size(8);
8457
+ format %{ "MOV$cmp $dst.lo,$src.lo\t! long\n\t"
8458
+ "MOV$cmp $dst,$src.hi" %}
8459
+ ins_encode %{
8460
+ __ mov($dst$$Register, $src$$Register, (AsmCondition)($cmp$$cmpcode));
8461
+ __ mov($dst$$Register->successor(), $src$$Register->successor(), (AsmCondition)($cmp$$cmpcode));
8462
+ %}
8463
+ ins_pipe(ialu_reg);
8464
+ %}
8465
+
8451
8466
instruct cmovLL_reg_EQNE(cmpOpL cmp, flagsRegL_EQNE xcc, iRegL dst, iRegL src) %{
8452
8467
match(Set dst (CMoveL (Binary cmp xcc) (Binary dst src)));
8453
8468
predicate(_kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne );
@@ -8478,6 +8493,21 @@ instruct cmovLL_reg_LEGT(cmpOpL_commute cmp, flagsRegL_LEGT xcc, iRegL dst, iReg
8478
8493
ins_pipe(ialu_reg);
8479
8494
%}
8480
8495
8496
+ instruct cmovLL_reg_LEGT_U(cmpOpL_commute cmp, flagsRegUL_LEGT xcc, iRegL dst, iRegL src) %{
8497
+ match(Set dst (CMoveL (Binary cmp xcc) (Binary dst src)));
8498
+ predicate(_kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt );
8499
+
8500
+ ins_cost(150);
8501
+ size(8);
8502
+ format %{ "MOV$cmp $dst.lo,$src.lo\t! long\n\t"
8503
+ "MOV$cmp $dst,$src.hi" %}
8504
+ ins_encode %{
8505
+ __ mov($dst$$Register, $src$$Register, (AsmCondition)($cmp$$cmpcode));
8506
+ __ mov($dst$$Register->successor(), $src$$Register->successor(), (AsmCondition)($cmp$$cmpcode));
8507
+ %}
8508
+ ins_pipe(ialu_reg);
8509
+ %}
8510
+
8481
8511
instruct cmovLL_imm_LTGE(cmpOpL cmp, flagsRegL_LTGE xcc, iRegL dst, immL0 src) %{
8482
8512
match(Set dst (CMoveL (Binary cmp xcc) (Binary dst src)));
8483
8513
predicate(_kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
@@ -8492,6 +8522,20 @@ instruct cmovLL_imm_LTGE(cmpOpL cmp, flagsRegL_LTGE xcc, iRegL dst, immL0 src) %
8492
8522
ins_pipe(ialu_imm);
8493
8523
%}
8494
8524
8525
+ instruct cmovLL_imm_LTGE_U(cmpOpL cmp, flagsRegUL_LTGE xcc, iRegL dst, immL0 src) %{
8526
+ match(Set dst (CMoveL (Binary cmp xcc) (Binary dst src)));
8527
+ predicate(_kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
8528
+ ins_cost(140);
8529
+ size(8);
8530
+ format %{ "MOV$cmp $dst.lo,0\t! long\n\t"
8531
+ "MOV$cmp $dst,0" %}
8532
+ ins_encode %{
8533
+ __ mov($dst$$Register, 0, (AsmCondition)($cmp$$cmpcode));
8534
+ __ mov($dst$$Register->successor(), 0, (AsmCondition)($cmp$$cmpcode));
8535
+ %}
8536
+ ins_pipe(ialu_imm);
8537
+ %}
8538
+
8495
8539
instruct cmovLL_imm_EQNE(cmpOpL cmp, flagsRegL_EQNE xcc, iRegL dst, immL0 src) %{
8496
8540
match(Set dst (CMoveL (Binary cmp xcc) (Binary dst src)));
8497
8541
predicate(_kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne );
0 commit comments