1 /* 2 * string.h: External definitions for optimized assembly string 3 * routines for the Linux Kernel. 4 * 5 * Copyright (C) 1995,1996 David S. Miller (davem@caip.rutgers.edu) 6 * Copyright (C) 1996,1997,1999 Jakub Jelinek (jakub@redhat.com) 7 */ 8 9 #ifndef __SPARC64_STRING_H__ 10 #define __SPARC64_STRING_H__ 11 12 /* Really, userland/ksyms should not see any of this stuff. */ 13 14 #ifdef __KERNEL__ 15 16 #include <asm/asi.h> 17 18 extern void *__memset(void *,int,__kernel_size_t); 19 20 #ifndef EXPORT_SYMTAB_STROPS 21 22 /* First the mem*() things. */ 23 #define __HAVE_ARCH_MEMMOVE 24 extern void *memmove(void *, const void *, __kernel_size_t); 25 26 #define __HAVE_ARCH_MEMCPY 27 extern void *memcpy(void *, const void *, __kernel_size_t); 28 29 #define __HAVE_ARCH_MEMSET 30 extern void *__builtin_memset(void *,int,__kernel_size_t); 31 32 static inline void *__constant_memset(void *s, int c, __kernel_size_t count) 33 { 34 extern __kernel_size_t __bzero(void *, __kernel_size_t); 35 36 if (!c) { 37 __bzero(s, count); 38 return s; 39 } else 40 return __memset(s, c, count); 41 } 42 43 #undef memset 44 #define memset(s, c, count) \ 45 ((__builtin_constant_p(count) && (count) <= 32) ? \ 46 __builtin_memset((s), (c), (count)) : \ 47 (__builtin_constant_p(c) ? \ 48 __constant_memset((s), (c), (count)) : \ 49 __memset((s), (c), (count)))) 50 51 #define __HAVE_ARCH_MEMSCAN 52 53 #undef memscan 54 #define memscan(__arg0, __char, __arg2) \ 55 ({ \ 56 extern void *__memscan_zero(void *, size_t); \ 57 extern void *__memscan_generic(void *, int, size_t); \ 58 void *__retval, *__addr = (__arg0); \ 59 size_t __size = (__arg2); \ 60 \ 61 if(__builtin_constant_p(__char) && !(__char)) \ 62 __retval = __memscan_zero(__addr, __size); \ 63 else \ 64 __retval = __memscan_generic(__addr, (__char), __size); \ 65 \ 66 __retval; \ 67 }) 68 69 #define __HAVE_ARCH_MEMCMP 70 extern int memcmp(const void *,const void *,__kernel_size_t); 71 72 /* Now the str*() stuff... */ 73 #define __HAVE_ARCH_STRLEN 74 extern __kernel_size_t strlen(const char *); 75 76 #define __HAVE_ARCH_STRNCMP 77 extern int strncmp(const char *, const char *, __kernel_size_t); 78 79 #endif /* !EXPORT_SYMTAB_STROPS */ 80 81 #endif /* __KERNEL__ */ 82 83 #endif /* !(__SPARC64_STRING_H__) */ 84