Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/x86/boot/copy.S
10818 views
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
* ----------------------------------------------------------------------- */
10
11
#include <linux/linkage.h>
12
13
/*
14
* Memory copy routines
15
*/
16
17
.code16gcc
18
.text
19
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
ret
34
ENDPROC(memcpy)
35
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
ret
49
ENDPROC(memset)
50
51
GLOBAL(copy_from_fs)
52
pushw %ds
53
pushw %fs
54
popw %ds
55
call memcpy
56
popw %ds
57
ret
58
ENDPROC(copy_from_fs)
59
60
GLOBAL(copy_to_fs)
61
pushw %es
62
pushw %fs
63
popw %es
64
call memcpy
65
popw %es
66
ret
67
ENDPROC(copy_to_fs)
68
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
call memcpy
75
popw %ds
76
ret
77
ENDPROC(copy_from_gs)
78
79
GLOBAL(copy_to_gs)
80
pushw %es
81
pushw %gs
82
popw %es
83
call memcpy
84
popw %es
85
ret
86
ENDPROC(copy_to_gs)
87
#endif
88
89