Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86, boot: Move optimized memcpy() 32/64 bit versions to compressed/string.c

Move optimized versions of memcpy to compressed/string.c This will allow
any other code to use these functions too if need be in future. Again
trying to put definition in a common place instead of hiding it in misc.c

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Link: http://lkml.kernel.org/r/1395170800-11059-4-git-send-email-vgoyal@redhat.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>

authored by

Vivek Goyal and committed by
H. Peter Anvin
820e8fec c041b5ad

+34 -30
+1 -30
arch/x86/boot/compressed/misc.c
··· 10 10 */ 11 11 12 12 #include "misc.h" 13 + #include "../string.h" 13 14 14 15 /* WARNING!! 15 16 * This code is compiled with -fPIC and it is relocated dynamically ··· 111 110 struct boot_params *real_mode; /* Pointer to real-mode data */ 112 111 113 112 void *memset(void *s, int c, size_t n); 114 - void *memcpy(void *dest, const void *src, size_t n); 115 113 116 114 memptr free_mem_ptr; 117 115 memptr free_mem_end_ptr; ··· 225 225 ss[i] = c; 226 226 return s; 227 227 } 228 - #ifdef CONFIG_X86_32 229 - void *memcpy(void *dest, const void *src, size_t n) 230 - { 231 - int d0, d1, d2; 232 - asm volatile( 233 - "rep ; movsl\n\t" 234 - "movl %4,%%ecx\n\t" 235 - "rep ; movsb\n\t" 236 - : "=&c" (d0), "=&D" (d1), "=&S" (d2) 237 - : "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src) 238 - : "memory"); 239 - 240 - return dest; 241 - } 242 - #else 243 - void *memcpy(void *dest, const void *src, size_t n) 244 - { 245 - long d0, d1, d2; 246 - asm volatile( 247 - "rep ; movsq\n\t" 248 - "movq %4,%%rcx\n\t" 249 - "rep ; movsb\n\t" 250 - : "=&c" (d0), "=&D" (d1), "=&S" (d2) 251 - : "0" (n >> 3), "g" (n & 7), "1" (dest), "2" (src) 252 - : "memory"); 253 - 254 - return dest; 255 - } 256 - #endif 257 228 258 229 static void error(char *x) 259 230 {
+33
arch/x86/boot/compressed/string.c
··· 11 11 } 12 12 13 13 #include "../string.c" 14 + 15 + /* misc.h might pull in string_32.h which has a macro for memcpy. undef that */ 16 + #undef memcpy 17 + 18 + #ifdef CONFIG_X86_32 19 + void *memcpy(void *dest, const void *src, size_t n) 20 + { 21 + int d0, d1, d2; 22 + asm volatile( 23 + "rep ; movsl\n\t" 24 + "movl %4,%%ecx\n\t" 25 + "rep ; movsb\n\t" 26 + : "=&c" (d0), "=&D" (d1), "=&S" (d2) 27 + : "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src) 28 + : "memory"); 29 + 30 + return dest; 31 + } 32 + #else 33 + void *memcpy(void *dest, const void *src, size_t n) 34 + { 35 + long d0, d1, d2; 36 + asm volatile( 37 + "rep ; movsq\n\t" 38 + "movq %4,%%rcx\n\t" 39 + "rep ; movsb\n\t" 40 + : "=&c" (d0), "=&D" (d1), "=&S" (d2) 41 + : "0" (n >> 3), "g" (n & 7), "1" (dest), "2" (src) 42 + : "memory"); 43 + 44 + return dest; 45 + } 46 + #endif