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