mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 22:35:33 +00:00
x86/compat: provide optimized memcpy_x86
Implementation for PIE's builtin_memcpy located at criu/arch/x86/include/asm/string.h travis-ci: success for Compel/compat cleanups Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com> Acked-by: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
committed by
Andrei Vagin
parent
2e39767a41
commit
71eb7d8795
25
criu/arch/x86/compat/memcpy-compat.c
Normal file
25
criu/arch/x86/compat/memcpy-compat.c
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This provides an optimized implementation of memcpy, and a simplified
|
||||||
|
* implementation of memset and memmove. These are used here because the
|
||||||
|
* standard kernel runtime versions are not yet available and we don't
|
||||||
|
* trust the gcc built-in implementations as they may do unexpected things
|
||||||
|
* (e.g. FPU ops) in the minimal decompression stub execution environment.
|
||||||
|
*
|
||||||
|
* From Linux kernel boot helpers: arch/x86/boot/compressed/string.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
void *memcpy_x86(void *dest, const void *src, size_t n)
|
||||||
|
{
|
||||||
|
int d0, d1, d2;
|
||||||
|
asm volatile(
|
||||||
|
"rep ; movsl\n\t"
|
||||||
|
"movl %4,%%ecx\n\t"
|
||||||
|
"rep ; movsb\n\t"
|
||||||
|
: "=&c" (d0), "=&D" (d1), "=&S" (d2)
|
||||||
|
: "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src)
|
||||||
|
: "memory");
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
Reference in New Issue
Block a user