Linux 4.9.243
[linux/fpc-iii.git] / arch / x86 / boot / copy.S
blob1eb7d298b47d5466d39e1f0ae8804dc4ebe172bb
1 /* ----------------------------------------------------------------------- *
2  *
3  *   Copyright (C) 1991, 1992 Linus Torvalds
4  *   Copyright 2007 rPath, Inc. - All Rights Reserved
5  *
6  *   This file is part of the Linux kernel, and is made available under
7  *   the terms of the GNU General Public License version 2.
8  *
9  * ----------------------------------------------------------------------- */
11 #include <linux/linkage.h>
14  * Memory copy routines
15  */
17         .code16
18         .text
20 GLOBAL(memcpy)
21         pushw   %si
22         pushw   %di
23         movw    %ax, %di
24         movw    %dx, %si
25         pushw   %cx
26         shrw    $2, %cx
27         rep; movsl
28         popw    %cx
29         andw    $3, %cx
30         rep; movsb
31         popw    %di
32         popw    %si
33         retl
34 ENDPROC(memcpy)
36 GLOBAL(memset)
37         pushw   %di
38         movw    %ax, %di
39         movzbl  %dl, %eax
40         imull   $0x01010101,%eax
41         pushw   %cx
42         shrw    $2, %cx
43         rep; stosl
44         popw    %cx
45         andw    $3, %cx
46         rep; stosb
47         popw    %di
48         retl
49 ENDPROC(memset)
51 GLOBAL(copy_from_fs)
52         pushw   %ds
53         pushw   %fs
54         popw    %ds
55         calll   memcpy
56         popw    %ds
57         retl
58 ENDPROC(copy_from_fs)
60 GLOBAL(copy_to_fs)
61         pushw   %es
62         pushw   %fs
63         popw    %es
64         calll   memcpy
65         popw    %es
66         retl
67 ENDPROC(copy_to_fs)
69 #if 0 /* Not currently used, but can be enabled as needed */
70 GLOBAL(copy_from_gs)
71         pushw   %ds
72         pushw   %gs
73         popw    %ds
74         calll   memcpy
75         popw    %ds
76         retl
77 ENDPROC(copy_from_gs)
79 GLOBAL(copy_to_gs)
80         pushw   %es
81         pushw   %gs
82         popw    %es
83         calll   memcpy
84         popw    %es
85         retl
86 ENDPROC(copy_to_gs)
87 #endif