]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Inline __ieee754_sqrt and __ieee754_sqrtf. Also add external definitions.
authorWilco Dijkstra <wdijkstr@arm.com>
Mon, 6 Jul 2015 11:43:31 +0000 (12:43 +0100)
committerWilco Dijkstra <wdijkstr@arm.com>
Mon, 6 Jul 2015 11:52:55 +0000 (12:52 +0100)
ChangeLog
sysdeps/aarch64/fpu/e_sqrt.c [new file with mode: 0644]
sysdeps/aarch64/fpu/e_sqrtf.c [new file with mode: 0644]
sysdeps/aarch64/fpu/math_private.h

index f057e9d8689643abb062855092c0825bfbd6eb4e..0f5d45e55b7ff1b8bf2c00a3cfa7709354e296e9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2015-07-06  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       * sysdeps/aarch64/fpu/math_private.h (__ieee754_sqrt):
+       New function.  (__ieee754_sqrtf): New function.
+       * sysdeps/aarch64/fpu/e_sqrt.c (__ieee754_sqrt):
+       New function.
+       * sysdeps/aarch64/fpu/e_sqrtf.c (__ieee754_sqrtf):
+       New function.
+
 2015-07-06  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * sysdeps/ieee754/support.c: Remove unused file.
diff --git a/sysdeps/aarch64/fpu/e_sqrt.c b/sysdeps/aarch64/fpu/e_sqrt.c
new file mode 100644 (file)
index 0000000..4f11ca2
--- /dev/null
@@ -0,0 +1,28 @@
+/* Square root of floating point number.
+   Copyright (C) 2015 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/>.  */
+
+#include <math_private.h>
+
+double
+__ieee754_sqrt (double d)
+{
+  double res;
+  asm ("fsqrt   %d0, %d1" : "=w" (res) : "w" (d));
+  return res;
+}
+strong_alias (__ieee754_sqrt, __sqrt_finite)
diff --git a/sysdeps/aarch64/fpu/e_sqrtf.c b/sysdeps/aarch64/fpu/e_sqrtf.c
new file mode 100644 (file)
index 0000000..a2e99e1
--- /dev/null
@@ -0,0 +1,28 @@
+/* Single-precision floating point square root.
+   Copyright (C) 2015 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/>.  */
+
+#include <math_private.h>
+
+float
+__ieee754_sqrtf (float s)
+{
+  float res;
+  asm ("fsqrt   %s0, %s1" : "=w" (res) : "w" (s));
+  return res;
+}
+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
index 52a6ad98f35b160d44c25c5548ac3a0e749431f4..b3c2509961c35a02c15e78ddbf287e46fa7cbabf 100644 (file)
 #include <fenv.h>
 #include <fpu_control.h>
 
+extern __always_inline double
+__ieee754_sqrt (double d)
+{
+  double res;
+  asm __volatile__ ("fsqrt   %d0, %d1" : "=w" (res) : "w" (d));
+  return res;
+}
+
+extern __always_inline float
+__ieee754_sqrtf (float s)
+{
+  float res;
+  asm __volatile__ ("fsqrt   %s0, %s1" : "=w" (res) : "w" (s));
+  return res;
+}
+
 static __always_inline void
 libc_feholdexcept_aarch64 (fenv_t *envp)
 {