1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 2011 Andes Technology Corporation 3*4882a593Smuzhiyun * Copyright (C) 2010 Shawn Lin (nobuhiro@andestech.com) 4*4882a593Smuzhiyun * Copyright (C) 2011 Macpaul Lin (macpaul@andestech.com) 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public 7*4882a593Smuzhiyun * License. See the file "COPYING" in the main directory of this archive 8*4882a593Smuzhiyun * for more details. 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef __ASM_NDS_STRING_H 12*4882a593Smuzhiyun #define __ASM_NDS_STRING_H 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /* 15*4882a593Smuzhiyun * We don't do inline string functions, since the 16*4882a593Smuzhiyun * optimised inline asm versions are not small. 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #undef __HAVE_ARCH_STRRCHR 20*4882a593Smuzhiyun extern char *strrchr(const char *s, int c); 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #undef __HAVE_ARCH_STRCHR 23*4882a593Smuzhiyun extern char *strchr(const char *s, int c); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMCPY 26*4882a593Smuzhiyun extern void *memcpy(void *, const void *, __kernel_size_t); 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMMOVE 29*4882a593Smuzhiyun extern void *memmove(void *, const void *, __kernel_size_t); 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMCHR 32*4882a593Smuzhiyun extern void *memchr(const void *, int, __kernel_size_t); 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMZERO 35*4882a593Smuzhiyun #undef __HAVE_ARCH_MEMSET 36*4882a593Smuzhiyun extern void *memset(void *, int, __kernel_size_t); 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #ifdef CONFIG_MARCO_MEMSET 39*4882a593Smuzhiyun extern void __memzero(void *ptr, __kernel_size_t n); 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define memset(p, v, n) \ 42*4882a593Smuzhiyun ({ \ 43*4882a593Smuzhiyun if ((n) != 0) { \ 44*4882a593Smuzhiyun if (__builtin_constant_p((v)) && (v) == 0) \ 45*4882a593Smuzhiyun __memzero((p), (n)); \ 46*4882a593Smuzhiyun else \ 47*4882a593Smuzhiyun memset((p), (v), (n)); \ 48*4882a593Smuzhiyun } \ 49*4882a593Smuzhiyun (p); \ 50*4882a593Smuzhiyun }) 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define memzero(p, n) ({ if ((n) != 0) __memzero((p), (n)); (p); }) 53*4882a593Smuzhiyun #else 54*4882a593Smuzhiyun extern void memzero(void *ptr, __kernel_size_t n); 55*4882a593Smuzhiyun #endif 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #endif /* __ASM_NDS_STRING_H */ 58