xref: /kvmtool/x86/bios/memcpy.c (revision 9759db0dd916586ff022f5d16bde5ab52cc05e83)
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