Optimized 64-bit sparc assembler for finite{,f} and isinf{,f}.
authorDavid S. Miller <davem@davemloft.net>
Fri, 2 Mar 2012 06:14:35 +0000 (22:14 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Mar 2012 06:14:35 +0000 (22:14 -0800)
* sysdeps/sparc/sparc64/fpu/s_finite.S: New file.
* sysdeps/sparc/sparc64/fpu/s_finitef.S: New file.
* sysdeps/sparc/sparc64/fpu/s_isinf.S: New file.
* sysdeps/sparc/sparc64/fpu/s_isinff.S: New file.

ChangeLog
sysdeps/sparc/sparc64/fpu/s_finite.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_finitef.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_isinf.S [new file with mode: 0644]
sysdeps/sparc/sparc64/fpu/s_isinff.S [new file with mode: 0644]

index 31412c3..735ac66 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2012-03-01  David S. Miller  <davem@davemloft.net>
 
+       * sysdeps/sparc/sparc64/fpu/s_finite.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_finitef.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_isinf.S: New file.
+       * sysdeps/sparc/sparc64/fpu/s_isinff.S: New file.
+
        * 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.
diff --git a/sysdeps/sparc/sparc64/fpu/s_finite.S b/sysdeps/sparc/sparc64/fpu/s_finite.S
new file mode 100644 (file)
index 0000000..f93297e
--- /dev/null
@@ -0,0 +1,31 @@
+/* finite().  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 (__finite)
+       fabsd   %f0, %f0
+       st      %f0, [%sp + STACK_BIAS + 128]
+       sethi   %hi(0x7ff00000), %o2
+       ld      [%sp + STACK_BIAS + 128], %o0
+       sub     %o0, %o2, %o0
+       retl
+        srl    %o0, 31, %o0
+END (__finite)
+hidden_def (__finite)
+weak_alias (__finite, finite)
diff --git a/sysdeps/sparc/sparc64/fpu/s_finitef.S b/sysdeps/sparc/sparc64/fpu/s_finitef.S
new file mode 100644 (file)
index 0000000..2ebac99
--- /dev/null
@@ -0,0 +1,31 @@
+/* finitef().  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 (__finitef)
+       fabss   %f1, %f0
+       st      %f0, [%sp + STACK_BIAS + 128]
+       sethi   %hi(0x7f800000), %o2
+       ld      [%sp + STACK_BIAS + 128], %o0
+       sub     %o0, %o2, %o0
+       retl
+        srl    %o0, 31, %o0
+END (__finitef)
+hidden_def (__finitef)
+weak_alias (__finitef, finitef)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isinf.S b/sysdeps/sparc/sparc64/fpu/s_isinf.S
new file mode 100644 (file)
index 0000000..20b54c0
--- /dev/null
@@ -0,0 +1,34 @@
+/* isinf().  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 (__isinf)
+       std     %f0, [%sp + STACK_BIAS + 128]
+       sethi   %hi(0x7ff00000), %o2
+       ldx     [%sp + STACK_BIAS + 128], %g1
+       sllx    %o2, 32, %o2
+       sllx    %g1, 1, %o4
+       srlx    %o4, 1, %o5
+       srax    %g1, 62, %o0
+       xor     %o5, %o2, %o3
+       retl
+        movrne %o3, %g0, %o0
+END (__isinf)
+hidden_def (__isinf)
+weak_alias (__isinf, isinf)
diff --git a/sysdeps/sparc/sparc64/fpu/s_isinff.S b/sysdeps/sparc/sparc64/fpu/s_isinff.S
new file mode 100644 (file)
index 0000000..302ff8d
--- /dev/null
@@ -0,0 +1,33 @@
+/* isinff().  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 (__isinff)
+       st      %f1, [%sp + STACK_BIAS + 128]
+       sethi   %hi(0x7f800000), %o2
+       lduw    [%sp + STACK_BIAS + 128], %g1
+       sll     %g1, 1, %o4
+       srl     %o4, 1, %o5
+       sra     %g1, 30, %o0
+       xor     %o5, %o2, %o3
+       retl
+        movrne %o3, %g0, %o0
+END (__isinff)
+hidden_def (__isinff)
+weak_alias (__isinff, isinff)