| #include "asm/bios/memcpy.h" | |
| /* | |
| * Copy memory area in 16-bit real mode. | |
| */ | |
| void memcpy16(u16 dst_seg, void *dst, u16 src_seg, const void *src, size_t len) | |
| { | |
| __asm__ __volatile__ ( | |
| "pushw %%ds \n" | |
| "pushw %%es \n" | |
| "movw %[src_seg], %%ds \n" | |
| "movw %[dst_seg], %%es \n" | |
| "rep movsb %%ds:(%%si), %%es:(%%di) \n" | |
| "popw %%es \n" | |
| "popw %%ds \n" | |
| : | |
| : "S"(src), | |
| "D"(dst), | |
| "c"(len), | |
| [src_seg] "r"(src_seg), | |
| [dst_seg] "r"(dst_seg) | |
| : "cc", "memory"); | |
| } |