1 #include "asm/bios/memcpy.h"
2
3 /*
4 * Copy memory area in 16-bit real mode.
5 */
memcpy16(u16 dst_seg,void * dst,u16 src_seg,const void * src,size_t len)6 void memcpy16(u16 dst_seg, void *dst, u16 src_seg, const void *src, size_t len)
7 {
8 __asm__ __volatile__ (
9 "pushw %%ds \n"
10 "pushw %%es \n"
11 "movw %[src_seg], %%ds \n"
12 "movw %[dst_seg], %%es \n"
13 "rep movsb %%ds:(%%si), %%es:(%%di) \n"
14 "popw %%es \n"
15 "popw %%ds \n"
16 :
17 : "S"(src),
18 "D"(dst),
19 "c"(len),
20 [src_seg] "r"(src_seg),
21 [dst_seg] "r"(dst_seg)
22 : "cc", "memory");
23 }
24