| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 1 | 2 | #ifndef __ASM_SH_STRING_H |
|---|
| 2 | 3 | #define __ASM_SH_STRING_H |
|---|
| 3 | | - |
|---|
| 4 | | -#ifdef __KERNEL__ |
|---|
| 5 | 4 | |
|---|
| 6 | 5 | /* |
|---|
| 7 | 6 | * Copyright (C) 1999 Niibe Yutaka |
|---|
| .. | .. |
|---|
| 23 | 22 | : "=r" (__dest), "=r" (__src), "=&z" (__dummy) |
|---|
| 24 | 23 | : "0" (__dest), "1" (__src) |
|---|
| 25 | 24 | : "memory", "t"); |
|---|
| 26 | | - |
|---|
| 27 | | - return __xdest; |
|---|
| 28 | | -} |
|---|
| 29 | | - |
|---|
| 30 | | -#define __HAVE_ARCH_STRNCPY |
|---|
| 31 | | -static inline char *strncpy(char *__dest, const char *__src, size_t __n) |
|---|
| 32 | | -{ |
|---|
| 33 | | - register char *__xdest = __dest; |
|---|
| 34 | | - unsigned long __dummy; |
|---|
| 35 | | - |
|---|
| 36 | | - if (__n == 0) |
|---|
| 37 | | - return __xdest; |
|---|
| 38 | | - |
|---|
| 39 | | - __asm__ __volatile__( |
|---|
| 40 | | - "1:\n" |
|---|
| 41 | | - "mov.b @%1+, %2\n\t" |
|---|
| 42 | | - "mov.b %2, @%0\n\t" |
|---|
| 43 | | - "cmp/eq #0, %2\n\t" |
|---|
| 44 | | - "bt/s 2f\n\t" |
|---|
| 45 | | - " cmp/eq %5,%1\n\t" |
|---|
| 46 | | - "bf/s 1b\n\t" |
|---|
| 47 | | - " add #1, %0\n" |
|---|
| 48 | | - "2:" |
|---|
| 49 | | - : "=r" (__dest), "=r" (__src), "=&z" (__dummy) |
|---|
| 50 | | - : "0" (__dest), "1" (__src), "r" (__src+__n) |
|---|
| 51 | | - : "memory", "t"); |
|---|
| 52 | 25 | |
|---|
| 53 | 26 | return __xdest; |
|---|
| 54 | 27 | } |
|---|
| .. | .. |
|---|
| 125 | 98 | |
|---|
| 126 | 99 | #define __HAVE_ARCH_STRLEN |
|---|
| 127 | 100 | extern size_t strlen(const char *); |
|---|
| 128 | | - |
|---|
| 129 | | -#endif /* __KERNEL__ */ |
|---|
| 130 | 101 | |
|---|
| 131 | 102 | #endif /* __ASM_SH_STRING_H */ |
|---|