37 #define USE_GENERIC_MEMCPY_REVERSE 1 39 #define USE_GENERIC_MEMCPY_REVERSE 0 61 :
"=&D" (
edi ),
"=&S" (
esi ),
63 :
"0" (
edi ),
"1" (
esi ),
"2" (
len >> 2 )
66 :
"=&D" (
edi ),
"=&S" (
esi ),
68 :
"0" (
edi ),
"1" (
esi ),
"2" (
len & 3 )
100 :
"=&D" (
edi ),
"=&S" (
esi ),
102 :
"0" (
edi ),
"1" (
esi ),
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
void * __memmove(void *dest, const void *src, size_t len)
Copy (possibly overlapping) memory area.
void * __memcpy_reverse(void *dest, const void *src, size_t len)
void * generic_memcpy_reverse(void *dest, const void *src, size_t len)
Copy memory region (backwards)
__asm__ __volatile__("call *%9" :"=a"(result), "=c"(discard_ecx), "=d"(discard_edx) :"d"(0), "a"(code), "b"(0), "c"(in_phys), "D"(0), "S"(out_phys), "m"(hypercall))
#define USE_GENERIC_MEMCPY_REVERSE
__asm__(".section \".rodata\", \"a\", " PROGBITS "\n\t" "\nprivate_key_data:\n\t" ".size private_key_data, ( . - private_key_data )\n\t" ".equ private_key_len, ( . - private_key_data )\n\t" ".previous\n\t")
void * __attribute__((noinline))
Copy memory area.
void * __memcpy(void *dest, const void *src, size_t len)
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest