powerpc: fma using builtins

This patch just refactor the assembly implementation to use compiler
builtins instead.

Checked on powerpc-linux-gnu (built without --with-cpu, with
--with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
and --disable-multi-arch).

	* sysdeps/powerpc/fpu/s_fma.S: Remove file.
	* sysdeps/powerpc/fpu/s_fmaf.S: Likewise.
	* sysdeps/powerpc/fpu/s_fma.c: New file.
	* sysdeps/powerpc/fpu/s_fmaf.c: Likewise.
This commit is contained in:
Adhemerval Zanella 2019-03-20 04:14:28 +00:00
parent 1dac8bd6f2
commit 3a16dd780e
3 changed files with 15 additions and 14 deletions

View File

@ -1,5 +1,10 @@
2019-04-17 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* sysdeps/powerpc/fpu/s_fma.S: Remove file.
* sysdeps/powerpc/fpu/s_fmaf.S: Likewise.
* sysdeps/powerpc/fpu/s_fma.c: New file.
* sysdeps/powerpc/fpu/s_fmaf.c: Likewise.
* sysdeps/powerpc/fpu/s_fabs.S: Remove file.
* sysdeps/powerpc/fpu/s_fabsf.S: Likewise.

View File

@ -1,5 +1,5 @@
/* Compute x * y + z as ternary operation. PowerPC version.
Copyright (C) 2010-2019 Free Software Foundation, Inc.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -19,10 +19,8 @@
#include <sysdep.h>
#include <libm-alias-double.h>
ENTRY_TOCLESS(__fma)
/* double [f1] fma (double [f1] x, double [f2] y, double [f3] z); */
fmadd fp1,fp1,fp2,fp3
blr
END(__fma)
double __fma (double x, double y, double z)
{
return __builtin_fma (x, y, z);
}
libm_alias_double (__fma, fma)

View File

@ -1,5 +1,5 @@
/* Compute x * y + z as ternary operation. PowerPC version.
Copyright (C) 2010-2019 Free Software Foundation, Inc.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -19,10 +19,8 @@
#include <sysdep.h>
#include <libm-alias-float.h>
ENTRY_TOCLESS(__fmaf)
/* float [f1] fmaf (float [f1] x, float [f2] y, float [f3] z); */
fmadds fp1,fp1,fp2,fp3
blr
END(__fmaf)
float __fmaf (float x, float y, float z)
{
return __builtin_fmaf (x, y, z);
}
libm_alias_float (__fma, fma)