< prev index next >

src/cpu/x86/vm/x86_64.ad

Print this page

        

@@ -10949,10 +10949,34 @@
                         $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 >