mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	* crypt/Makefile: Move test targets after toplevel Rules inclusion. Grab any necessary sysdep routines when linking. * crypt/md5.c (md5_process_block): Remove define, we will always name it __md5_process_block. (md5_finish_ctx): Update md5_process_block call. (md5_stream): Likewise. (md5_process_bytes): Likewise. (md5_process_block): Rename to __md5_process_block and move to ... * crypt/md5-block.c: ... here. * crypt/sha256.c (sha256_process_block): Move to ... * crypt/sha256-block.c: ... here. * crypt/sha512.c (sha512_process_block): Move to ... * crypt/sha512-block.c: ... here. * locale/Makefile (CFLAGS-md5.c): Define to add crypt/ to include path. * sysdeps/sparc/sparc-ifunc.c (sparc_libc_ifunc): Define. * sysdeps/sparc/sparc64/multiarch/Makefile (libcrypt-sysdep_routines): Add crypto assembler sysdeps when in crypt subdir. (localedef-aux): Add md5 crypto assembler when in locale subdir. * sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile: Mirror sparc64 multiarch changes. * sysdeps/sparc/sparc64/multiarch/md5-block.c: New file. * sysdeps/sparc/sparc64/multiarch/md5-crop.S: New file. * sysdeps/sparc/sparc64/multiarch/sha256-block.c: New file. * sysdeps/sparc/sparc64/multiarch/sha256-crop.S: New file. * sysdeps/sparc/sparc64/multiarch/sha512-block.c: New file. * sysdeps/sparc/sparc64/multiarch/sha512-crop.S: New file. * sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c: New file. * sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S: New file. * sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c: New file. * sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S: New file. * sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c: New file. * sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S: New file.
		
			
				
	
	
		
			115 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* This file is part of the GNU C Library.
 | 
						|
   Copyright (C) 2012 Free Software Foundation, Inc.
 | 
						|
 | 
						|
   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>
 | 
						|
 | 
						|
#ifdef __ASSEMBLER__
 | 
						|
 | 
						|
# ifdef SHARED
 | 
						|
 | 
						|
#  define SPARC_ASM_IFUNC_DFLT(name, dflt)		\
 | 
						|
ENTRY (__##name)					\
 | 
						|
	.type	__##name, @gnu_indirect_function;	\
 | 
						|
	SETUP_PIC_REG_LEAF(o3, o5);			\
 | 
						|
	sethi	%gdop_hix22(dflt), %o1;			\
 | 
						|
	xor	%o1, %gdop_lox10(dflt), %o1;		\
 | 
						|
	add	%o3, %o1, %o1;				\
 | 
						|
	retl;						\
 | 
						|
	 mov	%o1, %o0;				\
 | 
						|
END (__##name)
 | 
						|
 | 
						|
#  define SPARC_ASM_IFUNC1(name, m1, f1, dflt)		\
 | 
						|
ENTRY (__##name)					\
 | 
						|
	.type	__##name, @gnu_indirect_function;	\
 | 
						|
	SETUP_PIC_REG_LEAF(o3, o5);			\
 | 
						|
	set	m1, %o1;				\
 | 
						|
	andcc	%o0, %o1, %g0;				\
 | 
						|
	be	9f;					\
 | 
						|
	 nop;						\
 | 
						|
	sethi	%gdop_hix22(f1), %o1;			\
 | 
						|
	xor	%o1, %gdop_lox10(f1), %o1;		\
 | 
						|
	ba	10f;					\
 | 
						|
	 nop;						\
 | 
						|
9:	sethi	%gdop_hix22(dflt), %o1;			\
 | 
						|
	xor	%o1, %gdop_lox10(dflt), %o1;		\
 | 
						|
10:	add	%o3, %o1, %o1;				\
 | 
						|
	retl;						\
 | 
						|
	 mov	%o1, %o0;				\
 | 
						|
END (__##name)
 | 
						|
 | 
						|
# else /* SHARED */
 | 
						|
 | 
						|
# ifdef __arch64__
 | 
						|
#  define SET(SYM, TMP, REG)	setx SYM, TMP, REG
 | 
						|
# else
 | 
						|
#  define SET(SYM, TMP, REG)	set SYM, REG
 | 
						|
# endif
 | 
						|
 | 
						|
#  define SPARC_ASM_IFUNC_DFLT(name, dflt)		\
 | 
						|
ENTRY (__##name)					\
 | 
						|
	.type	__##name, @gnu_indirect_function;	\
 | 
						|
	SET(dflt, %g1, %o1);				\
 | 
						|
	retl;						\
 | 
						|
	 mov	%o1, %o0;				\
 | 
						|
END (__##name)
 | 
						|
 | 
						|
#  define SPARC_ASM_IFUNC1(name, m1, f1, dflt)		\
 | 
						|
ENTRY (__##name)					\
 | 
						|
	.type	__##name, @gnu_indirect_function;	\
 | 
						|
	set	m1, %o1;				\
 | 
						|
	andcc	%o0, %o1, %g0;				\
 | 
						|
	be	9f;					\
 | 
						|
	 nop;						\
 | 
						|
	SET(f1, %g1, %o1);				\
 | 
						|
	ba	10f;					\
 | 
						|
	 nop;						\
 | 
						|
9:	SET(dflt, %g1, %o1);				\
 | 
						|
10:	retl;						\
 | 
						|
	 mov	%o1, %o0;				\
 | 
						|
END (__##name)
 | 
						|
 | 
						|
# endif /* SHARED */
 | 
						|
 | 
						|
# ifdef HAVE_AS_VIS3_SUPPORT
 | 
						|
 | 
						|
#define SPARC_ASM_VIS3_IFUNC(name)			\
 | 
						|
	SPARC_ASM_IFUNC1(name, HWCAP_SPARC_VIS3,	\
 | 
						|
			 __##name##_vis3, __##name##_generic)
 | 
						|
 | 
						|
# else /* HAVE_AS_VIS3_SUPPORT */
 | 
						|
 | 
						|
#define SPARC_ASM_VIS3_IFUNC(name)			\
 | 
						|
	SPARC_ASM_IFUNC_DFLT(name, __##name##_generic)
 | 
						|
 | 
						|
# endif /* HAVE_AS_VIS3_SUPPORT */
 | 
						|
 | 
						|
 | 
						|
#else	/* __ASSEMBLER__ */
 | 
						|
 | 
						|
# define sparc_libm_ifunc(name, expr)					\
 | 
						|
  extern void *name##_ifunc (int) __asm__ (#name);			\
 | 
						|
  void *name##_ifunc (int hwcap)					\
 | 
						|
  {									\
 | 
						|
    __typeof (name) *res = expr;					\
 | 
						|
    return res;								\
 | 
						|
  }									\
 | 
						|
  __asm__ (".type " #name ", %gnu_indirect_function");
 | 
						|
 | 
						|
# define sparc_libc_ifunc(name, expr) sparc_libm_ifunc (name, expr)
 | 
						|
 | 
						|
#endif	/* __ASSEMBLER__ */
 |