mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-30 05:48:05 +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:
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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user