Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/boot/copy.S
26439 views
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
67