This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-124-g1aa6176


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  1aa6176780752567fa85a22d25185f78d0419c76 (commit)
      from  c42d5e9862d9e62d2864d11f628b1e8b5be13ac2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=1aa6176780752567fa85a22d25185f78d0419c76

commit 1aa6176780752567fa85a22d25185f78d0419c76
Author: David S. Miller <davem@davemloft.net>
Date:   Tue Jan 15 23:59:02 2013 -0800

    Optimize trunc{,f} on sparc.
    
    	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile: Add vis3
    	trunc{,f} to libm-sysdep_routes.
    	* sysdeps/sparc/sparc64/fpu/multiarch/Makefile: Likewise.
    	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc-vis3.S: New
    	file.
    	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc.S: New file.
    	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf-vis3.S: New
    	file.
    	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf.S: New
    	file.
    	* sysdeps/sparc/sparc32/sparcv9/fpu/s_trunc.S: New file.
    	* sysdeps/sparc/sparc32/sparcv9/fpu/s_truncf.S: New file.
    	* sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.S: New file.
    	* sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.S: New file.
    	* sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.S: New file.
    	* sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.S: New file.
    	* sysdeps/sparc/sparc64/fpu/s_trunc.S: New file.
    	* sysdeps/sparc/sparc64/fpu/s_truncf.S: New file.

diff --git a/ChangeLog b/ChangeLog
index a8d4b58..5a74ea3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,25 @@
 2013-01-15  David S. Miller  <davem@davemloft.net>
 
 	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile: Add vis3
+	trunc{,f} to libm-sysdep_routes.
+	* sysdeps/sparc/sparc64/fpu/multiarch/Makefile: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc-vis3.S: New
+	file.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc.S: New file.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf-vis3.S: New
+	file.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf.S: New
+	file.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/s_trunc.S: New file.
+	* sysdeps/sparc/sparc32/sparcv9/fpu/s_truncf.S: New file.
+	* sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.S: New file.
+	* sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.S: New file.
+	* sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.S: New file.
+	* sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.S: New file.
+	* sysdeps/sparc/sparc64/fpu/s_trunc.S: New file.
+	* sysdeps/sparc/sparc64/fpu/s_truncf.S: New file.
+
+	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile: Add vis3
 	nearbyint{,f} to libm-sysdep_routes.
 	* sysdeps/sparc/sparc64/fpu/multiarch/Makefile: Likewise.
 	* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint-vis3.S:
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
index aecd93b..0d92813 100644
--- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
@@ -8,7 +8,8 @@ libm-sysdep_routines += m_copysignf-vis3 m_copysign-vis3 s_ceilf-vis3 \
 			s_rintf-vis3 s_rint-vis3 w_sqrt-vis3 w_sqrtf-vis3 \
 			s_fminf-vis3 s_fmin-vis3 s_fmaxf-vis3 s_fmax-vis3 \
 			s_fmaf-vis3 s_fma-vis3 s_fdimf-vis3 s_fdim-vis3 \
-			s_nearbyint-vis3 s_nearbyintf-vis3
+			s_nearbyint-vis3 s_nearbyintf-vis3 s_truncf-vis3 \
+			s_trunc-vis3
 sysdep_routines += s_copysignf-vis3 s_copysign-vis3
 endif
 endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc-vis3.S
