]> sourceware.org Git - glibc.git/commitdiff
Optimized sparc assembler for signbit{,f,l} and some variants of isnan.
authorDavid S. Miller <davem@davemloft.net>
Fri, 2 Mar 2012 04:43:38 +0000 (20:43 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Mar 2012 04:43:38 +0000 (20:43 -0800)
* sysdeps/sparc/sparc32/fpu/s_signbit.S: New file.
* sysdeps/sparc/sparc32/fpu/s_signbitf.S: New file.
* sysdeps/sparc/sparc32/fpu/s_signbitl.S: New file.
* sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S: New file.
* sysdeps/sparc/sparc64/fpu/s_isnan.S: New file.
* sysdeps/sparc/sparc64/fpu/s_isnanf.S: New file.
* sysdeps/sparc/sparc64/fpu/s_signbit.S: New file.
* sysdeps/sparc/sparc64/fpu/s_signbitf.S: New file.
* sysdeps/sparc/sparc64/fpu/s_signbitl.S: New file.

ChangeLog
sysdeps/sparc/sparc32/fpu/s_signbit.S [new file with mode: 0644]
sysdeps/sparc/sparc32/fpu/s_signbitf.S [new file with mode: 0644]
sysdeps/sparc/sparc32/fpu/s_signbitl.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_isnan.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_isnanf.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_signbit.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_signbitf.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_signbitl.S [new file with mode: 0644]

index 12c739011f98ee52446617c3885cc0d7564eba1a..31412c38bf6f9f20eb2224c8dfa3d516c1485ac3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2012-03-01  David S. Miller  <davem@davemloft.net>
 
+       * sysdeps/sparc/sparc32/fpu/s_signbit.S: New file.
+       * sysdeps/sparc/sparc32/fpu/s_signbitf.S: New file.
+       * sysdeps/sparc/sparc32/fpu/s_signbitl.S: New file.
+       * sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_isnan.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_isnanf.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_signbit.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_signbitf.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_signbitl.S: New file.
+
        * sysdeps/sparc/fpu/libm-test-ulps: Update.
 
        * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Move...
diff --git a/sysdeps/sparc/sparc32/fpu/s_signbit.S b/sysdeps/sparc/sparc32/fpu/s_signbit.S
new file mode 100644 (file)
index 0000000..3756bf4
--- /dev/null
@@ -0,0 +1,32 @@
+/* signbit().  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 (__signbit)
+       retl
+        srl    %o0, 31, %o0
+END (__signbit)
+weak_alias (__signbit, signbit)
+
+/* On 32-bit the double version will also always work for
+   single-precision since in both cases the word with the
+   sign bit in it is passed always in register %o0.  */
+strong_alias (__signbit, __signbitf)
+hidden_def (__signbitf)
+weak_alias (__signbitf, signbitf)
diff --git a/sysdeps/sparc/sparc32/fpu/s_signbitf.S b/sysdeps/sparc/sparc32/fpu/s_signbitf.S
new file mode 100644 (file)
index 0000000..91886af
--- /dev/null
@@ -0,0 +1 @@
+/* signbitf is implemented in s_signbit.S */
\ No newline at end of file
diff --git a/sysdeps/sparc/sparc32/fpu/s_signbitl.S b/sysdeps/sparc/sparc32/fpu/s_signbitl.S
new file mode 100644 (file)
index 0000000..2feaee0
--- /dev/null
@@ -0,0 +1,32 @@
+/* signbitl().  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>
+#include <math_ldbl_opt.h>
+
+ENTRY (___signbitl)
+       ld      [%o0], %o1
+       retl
+        srl    %o1, 31, %o0
+END (___signbitl)
+
+#ifdef IS_IN_libm
+long_double_symbol (libm, ___signbitl, __signbitl);
+#else
+long_double_symbol (libc, ___signbitl, __signbitl);
+#endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S
new file mode 100644 (file)
index 0000000..3122528
--- /dev/null
@@ -0,0 +1,32 @@
+/* isnan().  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 (__isnan)
+       sethi   %hi(0x7ff00000), %g1
+       sllx    %o0, 33, %o0
+       sllx    %g1, 32, %g1
+       srlx    %o0, 1, %o0
+       or      %o0, %o1, %o0
+       sub     %g1, %o0, %o0
+       retl
+        srlx   %o0, 63, %o0
+END (__isnan)
+hidden_def (__isnan)
+weak_alias (__isnan, isnan)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isnan.S b/sysdeps/sparc/sparc64/fpu/s_isnan.S
new file mode 100644 (file)
index 0000000..00041ca
--- /dev/null
@@ -0,0 +1,33 @@
+/* isnan().  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 (__isnan)
+       std     %f0, [%sp + STACK_BIAS + 128]
+       sethi   %hi(0x7ff00000), %g1
+       ldx     [%sp + STACK_BIAS + 128], %o0
+       sllx    %g1, 32, %g1
+       sllx    %o0, 1, %o0
+       srlx    %o0, 1, %o0
+       sub     %g1, %o0, %o0
+       retl
+        srlx   %o0, 63, %o0
+END (__isnan)
+hidden_def (__isnan)
+weak_alias (__isnan, isnan)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isnanf.S b/sysdeps/sparc/sparc64/fpu/s_isnanf.S
new file mode 100644 (file)
index 0000000..f82c819
--- /dev/null
@@ -0,0 +1,32 @@
+/* isnanf().  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 (__isnanf)
+       st      %f1, [%sp + STACK_BIAS + 128]
+       sethi   %hi(0x7f800000), %g1
+       lduw    [%sp + STACK_BIAS + 128], %o0
+       sll     %o0, 1, %o0
+       srl     %o0, 1, %o0
+       sub     %g1, %o0, %o0
+       retl
+        srl    %o0, 31, %o0
+END (__isnanf)
+hidden_def (__isnanf)
+weak_alias (__isnanf, isnanf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_signbit.S b/sysdeps/sparc/sparc64/fpu/s_signbit.S
new file mode 100644 (file)
index 0000000..3c1ea00
--- /dev/null
@@ -0,0 +1,34 @@
+/* signbit().  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 (__signbit)
+       st      %f0, [%sp + STACK_BIAS + 128]
+       ld      [%sp + STACK_BIAS + 128], %o0
+       retl
+        srl    %o0, 31, %o0
+END (__signbit)
+weak_alias (__signbit, signbit)
+
+/* On 64-bit the double version will also always work for
+   long-double-precision since in both cases the word with the
+   sign bit in it is passed always in register %f0.  */
+strong_alias (__signbit, __signbitl)
+hidden_def (__signbitl)
+weak_alias (__signbitl, signbitl)
diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitf.S b/sysdeps/sparc/sparc64/fpu/s_signbitf.S
new file mode 100644 (file)
index 0000000..d2a7aa5
--- /dev/null
@@ -0,0 +1,27 @@
+/* signbitf().  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 (__signbitf)
+       st      %f1, [%sp + STACK_BIAS + 128]
+       ld      [%sp + STACK_BIAS + 128], %o0
+       retl
+        srl    %o0, 31, %o0
+END (__signbitf)
+weak_alias (__signbitf, signbitf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitl.S b/sysdeps/sparc/sparc64/fpu/s_signbitl.S
new file mode 100644 (file)
index 0000000..f5e5fb9
--- /dev/null
@@ -0,0 +1 @@
+/* signbitl is implemented in s_signbit.S */
This page took 0.077289 seconds and 5 git commands to generate.