1 #ifndef __ASM_SH_STRING_H
2 #define __ASM_SH_STRING_H
5 * Copyright (C) 1999 Niibe Yutaka
6 * But consider these trivial functions to be public domain.
9 #define __HAVE_ARCH_STRCPY
10 extern __inline__
char *strcpy(char *__dest
, const char *__src
)
12 register char *__xdest
= __dest
;
13 unsigned long __dummy
;
15 __asm__
__volatile__("1:\n\t"
21 :"=&r" (__dest
), "=&r" (__src
), "=&z" (__dummy
)
22 :"0" (__dest
), "1" (__src
)
28 #define __HAVE_ARCH_STRNCPY
29 extern __inline__
char *strncpy(char *__dest
, const char *__src
, size_t __n
)
31 register char *__xdest
= __dest
;
32 unsigned long __dummy
;
47 : "=r" (__dest
), "=r" (__src
), "=&z" (__dummy
)
48 : "0" (__dest
), "1" (__src
), "r" (__src
+__n
)
54 #define __HAVE_ARCH_STRCMP
55 extern __inline__
int strcmp(const char *__cs
, const char *__ct
)
58 unsigned long __dummy
;
73 : "=r" (__cs
), "=r" (__ct
), "=&r" (__res
), "=&z" (__dummy
)
74 : "0" (__cs
), "1" (__ct
));
79 #define __HAVE_ARCH_STRNCMP
80 extern __inline__
int strncmp(const char *__cs
, const char *__ct
, size_t __n
)
83 unsigned long __dummy
;
101 :"=r" (__cs
), "=r" (__ct
), "=&r" (__res
), "=&z" (__dummy
)
102 : "0" (__cs
), "1" (__ct
), "r" (__cs
+__n
));
107 #define __HAVE_ARCH_MEMSET
108 extern void *memset(void *__s
, int __c
, size_t __count
);
110 #define __HAVE_ARCH_MEMCPY
111 extern void *memcpy(void *__to
, __const__
void *__from
, size_t __n
);
113 #define __HAVE_ARCH_MEMMOVE
114 extern void *memmove(void *__dest
, __const__
void *__src
, size_t __n
);
116 /* Don't build bcopy at all ... */
117 #define __HAVE_ARCH_BCOPY
119 #define __HAVE_ARCH_MEMSCAN
120 extern __inline__
void *memscan(void *__addr
, int __c
, size_t __size
)
122 register char *__end
;
123 unsigned long __dummy
;
125 __asm__("mov #0,%2\n"
134 : "=r" (__addr
), "=r" (__end
), "=&z" (__dummy
)
135 : "0" (__addr
), "1" ((char *)__addr
+ __size
), "r" (__c
));
140 #endif /* __ASM_SH_STRING_H */