mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	x86-64: Implement libm IFUNC selectors in C
* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines): Add s_ceil-sse4_1, s_ceilf-sse4_1, s_floor-sse4_1, s_floorf-sse4_1, s_nearbyint-sse4_1, s_nearbyintf-sse4_1, s_rint-sse4_1 and s_rintf-sse4_1. * sysdeps/x86_64/fpu/multiarch/ifunc-sse4_1.h: New file. * sysdeps/x86_64/fpu/multiarch/s_ceil.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_ceilf.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_floor.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_floorf.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_nearbyint.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_nearbyintf.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_rint.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_rintf.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_ceil.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_ceil-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__ceil): Removed. * sysdeps/x86_64/fpu/multiarch/s_ceilf.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_ceilf-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__ceilf): Removed. * sysdeps/x86_64/fpu/multiarch/s_floor.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_floor-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__floor): Removed. * sysdeps/x86_64/fpu/multiarch/s_floorf.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_floorf-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__floorf): Removed. * sysdeps/x86_64/fpu/multiarch/s_nearbyint.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_nearbyint-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__nearbyint): Removed. * sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_nearbyintf-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__nearbyintf): Removed. * sysdeps/x86_64/fpu/multiarch/s_rint.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_rint-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__rint): Removed. * sysdeps/x86_64/fpu/multiarch/s_rintf.S: Renamed to ... * sysdeps/x86_64/fpu/multiarch/s_rintf-sse4_1.S: This. Don't include <machine/asm.h> nor <init-arch.h>. Include <sysdep.h>. (__rintf): Removed.
This commit is contained in:
		
							
								
								
									
										48
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,3 +1,51 @@ | |||||||
|  | 2017-08-04  H.J. Lu  <hongjiu.lu@intel.com> | ||||||
|  |  | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines): | ||||||
|  | 	Add s_ceil-sse4_1, s_ceilf-sse4_1, s_floor-sse4_1, | ||||||
|  | 	s_floorf-sse4_1, s_nearbyint-sse4_1, s_nearbyintf-sse4_1, | ||||||
|  | 	s_rint-sse4_1 and s_rintf-sse4_1. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/ifunc-sse4_1.h: New file. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_ceil.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_ceilf.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_floor.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_floorf.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_nearbyint.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_nearbyintf.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_rint.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_rintf.c: Likewise. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_ceil.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_ceil-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__ceil): Removed. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_ceilf.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_ceilf-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__ceilf): Removed. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_floor.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_floor-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__floor): Removed. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_floorf.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_floorf-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__floorf): Removed. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_nearbyint.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_nearbyint-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__nearbyint): Removed. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_nearbyintf-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__nearbyintf): Removed. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_rint.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_rint-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__rint): Removed. | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_rintf.S: Renamed to ... | ||||||
|  | 	* sysdeps/x86_64/fpu/multiarch/s_rintf-sse4_1.S: This.  Don't | ||||||
|  | 	include <machine/asm.h> nor <init-arch.h>.  Include <sysdep.h>. | ||||||
|  | 	(__rintf): Removed. | ||||||
|  |  | ||||||
| 2017-08-04  H.J. Lu  <hongjiu.lu@intel.com> | 2017-08-04  H.J. Lu  <hongjiu.lu@intel.com> | ||||||
|  |  | ||||||
| 	* sysdeps/i386/start.S (_start): Check Check PIC instead of | 	* sysdeps/i386/start.S (_start): Check Check PIC instead of | ||||||
|   | |||||||
| @@ -2,6 +2,10 @@ ifeq ($(subdir),math) | |||||||
| libm-sysdep_routines += s_floor-c s_ceil-c s_floorf-c s_ceilf-c \ | libm-sysdep_routines += s_floor-c s_ceil-c s_floorf-c s_ceilf-c \ | ||||||
| 			s_rint-c s_rintf-c s_nearbyint-c s_nearbyintf-c | 			s_rint-c s_rintf-c s_nearbyint-c s_nearbyintf-c | ||||||
|  |  | ||||||
|  | libm-sysdep_routines += s_ceil-sse4_1 s_ceilf-sse4_1 s_floor-sse4_1 \ | ||||||
|  | 			s_floorf-sse4_1 s_nearbyint-sse4_1 \ | ||||||
|  | 			s_nearbyintf-sse4_1 s_rint-sse4_1 s_rintf-sse4_1 | ||||||
|  |  | ||||||
| libm-sysdep_routines += e_exp-fma4 e_log-fma4 e_pow-fma4 s_atan-fma4 \ | libm-sysdep_routines += e_exp-fma4 e_log-fma4 e_pow-fma4 s_atan-fma4 \ | ||||||
| 			e_asin-fma4 e_atan2-fma4 s_sin-fma4 s_tan-fma4 \ | 			e_asin-fma4 e_atan2-fma4 s_sin-fma4 s_tan-fma4 \ | ||||||
| 			mplog-fma4 mpa-fma4 slowexp-fma4 slowpow-fma4 \ | 			mplog-fma4 mpa-fma4 slowexp-fma4 slowpow-fma4 \ | ||||||
|   | |||||||
							
								
								
									
										33
									
								
								sysdeps/x86_64/fpu/multiarch/ifunc-sse4_1.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								sysdeps/x86_64/fpu/multiarch/ifunc-sse4_1.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | /* Common definition for ifunc selections optimized with SSE4.1. | ||||||
|  |    Copyright (C) 2017 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 <init-arch.h> | ||||||
|  |  | ||||||
|  | extern __typeof (REDIRECT_NAME) OPTIMIZE (c) attribute_hidden; | ||||||
|  | extern __typeof (REDIRECT_NAME) OPTIMIZE (sse41) attribute_hidden; | ||||||
|  |  | ||||||
|  | static inline void * | ||||||
|  | IFUNC_SELECTOR (void) | ||||||
|  | { | ||||||
|  |   const struct cpu_features* cpu_features = __get_cpu_features (); | ||||||
|  |  | ||||||
|  |   if (CPU_FEATURES_CPU_P (cpu_features, SSE4_1)) | ||||||
|  |     return OPTIMIZE (sse41); | ||||||
|  |  | ||||||
|  |   return OPTIMIZE (c); | ||||||
|  | } | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__ceil) |  | ||||||
| 	.type	__ceil, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__ceil_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__ceil_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__ceil) |  | ||||||
| weak_alias (__ceil, ceil) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__ceil_sse41) | ENTRY(__ceil_sse41) | ||||||
| 	roundsd	$10, %xmm0, %xmm0 | 	roundsd	$10, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_ceil.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_ceil.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | /* Multiple versions of __ceil. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define ceil __redirect_ceil | ||||||
|  | #define __ceil __redirect___ceil | ||||||
|  | #include <math.h> | ||||||
|  | #undef ceil | ||||||
|  | #undef __ceil | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME ceil | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_ceil, __ceil, IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__ceil, ceil) | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__ceilf) |  | ||||||
| 	.type	__ceilf, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__ceilf_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__ceilf_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__ceilf) |  | ||||||
| weak_alias (__ceilf, ceilf) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__ceilf_sse41) | ENTRY(__ceilf_sse41) | ||||||
| 	roundss	$10, %xmm0, %xmm0 | 	roundss	$10, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_ceilf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_ceilf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | /* Multiple versions of __ceilf. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define ceilf __redirect_ceilf | ||||||
|  | #define __ceilf __redirect___ceilf | ||||||
|  | #include <math.h> | ||||||
|  | #undef ceilf | ||||||
|  | #undef __ceilf | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME ceilf | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_ceilf, __ceilf, IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__ceilf, ceilf) | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__floor) |  | ||||||
| 	.type	__floor, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__floor_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__floor_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__floor) |  | ||||||
| weak_alias (__floor, floor) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__floor_sse41) | ENTRY(__floor_sse41) | ||||||
| 	roundsd	$9, %xmm0, %xmm0 | 	roundsd	$9, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_floor.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_floor.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | /* Multiple versions of __floor. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define floor __redirect_floor | ||||||
|  | #define __floor __redirect___floor | ||||||
|  | #include <math.h> | ||||||
|  | #undef floor | ||||||
|  | #undef __floor | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME floor | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_floor, __floor, IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__floor, floor) | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__floorf) |  | ||||||
| 	.type	__floorf, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__floorf_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__floorf_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__floorf) |  | ||||||
| weak_alias (__floorf, floorf) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__floorf_sse41) | ENTRY(__floorf_sse41) | ||||||
| 	roundss	$9, %xmm0, %xmm0 | 	roundss	$9, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_floorf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_floorf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | /* Multiple versions of __floorf. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define floorf __redirect_floorf | ||||||
|  | #define __floorf __redirect___floorf | ||||||
|  | #include <math.h> | ||||||
|  | #undef floorf | ||||||
|  | #undef __floorf | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME floorf | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_floorf, __floorf, IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__floorf, floorf) | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__nearbyint) |  | ||||||
| 	.type	__nearbyint, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__nearbyint_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__nearbyint_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__nearbyint) |  | ||||||
| weak_alias (__nearbyint, nearbyint) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__nearbyint_sse41) | ENTRY(__nearbyint_sse41) | ||||||
| 	roundsd	$0xc, %xmm0, %xmm0 | 	roundsd	$0xc, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										30
									
								
								sysdeps/x86_64/fpu/multiarch/s_nearbyint.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								sysdeps/x86_64/fpu/multiarch/s_nearbyint.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* Multiple versions of __nearbyint. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define nearbyint __redirect_nearbyint | ||||||
|  | #define __nearbyint __redirect___nearbyint | ||||||
|  | #include <math.h> | ||||||
|  | #undef nearbyint | ||||||
|  | #undef __nearbyint | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME nearbyint | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_nearbyint, __nearbyint, | ||||||
|  | 		       IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__nearbyint, nearbyint) | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__nearbyintf) |  | ||||||
| 	.type	__nearbyintf, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__nearbyintf_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__nearbyintf_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__nearbyintf) |  | ||||||
| weak_alias (__nearbyintf, nearbyintf) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__nearbyintf_sse41) | ENTRY(__nearbyintf_sse41) | ||||||
| 	roundss	$0xc, %xmm0, %xmm0 | 	roundss	$0xc, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										30
									
								
								sysdeps/x86_64/fpu/multiarch/s_nearbyintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								sysdeps/x86_64/fpu/multiarch/s_nearbyintf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* Multiple versions of __nearbyintf. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define nearbyintf __redirect_nearbyintf | ||||||
|  | #define __nearbyintf __redirect___nearbyintf | ||||||
|  | #include <math.h> | ||||||
|  | #undef nearbyintf | ||||||
|  | #undef __nearbyintf | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME nearbyintf | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_nearbyintf, __nearbyintf, | ||||||
|  | 		       IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__nearbyintf, nearbyintf) | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__rint) |  | ||||||
| 	.type	__rint, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__rint_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__rint_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__rint) |  | ||||||
| weak_alias (__rint, rint) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__rint_sse41) | ENTRY(__rint_sse41) | ||||||
| 	roundsd	$4, %xmm0, %xmm0 | 	roundsd	$4, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_rint.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_rint.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | /* Multiple versions of __rint. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define rint __redirect_rint | ||||||
|  | #define __rint __redirect___rint | ||||||
|  | #include <math.h> | ||||||
|  | #undef rint | ||||||
|  | #undef __rint | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME rint | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_rint, __rint, IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__rint, rint) | ||||||
| @@ -16,22 +16,9 @@ | |||||||
|    License along with the GNU C Library; if not, see
 |    License along with the GNU C Library; if not, see
 | ||||||
|    <http://www.gnu.org/licenses/>.  */ |    <http://www.gnu.org/licenses/>.  */ | ||||||
| 
 | 
 | ||||||
