Add sparc optimized sqrt{,f}.
authorDavid S. Miller <davem@davemloft.net>
Wed, 29 Feb 2012 06:37:58 +0000 (22:37 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Feb 2012 06:37:58 +0000 (22:37 -0800)
* sysdeps/sparc/sparc32/fpu/w_sqrt.S: New file.
* sysdeps/sparc/sparc32/fpu/w_sqrtf.S: New file.
* sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S: New file.
* sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S: New file.
* sysdeps/sparc/sparc64/fpu/w_sqrt.S: New file.
* sysdeps/sparc/sparc64/fpu/w_sqrtf.S: New file.

ChangeLog
sysdeps/sparc/sparc32/fpu/w_sqrt.S [new file with mode: 0644]
sysdeps/sparc/sparc32/fpu/w_sqrtf.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/w_sqrt.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/w_sqrtf.S [new file with mode: 0644]

index c665b94..6bc32be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-02-28  David S. Miller  <davem@davemloft.net>
+
+       * sysdeps/sparc/sparc32/fpu/w_sqrt.S: New file.
+       * sysdeps/sparc/sparc32/fpu/w_sqrtf.S: New file.
+       * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S: New file.
+       * sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S: New file.
+       * sysdeps/sparc/sparc64/fpu/w_sqrt.S: New file.
+       * sysdeps/sparc/sparc64/fpu/w_sqrtf.S: New file.
+
 2012-02-29  Joseph Myers  <joseph@codesourcery.com>
 
        * math/libm-test.inc (llround_test): Move one test from
diff --git a/sysdeps/sparc/sparc32/fpu/w_sqrt.S b/sysdeps/sparc/sparc32/fpu/w_sqrt.S
new file mode 100644 (file)
index 0000000..e02fadf
--- /dev/null
@@ -0,0 +1,59 @@
+/* sqrt function.  sparc32 version.
+   Copyright (C) 2012 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 <sysdep.h>
+
+ENTRY (__sqrt)
+       clr     %g1
+       std     %g0, [%sp + 72]
+       std     %o0, [%sp + 80]
+       ldd     [%sp + 72], %f8
+       ldd     [%sp + 80], %f0
+       fcmpd   %f0, %f8
+       fbl     1f
+        nop
+8:     retl
+        fsqrtd %f0, %f0
+1:
+#ifdef SHARED
+       SETUP_PIC_REG_LEAF(o5, g1)
+#ifdef HAVE_BINUTILS_GOTDATA
+       sethi   %gdop_hix22(_LIB_VERSION), %g1
+       xor     %g1, %gdop_lox10(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1
+#endif
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+#endif
+       ld      [%g1], %g1
+       cmp     %g1, -1
+       be      8b
+        mov    %o0, %o2
+       mov     %o1, %o3
+       mov     26, %o4
+       mov     %o7, %g1
+       call    __kernel_standard
+        mov    %g1, %o7
+END (__sqrt)
+
+weak_alias (__sqrt, sqrt)
diff --git a/sysdeps/sparc/sparc32/fpu/w_sqrtf.S b/sysdeps/sparc/sparc32/fpu/w_sqrtf.S
new file mode 100644 (file)
index 0000000..cf4c800
--- /dev/null
@@ -0,0 +1,57 @@
+/* sqrtf function.  sparc32 version.
+   Copyright (C) 2012 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 <sysdep.h>
+
+ENTRY (__sqrtf)
+       st      %g0, [%sp + 68]
+       st      %o0, [%sp + 72]
+       ld      [%sp + 68], %f8
+       ld      [%sp + 72], %f0
+       fcmps   %f0, %f8
+       fbl     1f
+        nop
+8:     retl
+        fsqrts %f0, %f0
+1:
+#ifdef SHARED
+       SETUP_PIC_REG_LEAF(o5, g1)
+#ifdef HAVE_BINUTILS_GOTDATA
+       sethi   %gdop_hix22(_LIB_VERSION), %g1
+       xor     %g1, %gdop_lox10(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1
+#endif
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+#endif
+       ld      [%g1], %g1
+       cmp     %g1, -1
+       be      8b
+        mov    %o0, %o1
+       mov     126, %o2
+       mov     %o7, %g1
+       call    __kernel_standard_f
+        mov    %g1, %o7
+END (__sqrtf)
+
+weak_alias (__sqrtf, sqrtf)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt.S
new file mode 100644 (file)
index 0000000..c084aa8
--- /dev/null
@@ -0,0 +1,57 @@
+/* sqrt function.  sparc32 v9 version.
+   Copyright (C) 2012 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 <sysdep.h>
+
+ENTRY (__sqrt)
+       std     %o0, [%sp + 80]
+       fzero   %f8
+       ldd     [%sp + 80], %f0
+       fcmpd   %f0, %f8
+       fbl     1f
+        nop
+8:     retl
+        fsqrtd %f0, %f0
+1:
+#ifdef SHARED
+       SETUP_PIC_REG_LEAF(o5, g1)
+#ifdef HAVE_BINUTILS_GOTDATA
+       sethi   %gdop_hix22(_LIB_VERSION), %g1
+       xor     %g1, %gdop_lox10(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1
+#endif
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+#endif
+       ld      [%g1], %g1
+       cmp     %g1, -1
+       be      8b
+        mov    %o0, %o2
+       mov     %o1, %o3
+       mov     26, %o4
+       mov     %o7, %g1
+       call    __kernel_standard
+        mov    %g1, %o7
+END (__sqrt)
+
+weak_alias (__sqrt, sqrt)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf.S
new file mode 100644 (file)
index 0000000..3de7f39
--- /dev/null
@@ -0,0 +1,56 @@
+/* sqrtf function.  sparc32 v9 version.
+   Copyright (C) 2012 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 <sysdep.h>
+
+ENTRY (__sqrtf)
+       st      %o0, [%sp + 72]
+       fzeros  %f8
+       ld      [%sp + 72], %f0
+       fcmps   %f0, %f8
+       fbl     1f
+        nop
+8:     retl
+        fsqrts %f0, %f0
+1:
+#ifdef SHARED
+       SETUP_PIC_REG_LEAF(o5, g1)
+#ifdef HAVE_BINUTILS_GOTDATA
+       sethi   %gdop_hix22(_LIB_VERSION), %g1
+       xor     %g1, %gdop_lox10(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+       ld      [%o5 + %g1], %g1
+#endif
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+#endif
+       ld      [%g1], %g1
+       cmp     %g1, -1
+       be      8b
+        mov    %o0, %o1
+       mov     126, %o2
+       mov     %o7, %g1
+       call    __kernel_standard_f
+        mov    %g1, %o7
+END (__sqrtf)
+
+weak_alias (__sqrtf, sqrtf)
diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrt.S b/sysdeps/sparc/sparc64/fpu/w_sqrt.S
new file mode 100644 (file)
index 0000000..11241a3
--- /dev/null
@@ -0,0 +1,54 @@
+/* sqrt function.  sparc64 version.
+   Copyright (C) 2012 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 <sysdep.h>
+
+ENTRY (__sqrt)
+       fzero   %f8
+       fcmpd   %fcc2, %f0, %f8
+       fbl,pn  %fcc2, 1f
+        nop
+8:     retl
+        fsqrtd %f0, %f0
+1:
+#ifdef SHARED
+       SETUP_PIC_REG_LEAF(o5, g1)
+#ifdef HAVE_BINUTILS_GOTDATA
+       sethi   %gdop_hix22(_LIB_VERSION), %g1
+       xor     %g1, %gdop_lox10(_LIB_VERSION), %g1
+       ldx     [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+       ldx     [%o5 + %g1], %g1
+#endif
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+#endif
+       ld      [%g1], %g1
+       cmp     %g1, -1
+       be,pt   %icc, 8b
+        fmovd  %f0, %f2
+       mov     26, %o2
+       mov     %o7, %g1
+       call    __kernel_standard
+        mov    %g1, %o7
+END (__sqrt)
+
+weak_alias (__sqrt, sqrt)
diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrtf.S b/sysdeps/sparc/sparc64/fpu/w_sqrtf.S
new file mode 100644 (file)
index 0000000..9a5d556
--- /dev/null
@@ -0,0 +1,54 @@
+/* sqrtf function.  sparc64 version.
+   Copyright (C) 2012 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 <sysdep.h>
+
+ENTRY (__sqrtf)
+       fzeros  %f8
+       fcmps   %fcc2, %f1, %f8
+       fbl,pn  %fcc2, 1f
+        nop
+8:     retl
+        fsqrts %f1, %f0
+1:
+#ifdef SHARED
+       SETUP_PIC_REG_LEAF(o5, g1)
+#ifdef HAVE_BINUTILS_GOTDATA
+       sethi   %gdop_hix22(_LIB_VERSION), %g1
+       xor     %g1, %gdop_lox10(_LIB_VERSION), %g1
+       ldx     [%o5 + %g1], %g1, %gdop(_LIB_VERSION)
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+       ldx     [%o5 + %g1], %g1
+#endif
+#else
+       sethi   %hi(_LIB_VERSION), %g1
+       or      %g1, %lo(_LIB_VERSION), %g1
+#endif
+       ld      [%g1], %g1
+       cmp     %g1, -1
+       be,pt   %icc, 8b
+        fmovs  %f1, %f3
+       mov     126, %o2
+       mov     %o7, %g1
+       call    __kernel_standard_f
+        mov    %g1, %o7
+END (__sqrtf)
+
+weak_alias (__sqrtf, sqrtf)