From 57f0f512b273f60d52568b8c6b77e17f5636edc0 Mon Sep 17 00:00:00 2001 From: André Fabian Silva Delgado Date: Wed, 5 Aug 2015 17:04:01 -0300 Subject: Initial import --- arch/x86/boot/copy.S | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 arch/x86/boot/copy.S (limited to 'arch/x86/boot/copy.S') diff --git a/arch/x86/boot/copy.S b/arch/x86/boot/copy.S new file mode 100644 index 000000000..1eb7d298b --- /dev/null +++ b/arch/x86/boot/copy.S @@ -0,0 +1,87 @@ +/* ----------------------------------------------------------------------- * + * + * 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 + +/* + * Memory copy routines + */ + + .code16 + .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 + retl +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 + retl +ENDPROC(memset) + +GLOBAL(copy_from_fs) + pushw %ds + pushw %fs + popw %ds + calll memcpy + popw %ds + retl +ENDPROC(copy_from_fs) + +GLOBAL(copy_to_fs) + pushw %es + pushw %fs + popw %es + calll memcpy + popw %es + retl +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 + calll memcpy + popw %ds + retl +ENDPROC(copy_from_gs) + +GLOBAL(copy_to_gs) + pushw %es + pushw %gs + popw %es + calll memcpy + popw %es + retl +ENDPROC(copy_to_gs) +#endif -- cgit v1.2.3-54-g00ecf