xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/string.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef __ASM_ARM_STRING_H
2*4882a593Smuzhiyun #define __ASM_ARM_STRING_H
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #include <config.h>
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun /*
7*4882a593Smuzhiyun  * We don't do inline string functions, since the
8*4882a593Smuzhiyun  * optimised inline asm versions are not small.
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #undef __HAVE_ARCH_STRRCHR
12*4882a593Smuzhiyun extern char * strrchr(const char * s, int c);
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #undef __HAVE_ARCH_STRCHR
15*4882a593Smuzhiyun extern char * strchr(const char * s, int c);
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #if CONFIG_IS_ENABLED(USE_ARCH_MEMCPY)
18*4882a593Smuzhiyun #define __HAVE_ARCH_MEMCPY
19*4882a593Smuzhiyun #endif
20*4882a593Smuzhiyun extern void * memcpy(void *, const void *, __kernel_size_t);
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMMOVE
23*4882a593Smuzhiyun extern void * memmove(void *, const void *, __kernel_size_t);
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMCHR
26*4882a593Smuzhiyun extern void * memchr(const void *, int, __kernel_size_t);
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMZERO
29*4882a593Smuzhiyun #if CONFIG_IS_ENABLED(USE_ARCH_MEMSET)
30*4882a593Smuzhiyun #define __HAVE_ARCH_MEMSET
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun extern void * memset(void *, int, __kernel_size_t);
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #if 0
35*4882a593Smuzhiyun extern void __memzero(void *ptr, __kernel_size_t n);
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define memset(p,v,n)							\
38*4882a593Smuzhiyun 	({								\
39*4882a593Smuzhiyun 		if ((n) != 0) {						\
40*4882a593Smuzhiyun 			if (__builtin_constant_p((v)) && (v) == 0)	\
41*4882a593Smuzhiyun 				__memzero((p),(n));			\
42*4882a593Smuzhiyun 			else						\
43*4882a593Smuzhiyun 				memset((p),(v),(n));			\
44*4882a593Smuzhiyun 		}							\
45*4882a593Smuzhiyun 		(p);							\
46*4882a593Smuzhiyun 	})
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define memzero(p,n) ({ if ((n) != 0) __memzero((p),(n)); (p); })
49*4882a593Smuzhiyun #else
50*4882a593Smuzhiyun extern void memzero(void *ptr, __kernel_size_t n);
51*4882a593Smuzhiyun #endif
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #endif
54