at v2.6.13 2.2 kB view raw
1/* $Id: string.h,v 1.20 2001/09/27 04:36:24 kanoj Exp $ 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 18extern void *__memset(void *,int,__kernel_size_t); 19 20#ifndef EXPORT_SYMTAB_STROPS 21 22/* First the mem*() things. */ 23#define __HAVE_ARCH_MEMMOVE 24extern void *memmove(void *, const void *, __kernel_size_t); 25 26#define __HAVE_ARCH_MEMCPY 27extern void *memcpy(void *, const void *, __kernel_size_t); 28 29#define __HAVE_ARCH_MEMSET 30extern void *__builtin_memset(void *,int,__kernel_size_t); 31 32static 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 70extern int memcmp(const void *,const void *,__kernel_size_t); 71 72/* Now the str*() stuff... */ 73#define __HAVE_ARCH_STRLEN 74extern __kernel_size_t strlen(const char *); 75 76#define __HAVE_ARCH_STRNCMP 77extern 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__) */