WIP FPC-III support
[linux/fpc-iii.git] / arch / x86 / boot / copy.S
blob6afd05e819d26831d739bb6c6aba27f4ba0c2137
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* ----------------------------------------------------------------------- *
3  *
4  *   Copyright (C) 1991, 1992 Linus Torvalds
5  *   Copyright 2007 rPath, Inc. - All Rights Reserved
6  *
7  * ----------------------------------------------------------------------- */
9 #include <linux/linkage.h>
12  * Memory copy routines
13  */
15         .code16
16         .text
18 SYM_FUNC_START_NOALIGN(memcpy)
19         pushw   %si
20         pushw   %di
21         movw    %ax, %di
22         movw    %dx, %si
23         pushw   %cx
24         shrw    $2, %cx
25         rep; movsl
26         popw    %cx
27         andw    $3, %cx
28         rep; movsb
29         popw    %di
30         popw    %si
31         retl
32 SYM_FUNC_END(memcpy)
34 SYM_FUNC_START_NOALIGN(memset)
35         pushw   %di
36         movw    %ax, %di
37         movzbl  %dl, %eax
38         imull   $0x01010101,%eax
39         pushw   %cx
40         shrw    $2, %cx
41         rep; stosl
42         popw    %cx
43         andw    $3, %cx
44         rep; stosb
45         popw    %di
46         retl
47 SYM_FUNC_END(memset)
49 SYM_FUNC_START_NOALIGN(copy_from_fs)
50         pushw   %ds
51         pushw   %fs
52         popw    %ds
53         calll   memcpy
54         popw    %ds
55         retl
56 SYM_FUNC_END(copy_from_fs)
58 SYM_FUNC_START_NOALIGN(copy_to_fs)
59         pushw   %es
60         pushw   %fs
61         popw    %es
62         calll   memcpy
63         popw    %es
64         retl
65 SYM_FUNC_END(copy_to_fs)