| #include <machine/asm.h> | #include <sysdep.h> | ||||||
| #include <init-arch.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ENTRY(__rintf) |  | ||||||
| 	.type	__rintf, @gnu_indirect_function
 |  | ||||||
| 	LOAD_RTLD_GLOBAL_RO_RDX |  | ||||||
| 	leaq	__rintf_sse41(%rip), %rax |  | ||||||
| 	HAS_CPU_FEATURE (SSE4_1) |  | ||||||
| 	jnz	2f |  | ||||||
| 	leaq	__rintf_c(%rip), %rax |  | ||||||
| 2:	ret |  | ||||||
| END(__rintf) |  | ||||||
| weak_alias (__rintf, rintf) |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|  | 	.section .text.sse4.1,"ax",@progbits
 | ||||||
| ENTRY(__rintf_sse41) | ENTRY(__rintf_sse41) | ||||||
| 	roundss	$4, %xmm0, %xmm0 | 	roundss	$4, %xmm0, %xmm0 | ||||||
| 	ret | 	ret | ||||||
							
								
								
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_rintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sysdeps/x86_64/fpu/multiarch/s_rintf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | /* Multiple versions of __rintf. | ||||||
|  |    Copyright (C) 2017 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/>.  */ | ||||||
|  |  | ||||||
|  | #define rintf __redirect_rintf | ||||||
|  | #define __rintf __redirect___rintf | ||||||
|  | #include <math.h> | ||||||
|  | #undef rintf | ||||||
|  | #undef __rintf | ||||||
|  |  | ||||||
|  | #define SYMBOL_NAME rintf | ||||||
|  | #include "ifunc-sse4_1.h" | ||||||
|  |  | ||||||
|  | libc_ifunc_redirected (__redirect_rintf, __rintf, IFUNC_SELECTOR ()); | ||||||
|  | weak_alias (__rintf, rintf) | ||||||
		Reference in New Issue
	
	Block a user