@@ -13150,7 +13150,25 @@ instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, memory
1315013150 ins_pipe( pipe_cmov_mem );
1315113151%}
1315213152
13153- // Compare 2 longs and CMOVE ints.
13153+ instruct cmovII_reg_LTGE_U(cmpOpU cmp, flagsReg_ulong_LTGE flags, rRegI dst, rRegI src) %{
13154+ 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 ));
13155+ match(Set dst (CMoveI (Binary cmp flags) (Binary dst src)));
13156+ ins_cost(200);
13157+ expand %{
13158+ cmovII_reg_LTGE(cmp, flags, dst, src);
13159+ %}
13160+ %}
13161+
13162+ instruct cmovII_mem_LTGE_U(cmpOpU cmp, flagsReg_ulong_LTGE flags, rRegI dst, memory src) %{
13163+ 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 ));
13164+ match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src))));
13165+ ins_cost(250);
13166+ expand %{
13167+ cmovII_mem_LTGE(cmp, flags, dst, src);
13168+ %}
13169+ %}
13170+
13171+ // Compare 2 longs and CMOVE ptrs.
1315413172instruct cmovPP_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegP dst, eRegP src) %{
1315513173 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 ));
1315613174 match(Set dst (CMoveP (Binary cmp flags) (Binary dst src)));
@@ -13313,7 +13331,25 @@ instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, memory
1331313331 ins_pipe( pipe_cmov_mem );
1331413332%}
1331513333
13316- // Compare 2 longs and CMOVE ints.
13334+ instruct cmovII_reg_EQNE_U(cmpOpU cmp, flagsReg_ulong_EQNE flags, rRegI dst, rRegI src) %{
13335+ 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 ));
13336+ match(Set dst (CMoveI (Binary cmp flags) (Binary dst src)));
13337+ ins_cost(200);
13338+ expand %{
13339+ cmovII_reg_EQNE(cmp, flags, dst, src);
13340+ %}
13341+ %}
13342+
13343+ instruct cmovII_mem_EQNE_U(cmpOpU cmp, flagsReg_ulong_EQNE flags, rRegI dst, memory src) %{
13344+ 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 ));
13345+ match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src))));
13346+ ins_cost(250);
13347+ expand %{
13348+ cmovII_mem_EQNE(cmp, flags, dst, src);
13349+ %}
13350+ %}
13351+
13352+ // Compare 2 longs and CMOVE ptrs.
1331713353instruct cmovPP_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegP dst, eRegP src) %{
1331813354 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 ));
1331913355 match(Set dst (CMoveP (Binary cmp flags) (Binary dst src)));
@@ -13469,22 +13505,18 @@ instruct cmovLL_reg_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, eRegL
1346913505 match(Set dst (CMoveL (Binary cmp flags) (Binary dst src)));
1347013506 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 ));
1347113507 ins_cost(400);
13472- format %{ "CMOV$cmp $dst.lo,$src.lo\n\t"
13473- "CMOV$cmp $dst.hi,$src.hi" %}
13474- opcode(0x0F,0x40);
13475- ins_encode( enc_cmov(cmp), RegReg_Lo2( dst, src ), enc_cmov(cmp), RegReg_Hi2( dst, src ) );
13476- ins_pipe( pipe_cmov_reg_long );
13508+ expand %{
13509+ cmovLL_reg_LEGT(cmp, flags, dst, src);
13510+ %}
1347713511%}
1347813512
1347913513instruct cmovLL_mem_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, eRegL dst, load_long_memory src) %{
1348013514 match(Set dst (CMoveL (Binary cmp flags) (Binary dst (LoadL src))));
1348113515 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 ));
1348213516 ins_cost(500);
13483- format %{ "CMOV$cmp $dst.lo,$src.lo\n\t"
13484- "CMOV$cmp $dst.hi,$src.hi+4" %}
13485- opcode(0x0F,0x40);
13486- ins_encode( enc_cmov(cmp), RegMem(dst, src), enc_cmov(cmp), RegMem_Hi(dst, src) );
13487- ins_pipe( pipe_cmov_reg_long );
13517+ expand %{
13518+ cmovLL_mem_LEGT(cmp, flags, dst, src);
13519+ %}
1348813520%}
1348913521
1349013522// Compare 2 longs and CMOVE ints.
@@ -13508,6 +13540,24 @@ instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst,
1350813540 ins_pipe( pipe_cmov_mem );
1350913541%}
1351013542
13543+ instruct cmovII_reg_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, rRegI dst, rRegI src) %{
13544+ 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 ));
13545+ match(Set dst (CMoveI (Binary cmp flags) (Binary dst src)));
13546+ ins_cost(200);
13547+ expand %{
13548+ cmovII_reg_LEGT(cmp, flags, dst, src);
13549+ %}
13550+ %}
13551+
13552+ instruct cmovII_mem_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, rRegI dst, memory src) %{
13553+ 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 ));
13554+ match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src))));
13555+ ins_cost(250);
13556+ expand %{
13557+ cmovII_mem_LEGT(cmp, flags, dst, src);
13558+ %}
13559+ %}
13560+
1351113561// Compare 2 longs and CMOVE ptrs.
1351213562instruct cmovPP_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegP dst, eRegP src) %{
1351313563 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 ));
0 commit comments