1
2
3
4
5
6
7
8
9 #include <linux/linkage.h>
10
11
12
13
14
15 .code16
16 .text
17
18 GLOBAL(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 ENDPROC(memcpy)
33
34 GLOBAL(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 ENDPROC(memset)
48
49 GLOBAL(copy_from_fs)
50 pushw %ds
51 pushw %fs
52 popw %ds
53 calll memcpy
54 popw %ds
55 retl
56 ENDPROC(copy_from_fs)
57
58 GLOBAL(copy_to_fs)
59 pushw %es
60 pushw %fs
61 popw %es
62 calll memcpy
63 popw %es
64 retl
65 ENDPROC(copy_to_fs)