| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _ASM_X86_STRING_H |
| #define _ASM_X86_STRING_H |
| |
| #ifdef CONFIG_X86_32 |
| # include <asm/string_32.h> |
| #else |
| # include <asm/string_64.h> |
| #endif |
| |
| static __always_inline void *__inline_memcpy(void *to, const void *from, size_t len) |
| { |
| void *ret = to; |
| |
| asm volatile("rep movsb" |
| : "+D" (to), "+S" (from), "+c" (len) |
| : : "memory"); |
| return ret; |
| } |
| |
| static __always_inline void *__inline_memset(void *s, int v, size_t n) |
| { |
| void *ret = s; |
| |
| asm volatile("rep stosb" |
| : "+D" (s), "+c" (n) |
| : "a" ((uint8_t)v) |
| : "memory"); |
| return ret; |
| } |
| |
| #endif /* _ASM_X86_STRING_H */ |