12584
12585 // src1 * src2 - src3
12586 instruct mnsubD_reg_reg(vRegD dst, vRegD src1, vRegD src2, vRegD src3, immD0 zero) %{
12587 predicate(UseFMA);
12588 match(Set dst (FmaD (NegD src3) (Binary src1 src2)));
12589
12590 format %{ "fnmsubd $dst, $src1, $src2, $src3" %}
12591
12592 ins_encode %{
12593 // n.b. insn name should be fnmsubd
12594 __ fnmsub(as_FloatRegister($dst$$reg),
12595 as_FloatRegister($src1$$reg),
12596 as_FloatRegister($src2$$reg),
12597 as_FloatRegister($src3$$reg));
12598 %}
12599
12600 ins_pipe(pipe_class_default);
12601 %}
12602
12603
12604 instruct divF_reg_reg(vRegF dst, vRegF src1, vRegF src2) %{
12605 match(Set dst (DivF src1 src2));
12606
12607 ins_cost(INSN_COST * 18);
12608 format %{ "fdivs $dst, $src1, $src2" %}
12609
12610 ins_encode %{
12611 __ fdivs(as_FloatRegister($dst$$reg),
12612 as_FloatRegister($src1$$reg),
12613 as_FloatRegister($src2$$reg));
12614 %}
12615
12616 ins_pipe(fp_div_s);
12617 %}
12618
12619 instruct divD_reg_reg(vRegD dst, vRegD src1, vRegD src2) %{
12620 match(Set dst (DivD src1 src2));
12621
12622 ins_cost(INSN_COST * 32);
12623 format %{ "fdivd $dst, $src1, $src2" %}
|
12584
12585 // src1 * src2 - src3
12586 instruct mnsubD_reg_reg(vRegD dst, vRegD src1, vRegD src2, vRegD src3, immD0 zero) %{
12587 predicate(UseFMA);
12588 match(Set dst (FmaD (NegD src3) (Binary src1 src2)));
12589
12590 format %{ "fnmsubd $dst, $src1, $src2, $src3" %}
12591
12592 ins_encode %{
12593 // n.b. insn name should be fnmsubd
12594 __ fnmsub(as_FloatRegister($dst$$reg),
12595 as_FloatRegister($src1$$reg),
12596 as_FloatRegister($src2$$reg),
12597 as_FloatRegister($src3$$reg));
12598 %}
12599
12600 ins_pipe(pipe_class_default);
12601 %}
12602
12603
12604 // Math.max(FF)F
12605 instruct maxF_reg_reg(vRegF dst, vRegF src1, vRegF src2) %{
12606 match(Set dst (MaxF src1 src2));
12607
12608 format %{ "fmaxs $dst, $src1, $src2" %}
12609 ins_encode %{
12610 __ fmaxs(as_FloatRegister($dst$$reg),
12611 as_FloatRegister($src1$$reg),
12612 as_FloatRegister($src2$$reg));
12613 %}
12614
12615 ins_pipe(fp_dop_reg_reg_s);
12616 %}
12617
12618 // Math.min(FF)F
12619 instruct minF_reg_reg(vRegF dst, vRegF src1, vRegF src2) %{
12620 match(Set dst (MinF src1 src2));
12621
12622 format %{ "fmins $dst, $src1, $src2" %}
12623 ins_encode %{
12624 __ fmins(as_FloatRegister($dst$$reg),
12625 as_FloatRegister($src1$$reg),
12626 as_FloatRegister($src2$$reg));
12627 %}
12628
12629 ins_pipe(fp_dop_reg_reg_s);
12630 %}
12631
12632 // Math.max(DD)D
12633 instruct maxD_reg_reg(vRegD dst, vRegD src1, vRegD src2) %{
12634 match(Set dst (MaxD src1 src2));
12635
12636 format %{ "fmaxd $dst, $src1, $src2" %}
12637 ins_encode %{
12638 __ fmaxd(as_FloatRegister($dst$$reg),
12639 as_FloatRegister($src1$$reg),
12640 as_FloatRegister($src2$$reg));
12641 %}
12642
12643 ins_pipe(fp_dop_reg_reg_d);
12644 %}
12645
12646 // Math.min(DD)D
12647 instruct minD_reg_reg(vRegD dst, vRegD src1, vRegD src2) %{
12648 match(Set dst (MinD src1 src2));
12649
12650 format %{ "fmind $dst, $src1, $src2" %}
12651 ins_encode %{
12652 __ fmind(as_FloatRegister($dst$$reg),
12653 as_FloatRegister($src1$$reg),
12654 as_FloatRegister($src2$$reg));
12655 %}
12656
12657 ins_pipe(fp_dop_reg_reg_d);
12658 %}
12659
12660
12661 instruct divF_reg_reg(vRegF dst, vRegF src1, vRegF src2) %{
12662 match(Set dst (DivF src1 src2));
12663
12664 ins_cost(INSN_COST * 18);
12665 format %{ "fdivs $dst, $src1, $src2" %}
12666
12667 ins_encode %{
12668 __ fdivs(as_FloatRegister($dst$$reg),
12669 as_FloatRegister($src1$$reg),
12670 as_FloatRegister($src2$$reg));
12671 %}
12672
12673 ins_pipe(fp_div_s);
12674 %}
12675
12676 instruct divD_reg_reg(vRegD dst, vRegD src1, vRegD src2) %{
12677 match(Set dst (DivD src1 src2));
12678
12679 ins_cost(INSN_COST * 32);
12680 format %{ "fdivd $dst, $src1, $src2" %}
|