1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _M68K_STRING_H_ 3 #define _M68K_STRING_H_ 4 5 #include <linux/types.h> 6 #include <linux/compiler.h> 7 8 #define __HAVE_ARCH_STRNLEN 9 static inline size_t strnlen(const char *s, size_t count) 10 { 11 const char *sc = s; 12 13 asm volatile ("\n" 14 "1: subq.l #1,%1\n" 15 " jcs 2f\n" 16 " tst.b (%0)+\n" 17 " jne 1b\n" 18 " subq.l #1,%0\n" 19 "2:" 20 : "+a" (sc), "+d" (count)); 21 return sc - s; 22 } 23 24 #define __HAVE_ARCH_MEMMOVE 25 extern void *memmove(void *, const void *, __kernel_size_t); 26 27 extern int memcmp(const void *, const void *, __kernel_size_t); 28 #define memcmp(d, s, n) __builtin_memcmp(d, s, n) 29 30 #define __HAVE_ARCH_MEMSET 31 extern void *memset(void *, int, __kernel_size_t); 32 #define memset(d, c, n) __builtin_memset(d, c, n) 33 34 #define __HAVE_ARCH_MEMCPY 35 extern void *memcpy(void *, const void *, __kernel_size_t); 36 #define memcpy(d, s, n) __builtin_memcpy(d, s, n) 37 38 #endif /* _M68K_STRING_H_ */ 39