@@ -13180,6 +13180,16 @@ instruct cmovPP_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegP dst, eRegP s
1318013180 ins_pipe( pipe_cmov_reg );
1318113181%}
1318213182
13183+ // Compare 2 unsigned longs and CMOVE ptrs.
13184+ instruct cmovPP_reg_LTGE_U(cmpOpU cmp, flagsReg_ulong_LTGE flags, eRegP dst, eRegP src) %{
13185+ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ));
13186+ match(Set dst (CMoveP (Binary cmp flags) (Binary dst src)));
13187+ ins_cost(200);
13188+ expand %{
13189+ cmovPP_reg_LTGE(cmp,flags,dst,src);
13190+ %}
13191+ %}
13192+
1318313193// Compare 2 longs and CMOVE doubles
1318413194instruct cmovDDPR_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regDPR dst, regDPR src) %{
1318513195 predicate( UseSSE<=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge );
@@ -13361,6 +13371,16 @@ instruct cmovPP_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegP dst, eRegP s
1336113371 ins_pipe( pipe_cmov_reg );
1336213372%}
1336313373
13374+ // Compare 2 unsigned longs and CMOVE ptrs.
13375+ instruct cmovPP_reg_EQNE_U(cmpOpU cmp, flagsReg_ulong_EQNE flags, eRegP dst, eRegP src) %{
13376+ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ));
13377+ match(Set dst (CMoveP (Binary cmp flags) (Binary dst src)));
13378+ ins_cost(200);
13379+ expand %{
13380+ cmovPP_reg_EQNE(cmp,flags,dst,src);
13381+ %}
13382+ %}
13383+
1336413384// Compare 2 longs and CMOVE doubles
1336513385instruct cmovDDPR_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regDPR dst, regDPR src) %{
1336613386 predicate( UseSSE<=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne );
@@ -13570,6 +13590,16 @@ instruct cmovPP_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegP dst,
1357013590 ins_pipe( pipe_cmov_reg );
1357113591%}
1357213592
13593+ // Compare 2 unsigned longs and CMOVE ptrs.
13594+ instruct cmovPP_reg_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, eRegP dst, eRegP src) %{
13595+ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ));
13596+ match(Set dst (CMoveP (Binary cmp flags) (Binary dst src)));
13597+ ins_cost(200);
13598+ expand %{
13599+ cmovPP_reg_LEGT(cmp,flags,dst,src);
13600+ %}
13601+ %}
13602+
1357313603// Compare 2 longs and CMOVE doubles
1357413604instruct cmovDDPR_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, regDPR dst, regDPR src) %{
1357513605 predicate( UseSSE<=1 && _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt );
0 commit comments