powerpc: Add multiarch sqrtf128 for ppc64le

This patch creates ifunc for sqrtf128() to make use of new xssqrtqp
instruction for POWER9 when --enable-multi-arch and --with-cpu=power8
options are used on power9 system.  This is achieved by explicitly
adding -mcpu=power9 flag for sqrtf128-power9.
This commit is contained in:
Rajalakshmi Srinivasaraghavan 2018-05-30 21:31:27 +05:30
parent 0ce2fa6973
commit 2c93fce76a
5 changed files with 117 additions and 0 deletions

View File

@ -1,3 +1,13 @@
2018-05-30 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
* sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile: New file to
add w_sqrtf128-power9 and w_sqrtf128-ppc64le to libm-sysdep_routines.
* sysdeps/powerpc/powerpc64/le/fpu/multiarch/w_sqrtf128-power9.c:
New file.
* sysdeps/powerpc/powerpc64/le/fpu/multiarch/w_sqrtf128-ppc64le.c:
Likewise.
* sysdeps/powerpc/powerpc64/le/fpu/multiarch/w_sqrtf128.c: Likewise.
2018-05-29 Florian Weimer <fweimer@redhat.com>
* support/Makefile (libsupport-routines): Add

View File

@ -0,0 +1,6 @@
ifeq ($(subdir),math)
libm-sysdep_routines += w_sqrtf128-power9 w_sqrtf128-ppc64le
CFLAGS-w_sqrtf128-ppc64le.c += -mfloat128
CFLAGS-w_sqrtf128-power9.c += -mfloat128 -mcpu=power9
endif

View File

@ -0,0 +1,35 @@
/* POWER9 sqrt for _Float128
Copyright (C) 2018 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
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
In addition to the permissions in the GNU Lesser General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file into
combinations with other programs, and to distribute those
combinations without any restriction coming from the use of this
file. (The Lesser General Public License restrictions do apply in
other respects; for example, they cover modification of the file,
and distribution when not linked into a combine executable.)
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <math-type-macros-float128.h>
#define __sqrtf128 __sqrtf128_power9
#undef declare_mgen_alias
#define declare_mgen_alias(a, b)
#include <w_sqrt_template.c>

View File

@ -0,0 +1,35 @@
/* PPC64LE sqrt for _Float128
Copyright (C) 2018 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
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
In addition to the permissions in the GNU Lesser General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file into
combinations with other programs, and to distribute those
combinations without any restriction coming from the use of this
file. (The Lesser General Public License restrictions do apply in
other respects; for example, they cover modification of the file,
and distribution when not linked into a combine executable.)
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <math-type-macros-float128.h>
#define __sqrtf128 __sqrtf128_ppc64le
#undef declare_mgen_alias
#define declare_mgen_alias(a, b)
#include <w_sqrt_template.c>

View File

@ -0,0 +1,31 @@
/* Multiple versions of __sqrtf128.
Copyright (C) 2018 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
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define NO_MATH_REDIRECT
#include <math.h>
#include "init-arch.h"
#include <math-type-macros-float128.h>
extern __typeof (__sqrtf128) __sqrtf128_ppc64le attribute_hidden;
extern __typeof (__sqrtf128) __sqrtf128_power9 attribute_hidden;
libc_ifunc (__sqrtf128,
(hwcap2 & PPC_FEATURE2_ARCH_3_00)
? __sqrtf128_power9
: __sqrtf128_ppc64le);
declare_mgen_alias (__sqrt, sqrt)