OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [x86/] [lib/] [clear_page_64.S] - Rev 3

Compare with Previous | Blame | View Log

#include <linux/linkage.h>
#include <asm/dwarf2.h>

/*
 * Zero a page.         
 * rdi  page
 */                     
        ALIGN
clear_page_c:
        CFI_STARTPROC
        movl $4096/8,%ecx
        xorl %eax,%eax
        rep stosq
        ret
        CFI_ENDPROC
ENDPROC(clear_page)

ENTRY(clear_page)
        CFI_STARTPROC
        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
        CFI_ENDPROC
.Lclear_page_end:
ENDPROC(clear_page)

        /* Some CPUs run faster using the string instructions.
           It is also a lot simpler. Use this when possible */

#include <asm/cpufeature.h>

        .section .altinstr_replacement,"ax"
1:      .byte 0xeb                                      /* jmp <disp8> */
        .byte (clear_page_c - clear_page) - (2f - 1b)   /* offset */
2:
        .previous
        .section .altinstructions,"a"
        .align 8
        .quad clear_page
        .quad 1b
        .byte X86_FEATURE_REP_GOOD
        .byte .Lclear_page_end - clear_page
        .byte 2b - 1b
        .previous

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.