< prev index next >
src/cpu/x86/vm/x86_64.ad
Print this page
*** 10949,10958 ****
--- 10949,10982 ----
$tmp4$$XMMRegister, $tmp5$$Register, $result$$Register);
%}
ins_pipe( pipe_slow );
%}
+ // fma - double - a * b + c
+ instruct fmaD_reg(regD a, regD b, regD c) %{
+ predicate(UseFMA);
+ match(Set c (FmaD c (Binary a b)));
+ format %{ "fmasd $a,$b,$c -> $c" %}
+ ins_cost(150);
+ ins_encode %{
+ __ vfmadd231sd($c$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister);
+ %}
+ ins_pipe( pipe_slow );
+ %}
+
+ // fma - float - a * b + c
+ instruct fmaF_reg(regF a, regF b, regF c) %{
+ predicate(UseFMA);
+ match(Set c (FmaF c (Binary a b)));
+ format %{ "fmass $a,$b,$c -> $c" %}
+ ins_cost(150);
+ ins_encode %{
+ __ vfmadd231ss($c$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister);
+ %}
+ ins_pipe( pipe_slow );
+ %}
+
//----------Overflow Math Instructions-----------------------------------------
instruct overflowAddI_rReg(rFlagsReg cr, rax_RegI op1, rRegI op2)
%{
match(Set cr (OverflowAddI op1 op2));
< prev index next >