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 | * ----------------------------------------------------------------------- */ |
8 | |
9 | #include <linux/linkage.h> |
10 | |
11 | /* |
12 | * Memory copy routines |
13 | */ |
14 | |
15 | .code16 |
16 | .text |
17 | |
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) |
33 | |
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) |
48 | |
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) |
57 | |
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) |
66 | |