diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 74d6f75c58d..41868078a8e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2009-12-05 Sebastian Pop + + * config/i386/i386.c (TARGET_DEFAULT_TARGET_FLAGS): Add + MASK_FUSED_MADD. + * config/i386/i386.h (CC1_CPU_SPEC_1): Remove + "'-mfused-madd' was removed". + * config/i386/i386.opt (mfused-madd): New. + * config/i386/sse.md: Add TARGET_FUSED_MADD to FMA4 insns. + * doc/invoke.texi (-mfused-madd, -mno-fused-madd): Document. + 2009-12-05 John David Anglin * pa64-hpux.h (LIB_SPEC): Handle -rdynamic. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index ade3a7d6d32..6cd9d7dc740 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -30307,7 +30307,8 @@ ix86_enum_va_list (int idx, const char **pname, tree *ptree) #define TARGET_DEFAULT_TARGET_FLAGS \ (TARGET_DEFAULT \ | TARGET_SUBTARGET_DEFAULT \ - | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT) + | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT \ + | MASK_FUSED_MADD) #undef TARGET_HANDLE_OPTION #define TARGET_HANDLE_OPTION ix86_handle_option diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index eb1c86fa2a8..860d234efbd 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -546,8 +546,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \ %{msse5:-mavx \ %n'-msse5' was removed.\n} \ -%{mfused-madd:-mavx \ -%n'-mfused-madd' was removed.\n} \ %{mno-intel-syntax:-masm=att \ %n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.\n}" diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt index dd47b7d1dc5..0afdd1197f6 100644 --- a/gcc/config/i386/i386.opt +++ b/gcc/config/i386/i386.opt @@ -244,6 +244,12 @@ mcld Target Report Mask(CLD) Save Generate cld instruction in the function prologue. +mfused-madd +Target Report Mask(FUSED_MADD) Save +Enable automatic generation of fused floating point multiply-add instructions +if the ISA supports such instructions. The -mfused-madd option is on by +default. + ;; ISA support m32 diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 78e4b6af1d8..9524d4f7957 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -1709,7 +1709,8 @@ (match_operand:FMA4MODEF4 1 "register_operand" "%x,x") (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:FMA4MODEF4 3 "nonimmediate_operand" "xm,x")))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1741,7 +1742,8 @@ (match_operand:FMA4MODEF4 1 "register_operand" "%x,x") (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:FMA4MODEF4 3 "nonimmediate_operand" "xm,x")))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1775,7 +1777,8 @@ (mult:FMA4MODEF4 (match_operand:FMA4MODEF4 1 "register_operand" "%x,x") (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m"))))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1809,7 +1812,8 @@ (match_operand:FMA4MODEF4 1 "register_operand" "%x,x")) (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:FMA4MODEF4 3 "nonimmediate_operand" "xm,x")))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1843,7 +1847,8 @@ (match_operand:SSEMODEF4 1 "register_operand" "%x,x") (match_operand:SSEMODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:SSEMODEF4 3 "nonimmediate_operand" "xm,x")))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1879,7 +1884,8 @@ (match_operand:SSEMODEF2P 3 "nonimmediate_operand" "xm,x")) (match_dup 0) (const_int 1)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1893,7 +1899,8 @@ (match_operand:SSEMODEF4 1 "register_operand" "%x,x") (match_operand:SSEMODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:SSEMODEF4 3 "nonimmediate_operand" "xm,x")))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1929,7 +1936,8 @@ (match_operand:SSEMODEF2P 3 "nonimmediate_operand" "xm,x")) (match_dup 0) (const_int 1)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1945,7 +1953,8 @@ (mult:SSEMODEF4 (match_operand:SSEMODEF4 1 "register_operand" "%x,x") (match_operand:SSEMODEF4 2 "nonimmediate_operand" "x,m"))))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1981,7 +1990,8 @@ (match_operand:SSEMODEF2P 2 "nonimmediate_operand" "x,m"))) (match_dup 0) (const_int 1)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -1997,7 +2007,8 @@ (match_operand:SSEMODEF4 1 "register_operand" "%x,x")) (match_operand:SSEMODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:SSEMODEF4 3 "nonimmediate_operand" "xm,x")))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2037,7 +2048,8 @@ (match_operand:SSEMODEF2P 3 "nonimmediate_operand" "xm,x")) (match_dup 0) (const_int 1)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2053,7 +2065,8 @@ (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:FMA4MODEF4 3 "nonimmediate_operand" "xm,x"))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2067,7 +2080,8 @@ (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:FMA4MODEF4 3 "nonimmediate_operand" "xm,x"))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2081,7 +2095,8 @@ (match_operand:FMA4MODEF4 1 "register_operand" "%x,x") (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m")))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2096,7 +2111,8 @@ (match_operand:FMA4MODEF4 2 "nonimmediate_operand" "x,m")) (match_operand:FMA4MODEF4 3 "nonimmediate_operand" "xm,x"))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2111,7 +2127,8 @@ (match_operand:SSEMODEF2P 2 "nonimmediate_operand" "x,m")) (match_operand:SSEMODEF2P 3 "nonimmediate_operand" "xm,x"))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2125,7 +2142,8 @@ (match_operand:SSEMODEF2P 2 "nonimmediate_operand" "x,m")) (match_operand:SSEMODEF2P 3 "nonimmediate_operand" "xm,x"))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2139,7 +2157,8 @@ (match_operand:SSEMODEF2P 1 "register_operand" "%x,x") (match_operand:SSEMODEF2P 2 "nonimmediate_operand" "x,m")))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2154,7 +2173,8 @@ (match_operand:SSEMODEF2P 2 "nonimmediate_operand" "x,m")) (match_operand:SSEMODEF2P 3 "nonimmediate_operand" "xm,x"))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2173,7 +2193,8 @@ (match_dup 0) (const_int 1))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2190,7 +2211,8 @@ (match_dup 0) (const_int 1))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2207,7 +2229,8 @@ (match_dup 0) (const_int 1))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmadd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2225,7 +2248,8 @@ (match_dup 0) (const_int 1))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfnmsub\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "")]) @@ -2250,7 +2274,8 @@ (match_dup 2)) (match_dup 3)) (const_int 170)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V8SF")]) @@ -2269,7 +2294,8 @@ (match_dup 2)) (match_dup 3)) (const_int 10)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4DF")]) @@ -2288,7 +2314,8 @@ (match_dup 2)) (match_dup 3)) (const_int 10)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4SF")]) @@ -2307,7 +2334,8 @@ (match_dup 2)) (match_dup 3)) (const_int 2)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V2DF")]) @@ -2326,7 +2354,8 @@ (match_dup 2)) (match_dup 3)) (const_int 85)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V8SF")]) @@ -2345,7 +2374,8 @@ (match_dup 2)) (match_dup 3)) (const_int 5)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4DF")]) @@ -2364,7 +2394,8 @@ (match_dup 2)) (match_dup 3)) (const_int 5)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4SF")]) @@ -2383,7 +2414,8 @@ (match_dup 2)) (match_dup 3)) (const_int 1)))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V2DF")]) @@ -2406,7 +2438,8 @@ (match_dup 3)) (const_int 170))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V8SF")]) @@ -2427,7 +2460,8 @@ (match_dup 3)) (const_int 10))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4DF")]) @@ -2448,7 +2482,8 @@ (match_dup 3)) (const_int 10))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4SF")]) @@ -2469,7 +2504,8 @@ (match_dup 3)) (const_int 2))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmaddsubpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V2DF")]) @@ -2490,7 +2526,8 @@ (match_dup 3)) (const_int 85))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V8SF")]) @@ -2511,7 +2548,8 @@ (match_dup 3)) (const_int 5))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4DF")]) @@ -2532,7 +2570,8 @@ (match_dup 3)) (const_int 5))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddps\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V4SF")]) @@ -2553,7 +2592,8 @@ (match_dup 3)) (const_int 1))] UNSPEC_FMA4_INTRINSIC))] - "TARGET_FMA4 && !(MEM_P (operands[2]) && MEM_P (operands[3]))" + "TARGET_FMA4 && TARGET_FUSED_MADD + && !(MEM_P (operands[2]) && MEM_P (operands[3]))" "vfmsubaddpd\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssemuladd") (set_attr "mode" "V2DF")]) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a1df2263406..22fad8fe88c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -593,7 +593,7 @@ Objective-C and Objective-C++ Dialects}. -mincoming-stack-boundary=@var{num} -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip @gol -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol --maes -mpclmul @gol +-maes -mpclmul -mfused-madd @gol -msse4a -m3dnow -mpopcnt -mabm -mfma4 -mxop -mlwp @gol -mthreads -mno-align-stringops -minline-all-stringops @gol -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol @@ -12062,6 +12062,13 @@ supported architecture, using the appropriate flags. In particular, the file containing the CPU detection code should be compiled without these options. +@item -mfused-madd +@itemx -mno-fused-madd +@opindex mfused-madd +@opindex mno-fused-madd +Do (don't) generate code that uses the fused multiply/add or multiply/subtract +instructions. The default is to use these instructions. + @item -mcld @opindex mcld This option instructs GCC to emit a @code{cld} instruction in the prologue @@ -12397,7 +12404,7 @@ Do not generate inline code for sqrt. @opindex mfused-madd @opindex mno-fused-madd Do (don't) generate code that uses the fused multiply/add or multiply/subtract -instructions. The default is to use these instructions. +instructions. The default is to use these instructions. @item -mno-dwarf2-asm @itemx -mdwarf2-asm