@@ -6267,13 +6267,14 @@ instruct cmovI_regUCF2_ne(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegI dst, rRegI src)
62676267instruct cmovI_regUCF2_ne_ndd(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegI dst, rRegI src1, rRegI src2) %{
62686268 predicate(UseAPX && n->in(1)->in(1)->as_Bool()->_test._test == BoolTest::ne);
62696269 match(Set dst (CMoveI (Binary cop cr) (Binary src1 src2)));
6270+ effect(TEMP dst);
62706271
62716272 ins_cost(200);
62726273 format %{ "ecmovpl $dst, $src1, $src2\n\t"
6273- "ecmovnel $dst, $src1 , $src2" %}
6274+ "cmovnel $dst , $src2" %}
62746275 ins_encode %{
62756276 __ ecmovl(Assembler::parity, $dst$$Register, $src1$$Register, $src2$$Register);
6276- __ ecmovl (Assembler::notEqual, $dst$$Register, $src1 $$Register, $src2$$Register);
6277+ __ cmovl (Assembler::notEqual, $dst$$Register, $src2$$Register);
62776278 %}
62786279 ins_pipe(pipe_cmov_reg);
62796280%}
@@ -6283,6 +6284,7 @@ instruct cmovI_regUCF2_ne_ndd(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegI dst, rRegI s
62836284instruct cmovI_regUCF2_eq(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegI dst, rRegI src) %{
62846285 predicate(!UseAPX && n->in(1)->in(1)->as_Bool()->_test._test == BoolTest::eq);
62856286 match(Set dst (CMoveI (Binary cop cr) (Binary src dst)));
6287+ effect(TEMP dst);
62866288
62876289 ins_cost(200); // XXX
62886290 format %{ "cmovpl $dst, $src\n\t"
@@ -6298,14 +6300,15 @@ instruct cmovI_regUCF2_eq(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegI dst, rRegI src)
62986300// and parity flag bit is set if any of the operand is a NaN.
62996301instruct cmovI_regUCF2_eq_ndd(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegI dst, rRegI src1, rRegI src2) %{
63006302 predicate(UseAPX && n->in(1)->in(1)->as_Bool()->_test._test == BoolTest::eq);
6301- match(Set dst (CMoveI (Binary cop cr) (Binary src1 src2)));
6303+ match(Set dst (CMoveI (Binary cop cr) (Binary src2 src1)));
6304+ effect(TEMP dst);
63026305
63036306 ins_cost(200);
63046307 format %{ "ecmovpl $dst, $src1, $src2\n\t"
6305- "ecmovnel $dst, $src1 , $src2" %}
6308+ "cmovnel $dst , $src2" %}
63066309 ins_encode %{
63076310 __ ecmovl(Assembler::parity, $dst$$Register, $src1$$Register, $src2$$Register);
6308- __ ecmovl (Assembler::notEqual, $dst$$Register, $src1 $$Register, $src2$$Register);
6311+ __ cmovl (Assembler::notEqual, $dst$$Register, $src2$$Register);
63096312 %}
63106313 ins_pipe(pipe_cmov_reg);
63116314%}
@@ -6548,6 +6551,7 @@ instruct cmovP_regU_ndd(rRegP dst, cmpOpU cop, rFlagsRegU cr, rRegP src1, rRegP
65486551%}
65496552
65506553instruct cmovP_regUCF(cmpOpUCF cop, rFlagsRegUCF cr, rRegP dst, rRegP src) %{
6554+ predicate(!UseAPX);
65516555 match(Set dst (CMoveP (Binary cop cr) (Binary dst src)));
65526556 ins_cost(200);
65536557 expand %{
@@ -6556,6 +6560,7 @@ instruct cmovP_regUCF(cmpOpUCF cop, rFlagsRegUCF cr, rRegP dst, rRegP src) %{
65566560%}
65576561
65586562instruct cmovP_regUCF_ndd(rRegP dst, cmpOpUCF cop, rFlagsRegUCF cr, rRegP src1, rRegP src2) %{
6563+ predicate(UseAPX);
65596564 match(Set dst (CMoveP (Binary cop cr) (Binary src1 src2)));
65606565 ins_cost(200);
65616566 format %{ "ecmovq$cop $dst, $src1, $src2\t# unsigned, ptr ndd" %}
@@ -6582,13 +6587,14 @@ instruct cmovP_regUCF2_ne(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegP dst, rRegP src)
65826587instruct cmovP_regUCF2_ne_ndd(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegP dst, rRegP src1, rRegP src2) %{
65836588 predicate(UseAPX && n->in(1)->in(1)->as_Bool()->_test._test == BoolTest::ne);
65846589 match(Set dst (CMoveP (Binary cop cr) (Binary src1 src2)));
6590+ effect(TEMP dst);
65856591
65866592 ins_cost(200);
65876593 format %{ "ecmovpq $dst, $src1, $src2\n\t"
6588- "ecmovneq $dst, $src1 , $src2" %}
6594+ "cmovneq $dst , $src2" %}
65896595 ins_encode %{
65906596 __ ecmovq(Assembler::parity, $dst$$Register, $src1$$Register, $src2$$Register);
6591- __ ecmovq (Assembler::notEqual, $dst$$Register, $src1 $$Register, $src2$$Register);
6597+ __ cmovq (Assembler::notEqual, $dst$$Register, $src2$$Register);
65926598 %}
65936599 ins_pipe(pipe_cmov_reg);
65946600%}
@@ -6611,14 +6617,15 @@ instruct cmovP_regUCF2_eq(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegP dst, rRegP src)
66116617
66126618instruct cmovP_regUCF2_eq_ndd(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegP dst, rRegP src1, rRegP src2) %{
66136619 predicate(UseAPX && n->in(1)->in(1)->as_Bool()->_test._test == BoolTest::eq);
6614- match(Set dst (CMoveP (Binary cop cr) (Binary src1 src2)));
6620+ match(Set dst (CMoveP (Binary cop cr) (Binary src2 src1)));
6621+ effect(TEMP dst);
66156622
66166623 ins_cost(200);
66176624 format %{ "ecmovpq $dst, $src1, $src2\n\t"
6618- "ecmovneq $dst, $src1 , $src2" %}
6625+ "cmovneq $dst , $src2" %}
66196626 ins_encode %{
66206627 __ ecmovq(Assembler::parity, $dst$$Register, $src1$$Register, $src2$$Register);
6621- __ ecmovq (Assembler::notEqual, $dst$$Register, $src1 $$Register, $src2$$Register);
6628+ __ cmovq (Assembler::notEqual, $dst$$Register, $src2$$Register);
66226629 %}
66236630 ins_pipe(pipe_cmov_reg);
66246631%}
@@ -6781,13 +6788,14 @@ instruct cmovL_regUCF2_ne(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegL dst, rRegL src)
67816788instruct cmovL_regUCF2_ne_ndd(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegL dst, rRegL src1, rRegL src2) %{
67826789 predicate(UseAPX && n->in(1)->in(1)->as_Bool()->_test._test == BoolTest::ne);
67836790 match(Set dst (CMoveL (Binary cop cr) (Binary src1 src2)));
6791+ effect(TEMP dst);
67846792
67856793 ins_cost(200);
67866794 format %{ "ecmovpq $dst, $src1, $src2\n\t"
6787- "ecmovneq $dst, $src1 , $src2" %}
6795+ "cmovneq $dst , $src2" %}
67886796 ins_encode %{
67896797 __ ecmovq(Assembler::parity, $dst$$Register, $src1$$Register, $src2$$Register);
6790- __ ecmovq (Assembler::notEqual, $dst$$Register, $src1 $$Register, $src2$$Register);
6798+ __ cmovq (Assembler::notEqual, $dst$$Register, $src2$$Register);
67916799 %}
67926800 ins_pipe(pipe_cmov_reg);
67936801%}
@@ -6810,14 +6818,15 @@ instruct cmovL_regUCF2_eq(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegL dst, rRegL src)
68106818
68116819instruct cmovL_regUCF2_eq_ndd(cmpOpUCF2 cop, rFlagsRegUCF cr, rRegL dst, rRegL src1, rRegL src2) %{
68126820 predicate(UseAPX && n->in(1)->in(1)->as_Bool()->_test._test == BoolTest::eq);
6813- match(Set dst (CMoveL (Binary cop cr) (Binary src1 src2)));
6821+ match(Set dst (CMoveL (Binary cop cr) (Binary src2 src1)));
6822+ effect(TEMP dst);
68146823
68156824 ins_cost(200);
68166825 format %{ "ecmovpq $dst, $src1, $src2\n\t"
6817- "ecmovneq $dst, $src1 , $src2" %}
6826+ "cmovneq $dst, $src2" %}
68186827 ins_encode %{
68196828 __ ecmovq(Assembler::parity, $dst$$Register, $src1$$Register, $src2$$Register);
6820- __ ecmovq (Assembler::notEqual, $dst$$Register, $src1 $$Register, $src2$$Register);
6829+ __ cmovq (Assembler::notEqual, $dst$$Register, $src2$$Register);
68216830 %}
68226831 ins_pipe(pipe_cmov_reg);
68236832%}
0 commit comments