blob: ef50c84e8b4bd6a517417d84c9275240ae19dd0c [file] [log] [blame]
H. Peter Anvin5be86562007-07-11 12:18:41 -07001/* ----------------------------------------------------------------------- *
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/*
H. Peter Anvin5be86562007-07-11 12:18:41 -070012 * Memory copy routines
13 */
14
15 .code16gcc
16 .text
17
18 .globl memcpy
19 .type memcpy, @function
20memcpy:
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 .size memcpy, .-memcpy
35
36 .globl memset
37 .type memset, @function
38memset:
39 pushw %di
40 movw %ax, %di
41 movzbl %dl, %eax
42 imull $0x01010101,%eax
43 pushw %cx
44 shrw $2, %cx
45 rep; stosl
46 popw %cx
47 andw $3, %cx
48 rep; stosb
49 popw %di
50 ret
51 .size memset, .-memset
52
53 .globl copy_from_fs
54 .type copy_from_fs, @function
55copy_from_fs:
56 pushw %ds
57 pushw %fs
58 popw %ds
59 call memcpy
60 popw %ds
61 ret
62 .size copy_from_fs, .-copy_from_fs
63
64 .globl copy_to_fs
65 .type copy_to_fs, @function
66copy_to_fs:
67 pushw %es
68 pushw %fs
69 popw %es
70 call memcpy
71 popw %es
72 ret
73 .size copy_to_fs, .-copy_to_fs
74
75#if 0 /* Not currently used, but can be enabled as needed */
76
77 .globl copy_from_gs
78 .type copy_from_gs, @function
79copy_from_gs:
80 pushw %ds
81 pushw %gs
82 popw %ds
83 call memcpy
84 popw %ds
85 ret
86 .size copy_from_gs, .-copy_from_gs
87 .globl copy_to_gs
88
89 .type copy_to_gs, @function
90copy_to_gs:
91 pushw %es
92 pushw %gs
93 popw %es
94 call memcpy
95 popw %es
96 ret
97 .size copy_to_gs, .-copy_to_gs
98
99#endif