@@ -7349,6 +7349,7 @@ instruct nmaddD_reg_reg(fRegD dst, fRegD src1, fRegD src2, fRegD src3) %{
73497349
73507350// Math.max(FF)F
73517351instruct maxF_reg_reg(fRegF dst, fRegF src1, fRegF src2, rFlagsReg cr) %{
7352+ predicate(!UseZfa);
73527353 match(Set dst (MaxF src1 src2));
73537354 effect(KILL cr);
73547355
@@ -7363,8 +7364,23 @@ instruct maxF_reg_reg(fRegF dst, fRegF src1, fRegF src2, rFlagsReg cr) %{
73637364 ins_pipe(pipe_class_default);
73647365%}
73657366
7367+ instruct maxF_reg_reg_zfa(fRegF dst, fRegF src1, fRegF src2) %{
7368+ predicate(UseZfa);
7369+ match(Set dst (MaxF src1 src2));
7370+
7371+ format %{ "maxF $dst, $src1, $src2" %}
7372+
7373+ ins_encode %{
7374+ __ fmaxm_s(as_FloatRegister($dst$$reg),
7375+ as_FloatRegister($src1$$reg), as_FloatRegister($src2$$reg));
7376+ %}
7377+
7378+ ins_pipe(pipe_class_default);
7379+ %}
7380+
73667381// Math.min(FF)F
73677382instruct minF_reg_reg(fRegF dst, fRegF src1, fRegF src2, rFlagsReg cr) %{
7383+ predicate(!UseZfa);
73687384 match(Set dst (MinF src1 src2));
73697385 effect(KILL cr);
73707386
@@ -7379,8 +7395,23 @@ instruct minF_reg_reg(fRegF dst, fRegF src1, fRegF src2, rFlagsReg cr) %{
73797395 ins_pipe(pipe_class_default);
73807396%}
73817397
7398+ instruct minF_reg_reg_zfa(fRegF dst, fRegF src1, fRegF src2) %{
7399+ predicate(UseZfa);
7400+ match(Set dst (MinF src1 src2));
7401+
7402+ format %{ "minF $dst, $src1, $src2" %}
7403+
7404+ ins_encode %{
7405+ __ fminm_s(as_FloatRegister($dst$$reg),
7406+ as_FloatRegister($src1$$reg), as_FloatRegister($src2$$reg));
7407+ %}
7408+
7409+ ins_pipe(pipe_class_default);
7410+ %}
7411+
73827412// Math.max(DD)D
73837413instruct maxD_reg_reg(fRegD dst, fRegD src1, fRegD src2, rFlagsReg cr) %{
7414+ predicate(!UseZfa);
73847415 match(Set dst (MaxD src1 src2));
73857416 effect(KILL cr);
73867417
@@ -7395,8 +7426,23 @@ instruct maxD_reg_reg(fRegD dst, fRegD src1, fRegD src2, rFlagsReg cr) %{
73957426 ins_pipe(pipe_class_default);
73967427%}
73977428
7429+ instruct maxD_reg_reg_zfa(fRegD dst, fRegD src1, fRegD src2) %{
7430+ predicate(UseZfa);
7431+ match(Set dst (MaxD src1 src2));
7432+
7433+ format %{ "maxD $dst, $src1, $src2" %}
7434+
7435+ ins_encode %{
7436+ __ fmaxm_d(as_FloatRegister($dst$$reg),
7437+ as_FloatRegister($src1$$reg), as_FloatRegister($src2$$reg));
7438+ %}
7439+
7440+ ins_pipe(pipe_class_default);
7441+ %}
7442+
73987443// Math.min(DD)D
73997444instruct minD_reg_reg(fRegD dst, fRegD src1, fRegD src2, rFlagsReg cr) %{
7445+ predicate(!UseZfa);
74007446 match(Set dst (MinD src1 src2));
74017447 effect(KILL cr);
74027448
@@ -7411,6 +7457,20 @@ instruct minD_reg_reg(fRegD dst, fRegD src1, fRegD src2, rFlagsReg cr) %{
74117457 ins_pipe(pipe_class_default);
74127458%}
74137459
7460+ instruct minD_reg_reg_zfa(fRegD dst, fRegD src1, fRegD src2) %{
7461+ predicate(UseZfa);
7462+ match(Set dst (MinD src1 src2));
7463+
7464+ format %{ "minD $dst, $src1, $src2" %}
7465+
7466+ ins_encode %{
7467+ __ fminm_d(as_FloatRegister($dst$$reg),
7468+ as_FloatRegister($src1$$reg), as_FloatRegister($src2$$reg));
7469+ %}
7470+
7471+ ins_pipe(pipe_class_default);
7472+ %}
7473+
74147474// Float.isInfinite
74157475instruct isInfiniteF_reg_reg(iRegINoSp dst, fRegF src)
74167476%{
0 commit comments