#define arm_libc_ifunc_redirected(redirected_name, name, expr) \
__ifunc (redirected_name, name, expr(hwcap), int hwcap, INIT_ARCH)
+#define arm_libm_ifunc(name, expr) \
+ __ifunc (name, name, expr, int hwcap, libm_ifunc_init)
+
#if defined SHARED
# define arm_libc_ifunc_hidden_def(redirect_name, name) \
__hidden_ver1 (name, __GI_##name, redirect_name) \
--- /dev/null
+ifeq ($(subdir),math)
+libm-sysdep_routines += \
+ s_fma-generic \
+ s_fma-vpfv4 \
+ s_fmaf-generic \
+ s_fmaf-vpfv4 \
+# libm-sysdep_routinesA
+
+CFLAGS-s_fma-vpfv4.c = -mfpu=vfpv4
+CFLAGS-s_fmaf-vpfv4.c = -mfpu=vfpv4
+endif
--- /dev/null
+#include <libm-alias-double.h>
+#define __fma __fma_generic
+#undef libm_alias_double
+#define libm_alias_double(a, b)
+#include <sysdeps/ieee754/dbl-64/s_fma.c>
--- /dev/null
+#include <libm-alias-double.h>
+#define __fma __fma_vpfv4
+#undef libm_alias_double
+#define libm_alias_double(a, b)
+#include <sysdeps/ieee754/dbl-64/s_fma.c>
--- /dev/null
+#define NO_MATH_REDIRECT
+#include <arm-ifunc.h>
+#define dfmal __hide_dfmal
+#define f32xfmaf64 __hide_f32xfmaf64
+#include <math.h>
+#undef dfmal
+#undef f32xfmaf64
+#undef fma
+#include <libm-alias-double.h>
+#include <math-narrow-alias.h>
+
+extern __typeof (fma) __fma_vpfv4 attribute_hidden;
+extern __typeof (fma) __fma_generic attribute_hidden;
+
+arm_libm_ifunc (__fma, hwcap & HWCAP_ARM_VFPv4
+ ? __fma_vpfv4
+ : __fma_generic);
+libm_alias_double (__fma, fma)
+libm_alias_double_narrow (__fma, fma)
--- /dev/null
+#include <libm-alias-float.h>
+#define __fmaf __fmaf_generic
+#undef libm_alias_float
+#define libm_alias_float(a, b)
+#include <sysdeps/ieee754/dbl-64/s_fmaf.c>
--- /dev/null
+#include <libm-alias-float.h>
+#define __fmaf __fmaf_vpfv4
+#undef libm_alias_float
+#define libm_alias_float(a, b)
+#include <sysdeps/ieee754/dbl-64/s_fmaf.c>
--- /dev/null
+#define NO_MATH_REDIRECT
+#include <arm-ifunc.h>
+#include <math.h>
+#include <libm-alias-float.h>
+
+extern __typeof (fmaf) __fmaf_vpfv4 attribute_hidden;
+extern __typeof (fmaf) __fmaf_generic attribute_hidden;
+
+arm_libm_ifunc (__fmaf, hwcap & HWCAP_ARM_VFPv4
+ ? __fmaf_vpfv4
+ : __fmaf_generic)
+libm_alias_float (__fma, fma)
--- /dev/null
+arm/armv7/fpu/multiarch
--- /dev/null
+#if defined __ARM_FEATURE_FMA && __ARM_FP & 0x4
+# define USE_FMA_BUILTIN 1
+#endif
+#if defined __ARM_FEATURE_FMA && __ARM_FP & 0x2
+# define USE_FMAF_BUILTIN 1
+#else
+# define USE_FMA_BUILTIN 0
+# define USE_FMAF_BUILTIN 0
+#endif
+#define USE_FMAL_BUILTIN 0
+#define USE_FMAF128_BUILTIN 0
--- /dev/null
+arm/armv7/fpu/multiarch