/* ----------------------------------------------------------------------- * * * Copyright (C) 1991, 1992 Linus Torvalds * Copyright 2007 rPath, Inc. - All Rights Reserved * * This file is part of the Linux kernel, and is made available under * the terms of the GNU General Public License version 2. * * ----------------------------------------------------------------------- */ #include <linux/linkage.h> /* * Memory copy routines */ .code16gcc .text GLOBAL(memcpy) pushw %si pushw %di movw %ax, %di movw %dx, %si pushw %cx shrw $2, %cx rep; movsl popw %cx andw $3, %cx rep; movsb popw %di popw %si ret ENDPROC(memcpy) GLOBAL(memset) pushw %di movw %ax, %di movzbl %dl, %eax imull $0x01010101,%eax pushw %cx shrw $2, %cx rep; stosl popw %cx andw $3, %cx rep; stosb popw %di ret ENDPROC(memset) GLOBAL(copy_from_fs) pushw %ds pushw %fs popw %ds call memcpy popw %ds ret ENDPROC(copy_from_fs) GLOBAL(copy_to_fs) pushw %es pushw %fs popw %es call memcpy popw %es ret ENDPROC(copy_to_fs) #if 0 /* Not currently used, but can be enabled as needed */ GLOBAL(copy_from_gs) pushw %ds pushw %gs popw %ds call memcpy popw %ds ret ENDPROC(copy_from_gs) GLOBAL(copy_to_gs) pushw %es pushw %gs popw %es call memcpy popw %es ret ENDPROC(copy_to_gs) #endif