linux/arch/sparc/include/asm/string_32.h
<<
>>
Prefs
   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 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
   7 */
   8
   9#ifndef __SPARC_STRING_H__
  10#define __SPARC_STRING_H__
  11
  12#include <asm/page.h>
  13
  14/* Really, userland/ksyms should not see any of this stuff. */
  15
  16#ifdef __KERNEL__
  17
  18extern void __memmove(void *,const void *,__kernel_size_t);
  19
  20#ifndef EXPORT_SYMTAB_STROPS
  21
  22/* First the mem*() things. */
  23#define __HAVE_ARCH_MEMMOVE
  24#undef memmove
  25#define memmove(_to, _from, _n) \
  26({ \
  27        void *_t = (_to); \
  28        __memmove(_t, (_from), (_n)); \
  29        _t; \
  30})
  31
  32#define __HAVE_ARCH_MEMCPY
  33#define memcpy(t, f, n) __builtin_memcpy(t, f, n)
  34
  35#define __HAVE_ARCH_MEMSET
  36#define memset(s, c, count) __builtin_memset(s, c, count)
  37
  38#define __HAVE_ARCH_MEMSCAN
  39
  40#undef memscan
  41#define memscan(__arg0, __char, __arg2)                                         \
  42({                                                                              \
  43        extern void *__memscan_zero(void *, size_t);                            \
  44        extern void *__memscan_generic(void *, int, size_t);                    \
  45        void *__retval, *__addr = (__arg0);                                     \
  46        size_t __size = (__arg2);                                               \
  47                                                                                \
  48        if(__builtin_constant_p(__char) && !(__char))                           \
  49                __retval = __memscan_zero(__addr, __size);                      \
  50        else                                                                    \
  51                __retval = __memscan_generic(__addr, (__char), __size);         \
  52                                                                                \
  53        __retval;                                                               \
  54})
  55
  56#define __HAVE_ARCH_MEMCMP
  57extern int memcmp(const void *,const void *,__kernel_size_t);
  58
  59/* Now the str*() stuff... */
  60#define __HAVE_ARCH_STRLEN
  61extern __kernel_size_t strlen(const char *);
  62
  63#define __HAVE_ARCH_STRNCMP
  64
  65extern int __strncmp(const char *, const char *, __kernel_size_t);
  66
  67static inline int __constant_strncmp(const char *src, const char *dest, __kernel_size_t count)
  68{
  69        register int retval;
  70        switch(count) {
  71        case 0: return 0;
  72        case 1: return (src[0] - dest[0]);
  73        case 2: retval = (src[0] - dest[0]);
  74                if(!retval && src[0])
  75                  retval = (src[1] - dest[1]);
  76                return retval;
  77        case 3: retval = (src[0] - dest[0]);
  78                if(!retval && src[0]) {
  79                  retval = (src[1] - dest[1]);
  80                  if(!retval && src[1])
  81                    retval = (src[2] - dest[2]);
  82                }
  83                return retval;
  84        case 4: retval = (src[0] - dest[0]);
  85                if(!retval && src[0]) {
  86                  retval = (src[1] - dest[1]);
  87                  if(!retval && src[1]) {
  88                    retval = (src[2] - dest[2]);
  89                    if (!retval && src[2])
  90                      retval = (src[3] - dest[3]);
  91                  }
  92                }
  93                return retval;
  94        case 5: retval = (src[0] - dest[0]);
  95                if(!retval && src[0]) {
  96                  retval = (src[1] - dest[1]);
  97                  if(!retval && src[1]) {
  98                    retval = (src[2] - dest[2]);
  99                    if (!retval && src[2]) {
 100                      retval = (src[3] - dest[3]);
 101                      if (!retval && src[3])
 102                        retval = (src[4] - dest[4]);
 103                    }
 104                  }
 105                }
 106                return retval;
 107        default:
 108                retval = (src[0] - dest[0]);
 109                if(!retval && src[0]) {
 110                  retval = (src[1] - dest[1]);
 111                  if(!retval && src[1]) {
 112                    retval = (src[2] - dest[2]);
 113                    if(!retval && src[2])
 114                      retval = __strncmp(src+3,dest+3,count-3);
 115                  }
 116                }
 117                return retval;
 118        }
 119}
 120
 121#undef strncmp
 122#define strncmp(__arg0, __arg1, __arg2) \
 123(__builtin_constant_p(__arg2) ? \
 124 __constant_strncmp(__arg0, __arg1, __arg2) : \
 125 __strncmp(__arg0, __arg1, __arg2))
 126
 127#endif /* !EXPORT_SYMTAB_STROPS */
 128
 129#endif /* __KERNEL__ */
 130
 131#endif /* !(__SPARC_STRING_H__) */
 132
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.