1/* Test whether using target specific options, we can generate FMA4 code. */ 2/* { dg-do compile } */ 3/* { dg-options "-O2 -march=k8 -mfpmath=sse -msse2" } */ 4/* { dg-require-effective-target sse2 } */ 5 6extern void exit (int); 7 8#ifdef __FMA4__ 9#warning "__FMA4__ should not be defined before #pragma GCC target." 10#endif 11 12#pragma GCC push_options 13#pragma GCC target ("fma4") 14 15#ifndef __FMA4__ 16#warning "__FMA4__ should have be defined after #pragma GCC target." 17#endif 18 19float 20flt_mul_add (float a, float b, float c) 21{ 22 return (a * b) + c; 23} 24 25#pragma GCC pop_options 26#ifdef __FMA4__ 27#warning "__FMA4__ should not be defined after #pragma GCC pop target." 28#endif 29 30double 31dbl_mul_add (double a, double b, double c) 32{ 33 return (a * b) + c; 34} 35 36/* { dg-final { scan-assembler "vfmaddss" } } */ 37/* { dg-final { scan-assembler "addsd" } } */ 38