/* * Zero a page. * rdi page */ .globl clear_page .p2align 4 clear_page: xorl %eax,%eax movl $4096/64,%ecx .p2align 4 .Lloop: decl %ecx #define PUT(x) movq %rax,x*8(%rdi) movq %rax,(%rdi) PUT(1) PUT(2) PUT(3) PUT(4) PUT(5) PUT(6) PUT(7) leaq 64(%rdi),%rdi jnz .Lloop nop ret clear_page_end: /* Some CPUs run faster using the string instructions. It is also a lot simpler. Use this when possible */ #include .section .altinstructions,"a" .align 8 .quad clear_page .quad clear_page_c .byte X86_FEATURE_REP_GOOD .byte clear_page_end-clear_page .byte clear_page_c_end-clear_page_c .previous .section .altinstr_replacement,"ax" clear_page_c: movl $4096/8,%ecx xorl %eax,%eax rep stosq ret clear_page_c_end: .previous