@@ -8657,6 +8657,96 @@ instruct cmpLTMask_reg_zero(iRegINoSp dst, iRegIorL2I op, immI0 zero)
8657
8657
// ============================================================================
8658
8658
// Max and Min
8659
8659
8660
+ instruct minI_reg_reg(iRegINoSp dst, iRegI src)
8661
+ %{
8662
+ match(Set dst (MinI dst src));
8663
+
8664
+ ins_cost(BRANCH_COST + ALU_COST);
8665
+ format %{
8666
+ "ble $dst, $src, skip\t#@minI_reg_reg\n\t"
8667
+ "mv $dst, $src\n\t"
8668
+ "skip:"
8669
+ %}
8670
+
8671
+ ins_encode %{
8672
+ Label Lskip;
8673
+ __ ble(as_Register($dst$$reg), as_Register($src$$reg), Lskip);
8674
+ __ mv(as_Register($dst$$reg), as_Register($src$$reg));
8675
+ __ bind(Lskip);
8676
+ %}
8677
+
8678
+ ins_pipe(pipe_class_compare);
8679
+ %}
8680
+
8681
+ instruct maxI_reg_reg(iRegINoSp dst, iRegI src)
8682
+ %{
8683
+ match(Set dst (MaxI dst src));
8684
+
8685
+ ins_cost(BRANCH_COST + ALU_COST);
8686
+ format %{
8687
+ "bge $dst, $src, skip\t#@maxI_reg_reg\n\t"
8688
+ "mv $dst, $src\n\t"
8689
+ "skip:"
8690
+ %}
8691
+
8692
+ ins_encode %{
8693
+ Label Lskip;
8694
+ __ bge(as_Register($dst$$reg), as_Register($src$$reg), Lskip);
8695
+ __ mv(as_Register($dst$$reg), as_Register($src$$reg));
8696
+ __ bind(Lskip);
8697
+ %}
8698
+
8699
+ ins_pipe(pipe_class_compare);
8700
+ %}
8701
+
8702
+ // special case for comparing with zero
8703
+ // n.b. this is selected in preference to the rule above because it
8704
+ // avoids loading constant 0 into a source register
8705
+
8706
+ instruct minI_reg_zero(iRegINoSp dst, immI0 zero)
8707
+ %{
8708
+ match(Set dst (MinI dst zero));
8709
+ match(Set dst (MinI zero dst));
8710
+
8711
+ ins_cost(BRANCH_COST + ALU_COST);
8712
+ format %{
8713
+ "blez $dst, skip\t#@minI_reg_zero\n\t"
8714
+ "mv $dst, zr\n\t"
8715
+ "skip:"
8716
+ %}
8717
+
8718
+ ins_encode %{
8719
+ Label Lskip;
8720
+ __ blez(as_Register($dst$$reg), Lskip);
8721
+ __ mv(as_Register($dst$$reg), zr);
8722
+ __ bind(Lskip);
8723
+ %}
8724
+
8725
+ ins_pipe(pipe_class_compare);
8726
+ %}
8727
+
8728
+ instruct maxI_reg_zero(iRegINoSp dst, immI0 zero)
8729
+ %{
8730
+ match(Set dst (MaxI dst zero));
8731
+ match(Set dst (MaxI zero dst));
8732
+
8733
+ ins_cost(BRANCH_COST + ALU_COST);
8734
+ format %{
8735
+ "bgez $dst, skip\t#@maxI_reg_zero\n\t"
8736
+ "mv $dst, zr\n\t"
8737
+ "skip:"
8738
+ %}
8739
+
8740
+ ins_encode %{
8741
+ Label Lskip;
8742
+ __ bgez(as_Register($dst$$reg), Lskip);
8743
+ __ mv(as_Register($dst$$reg), zr);
8744
+ __ bind(Lskip);
8745
+ %}
8746
+
8747
+ ins_pipe(pipe_class_compare);
8748
+ %}
8749
+
8660
8750
instruct minI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
8661
8751
%{
8662
8752
match(Set dst (MinI src1 src2));
@@ -8683,7 +8773,7 @@ instruct minI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
8683
8773
__ bind(Ldone);
8684
8774
%}
8685
8775
8686
- ins_pipe(ialu_reg_reg );
8776
+ ins_pipe(pipe_class_compare );
8687
8777
%}
8688
8778
8689
8779
instruct maxI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
@@ -8713,7 +8803,7 @@ instruct maxI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
8713
8803
8714
8804
%}
8715
8805
8716
- ins_pipe(ialu_reg_reg );
8806
+ ins_pipe(pipe_class_compare );
8717
8807
%}
8718
8808
8719
8809
// ============================================================================
0 commit comments