Commit | Line | Data |
---|---|---|
8d379dad JB |
1 | #include <linux/linkage.h> |
2 | #include <asm/dwarf2.h> | |
3 | ||
1da177e4 LT |
4 | /* |
5 | * Zero a page. | |
6 | * rdi page | |
7 | */ | |
8d379dad JB |
8 | ALIGN |
9 | clear_page_c: | |
10 | CFI_STARTPROC | |
11 | movl $4096/8,%ecx | |
12 | xorl %eax,%eax | |
13 | rep stosq | |
14 | ret | |
15 | CFI_ENDPROC | |
16 | ENDPROC(clear_page) | |
17 | ||
18 | ENTRY(clear_page) | |
19 | CFI_STARTPROC | |
7bcd3f34 AK |
20 | xorl %eax,%eax |
21 | movl $4096/64,%ecx | |
22 | .p2align 4 | |
23 | .Lloop: | |
24 | decl %ecx | |
25 | #define PUT(x) movq %rax,x*8(%rdi) | |
26 | movq %rax,(%rdi) | |
27 | PUT(1) | |
28 | PUT(2) | |
29 | PUT(3) | |
30 | PUT(4) | |
31 | PUT(5) | |
32 | PUT(6) | |
33 | PUT(7) | |
34 | leaq 64(%rdi),%rdi | |
35 | jnz .Lloop | |
36 | nop | |
37 | ret | |
8d379dad JB |
38 | CFI_ENDPROC |
39 | .Lclear_page_end: | |
40 | ENDPROC(clear_page) | |
7bcd3f34 AK |
41 | |
42 | /* Some CPUs run faster using the string instructions. | |
43 | It is also a lot simpler. Use this when possible */ | |
44 | ||
45 | #include <asm/cpufeature.h> | |
46 | ||
8d379dad JB |
47 | .section .altinstr_replacement,"ax" |
48 | 1: .byte 0xeb /* jmp <disp8> */ | |
49 | .byte (clear_page_c - clear_page) - (2f - 1b) /* offset */ | |
50 | 2: | |
51 | .previous | |
7bcd3f34 AK |
52 | .section .altinstructions,"a" |
53 | .align 8 | |
8d379dad JB |
54 | .quad clear_page |
55 | .quad 1b | |
56 | .byte X86_FEATURE_REP_GOOD | |
57 | .byte .Lclear_page_end - clear_page | |
58 | .byte 2b - 1b | |
7bcd3f34 | 59 | .previous |