new file mode 100644
index 0000000..72ec282
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc-vis3.S
@@ -0,0 +1,57 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc32 v9 vis3 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_FIFTYTWO	0x43300000		/* 2**52 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__trunc_vis3)
+	sethi	%hi(TWO_FIFTYTWO), %o2
+	sllx	%o0, 32, %o0
+	or	%o0, %o1, %o0
+	fzero	ZERO
+	movxtod	%o0, %f0
+	sllx	%o2, 32, %o2
+	fnegd	ZERO, SIGN_BIT
+	movxtod	%o2, %f16
+	fabsd	%f0, %f14
+	fcmpd	%fcc3, %f14, %f16
+	fmovduge %fcc3, ZERO, %f14
+	fand	%f0, SIGN_BIT, SIGN_BIT
+	fdtox	%f14, %f14
+	fxtod	%f14, %f14
+	faddd	%f0, ZERO, %f18
+	fmovduge %fcc3, %f18, %f14
+	retl
+	 for	%f14, SIGN_BIT, %f0
+END (__trunc_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc.S
new file mode 100644
index 0000000..3787fa1
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc.S
@@ -0,0 +1,19 @@
+#include <sparc-ifunc.h>
+#include <math_ldbl_opt.h>
+
+SPARC_ASM_VIS3_IFUNC(trunc)
+
+weak_alias (__trunc, trunc)
+
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __trunc, truncl, GLIBC_2_1)
+#endif
+
+# undef weak_alias
+# define weak_alias(a, b)
+# undef compat_symbol
+# define compat_symbol(a, b, c, d)
+
+#define __trunc __trunc_generic
+
+#include "../s_trunc.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf-vis3.S
new file mode 100644
index 0000000..60445df
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf-vis3.S
@@ -0,0 +1,53 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc32 v9 vis3 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_TWENTYTHREE	0x4b000000		/* 2**23 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__truncf_vis3)
+	movwtos	%o0, %f1
+	sethi	%hi(TWO_TWENTYTHREE), %o2
+	fzeros	ZERO
+	fnegs	ZERO, SIGN_BIT
+	movwtos	%o2, %f16
+	fabss	%f1, %f14
+	fcmps	%fcc3, %f14, %f16
+	fmovsuge %fcc3, ZERO, %f14
+	fands	%f1, SIGN_BIT, SIGN_BIT
+	fstoi	%f14, %f14
+	fitos	%f14, %f14
+	fadds	%f1, ZERO, %f18
+	fmovsuge %fcc3, %f18, %f14
+	retl
+	 fors	%f14, SIGN_BIT, %f0
+END (__truncf_vis3)
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf.S
new file mode 100644
index 0000000..2ca2517
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(truncf)
+
+weak_alias (__truncf, truncf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __truncf __truncf_generic
+
+#include "../s_truncf.S"
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_trunc.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_trunc.S
new file mode 100644
index 0000000..c451d1d
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_trunc.S
@@ -0,0 +1,64 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc32 v9 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_FIFTYTWO	0x43300000		/* 2**52 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__trunc)
+	sethi	%hi(TWO_FIFTYTWO), %o2
+	sllx	%o0, 32, %o0
+	or	%o0, %o1, %o0
+	fzero	ZERO
+	stx	%o0, [%sp + 72]
+	sllx	%o2, 32, %o2
+	fnegd	ZERO, SIGN_BIT
+	ldd	[%sp + 72], %f0
+	stx	%o2, [%sp + 72]
+	fabsd	%f0, %f14
+	ldd	[%sp + 72], %f16
+	fcmpd	%fcc3, %f14, %f16
+	fmovduge %fcc3, ZERO, %f14
+	fand	%f0, SIGN_BIT, SIGN_BIT
+	fdtox	%f14, %f14
+	fxtod	%f14, %f14
+	faddd	%f0, ZERO, %f18
+	fmovduge %fcc3, %f18, %f14
+	retl
+	 for	%f14, SIGN_BIT, %f0
+END (__trunc)
+weak_alias (__trunc, trunc)
+
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __trunc, truncl, GLIBC_2_1)
+#endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_truncf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_truncf.S
new file mode 100644
index 0000000..4e6e25b
--- /dev/null
+++ b/sysdeps/sparc/sparc32/sparcv9/fpu/s_truncf.S
@@ -0,0 +1,56 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc32 v9 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_TWENTYTHREE	0x4b000000		/* 2**23 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__truncf)
+	st	%o0, [%sp + 68]
+	sethi	%hi(TWO_TWENTYTHREE), %o2
+	fzeros	ZERO
+	ld	[%sp + 68], %f1
+	fnegs	ZERO, SIGN_BIT
+	st	%o2, [%sp + 68]
+	fabss	%f1, %f14
+	ld	[%sp + 68], %f16
+	fcmps	%fcc3, %f14, %f16
+	fmovsuge %fcc3, ZERO, %f14
+	fands	%f1, SIGN_BIT, SIGN_BIT
+	fstoi	%f14, %f14
+	fitos	%f14, %f14
+	fadds	%f1, ZERO, %f18
+	fmovsuge %fcc3, %f18, %f14
+	retl
+	 fors	%f14, SIGN_BIT, %f0
+END (__truncf)
+weak_alias (__truncf, truncf)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/Makefile b/sysdeps/sparc/sparc64/fpu/multiarch/Makefile
index eff225e..6a9274b 100644
--- a/sysdeps/sparc/sparc64/fpu/multiarch/Makefile
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/Makefile
@@ -9,7 +9,8 @@ libm-sysdep_routines += m_signbitf-vis3 m_signbit-vis3 s_ceilf-vis3 \
 			s_lrintf-vis3 s_lrint-vis3 s_rintf-vis3 \
 			s_rint-vis3 s_fminf-vis3 s_fmin-vis3 \
 			s_fmaxf-vis3 s_fmax-vis3 s_fmaf-vis3 \
-			s_fma-vis3 s_nearbyint-vis3 s_nearbyintf-vis3
+			s_fma-vis3 s_nearbyint-vis3 s_nearbyintf-vis3 \
+			s_truncf-vis3 s_trunc-vis3
 sysdep_routines += s_signbitf-vis3 s_signbit-vis3 s_finitef-vis3 \
 		   s_finite-vis3 s_isinff-vis3 s_isinf-vis3 \
 		   s_isnanf-vis3 s_isnan-vis3
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.S
new file mode 100644
index 0000000..34ff42d
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.S
@@ -0,0 +1,53 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc64 vis3 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_FIFTYTWO	0x43300000		/* 2**52 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__trunc_vis3)
+	sethi	%hi(TWO_FIFTYTWO), %o2
+	sllx	%o2, 32, %o2
+	fzero	ZERO
+	fnegd	ZERO, SIGN_BIT
+	movxtod	%o2, %f16
+	fabsd	%f0, %f14
+	fcmpd	%fcc3, %f14, %f16
+	fmovduge %fcc3, ZERO, %f14
+	fand	%f0, SIGN_BIT, SIGN_BIT
+	fdtox	%f14, %f14
+	fxtod	%f14, %f14
+	faddd	%f0, ZERO, %f18
+	fmovduge %fcc3, %f18, %f14
+	retl
+	 for	%f14, SIGN_BIT, %f0
+END (__trunc_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.S
new file mode 100644
index 0000000..0d6f43a
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(trunc)
+
+weak_alias (__trunc, trunc)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __trunc __trunc_generic
+
+#include "../s_trunc.S"
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.S
new file mode 100644
index 0000000..e566b6b
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.S
@@ -0,0 +1,52 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc64 vis3 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_TWENTYTHREE	0x4b000000		/* 2**23 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__truncf_vis3)
+	sethi	%hi(TWO_TWENTYTHREE), %o2
+	fzeros	ZERO
+	fnegs	ZERO, SIGN_BIT
+	movwtos	%o2,%f16
+	fabss	%f1, %f14
+	fcmps	%fcc3, %f14, %f16
+	fmovsuge %fcc3, ZERO, %f14
+	fands	%f1, SIGN_BIT, SIGN_BIT
+	fstoi	%f14, %f14
+	fitos	%f14, %f14
+	fadds	%f1, ZERO, %f18
+	fmovsuge %fcc3, %f18, %f14
+	retl
+	 fors	%f14, SIGN_BIT, %f0
+END (__truncf_vis3)
diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.S
new file mode 100644
index 0000000..2ca2517
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.S
@@ -0,0 +1,12 @@
+#include <sparc-ifunc.h>
+
+SPARC_ASM_VIS3_IFUNC(truncf)
+
+weak_alias (__truncf, truncf)
+
+# undef weak_alias
+# define weak_alias(a, b)
+
+#define __truncf __truncf_generic
+
+#include "../s_truncf.S"
diff --git a/sysdeps/sparc/sparc64/fpu/s_trunc.S b/sysdeps/sparc/sparc64/fpu/s_trunc.S
new file mode 100644
index 0000000..13d47eb
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_trunc.S
@@ -0,0 +1,55 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc64 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_FIFTYTWO	0x43300000		/* 2**52 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__trunc)
+	sethi	%hi(TWO_FIFTYTWO), %o2
+	sllx	%o2, 32, %o2
+	fzero	ZERO
+	fnegd	ZERO, SIGN_BIT
+	stx	%o2, [%sp + STACK_BIAS + 128]
+	fabsd	%f0, %f14
+	ldd	[%sp + STACK_BIAS + 128], %f16
+	fcmpd	%fcc3, %f14, %f16
+	fmovduge %fcc3, ZERO, %f14
+	fand	%f0, SIGN_BIT, SIGN_BIT
+	fdtox	%f14, %f14
+	fxtod	%f14, %f14
+	faddd	%f0, ZERO, %f18
+	fmovduge %fcc3, %f18, %f14
+	retl
+	 for	%f14, SIGN_BIT, %f0
+END (__trunc)
+weak_alias (__trunc, trunc)
diff --git a/sysdeps/sparc/sparc64/fpu/s_truncf.S b/sysdeps/sparc/sparc64/fpu/s_truncf.S
new file mode 100644
index 0000000..e25a1f5
--- /dev/null
+++ b/sysdeps/sparc/sparc64/fpu/s_truncf.S
@@ -0,0 +1,54 @@
+/* Truncate argument to nearest integral value not larger than
+   the argument, sparc64 version.
+
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David S. Miller <davem@davemloft.net>, 2013.
+
+   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>
+
+	/* We pop constants into the FPU registers using the incoming
+	   argument stack slots, since this avoid having to use any PIC
+	   references.  We also thus avoid having to allocate a register
+	   window.
+
+	   VIS instructions are used to facilitate the formation of
+	   easier constants, and the propagation of the sign bit.  */
+
+#define TWO_TWENTYTHREE	0x4b000000		/* 2**23 */
+
+#define ZERO		%f10			/* 0.0 */
+#define SIGN_BIT	%f12			/* -0.0 */
+
+ENTRY (__truncf)
+	sethi	%hi(TWO_TWENTYTHREE), %o2
+	fzeros	ZERO
+	fnegs	ZERO, SIGN_BIT
+	st	%o2, [%sp + STACK_BIAS + 128]
+	fabss	%f1, %f14
+	ld	[%sp + STACK_BIAS + 128], %f16
+	fcmps	%fcc3, %f14, %f16
+	fmovsuge %fcc3, ZERO, %f14
+	fands	%f1, SIGN_BIT, SIGN_BIT
+	fstoi	%f14, %f14
+	fitos	%f14, %f14
+	fadds	%f1, ZERO, %f18
+	fmovsuge %fcc3, %f18, %f14
+	retl
+	 fors	%f14, SIGN_BIT, %f0
+END (__truncf)
+weak_alias (__truncf, truncf)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   19 ++++++
 .../sparc/sparc32/sparcv9/fpu/multiarch/Makefile   |    3 +-
 .../sparc32/sparcv9/fpu/multiarch/s_trunc-vis3.S   |   57 +++++++++++++++++
 .../sparc/sparc32/sparcv9/fpu/multiarch/s_trunc.S  |   19 ++++++
 .../sparc32/sparcv9/fpu/multiarch/s_truncf-vis3.S  |   53 ++++++++++++++++
 .../sparc/sparc32/sparcv9/fpu/multiarch/s_truncf.S |   12 ++++
 sysdeps/sparc/sparc32/sparcv9/fpu/s_trunc.S        |   64 ++++++++++++++++++++
 sysdeps/sparc/sparc32/sparcv9/fpu/s_truncf.S       |   56 +++++++++++++++++
 sysdeps/sparc/sparc64/fpu/multiarch/Makefile       |    3 +-
 sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.S |   53 ++++++++++++++++
 sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.S      |   12 ++++
 .../sparc/sparc64/fpu/multiarch/s_truncf-vis3.S    |   52 ++++++++++++++++
 sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.S     |   12 ++++
 sysdeps/sparc/sparc64/fpu/s_trunc.S                |   55 +++++++++++++++++
 sysdeps/sparc/sparc64/fpu/s_truncf.S               |   54 ++++++++++++++++
 15 files changed, 522 insertions(+), 2 deletions(-)
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc-vis3.S
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_trunc.S
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf-vis3.S
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_truncf.S
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_trunc.S
 create mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_truncf.S
 create mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.S
 create mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.S
 create mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.S
 create mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.S
 create mode 100644 sysdeps/sparc/sparc64/fpu/s_trunc.S
 create mode 100644 sysdeps/sparc/sparc64/fpu/s_truncf.S


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]