copy_page.s
来自「这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自」· S 代码 · 共 71 行
S
71 行
#include <linux/linkage.h> #include <linux/config.h> #ifdef CONFIG_PREEMPT #warning "check your fpu context saving!" #endif/* * Copy a page. * * rdi destination page * rsi source page * * src/dst must be aligned to 16 bytes. * * Warning: in case of super lazy FP save this needs to be preempt_stop */ .globl copy_page .p2aligncopy_page: prefetchnta (%rsi) prefetchnta 64(%rsi) movq %rsp,%rax subq $16*4,%rsp andq $~15,%rsp movdqa %xmm0,(%rsp) movdqa %xmm1,16(%rsp) movdqa %xmm2,32(%rsp) movdqa %xmm3,48(%rsp) movl $(4096/128)-2,%ecx movl $128,%edxloop: prefetchnta (%rsi) prefetchnta 64(%rsi) loop_no_prefetch: movdqa (%rsi),%xmm0 movdqa 16(%rsi),%xmm1 movdqa 32(%rsi),%xmm2 movdqa 48(%rsi),%xmm3 movntdq %xmm0,(%rdi) movntdq %xmm1,16(%rdi) movntdq %xmm2,32(%rdi) movntdq %xmm3,48(%rdi) movdqa 64(%rsi),%xmm0 movdqa 80(%rsi),%xmm1 movdqa 96(%rsi),%xmm2 movdqa 112(%rsi),%xmm3 movntdq %xmm0,64(%rdi) movntdq %xmm1,80(%rdi) movntdq %xmm2,96(%rdi) movntdq %xmm3,112(%rdi) addq %rdx,%rdi addq %rdx,%rsi decl %ecx jns loop cmpl $-1,%ecx je loop_no_prefetch sfence movdqa (%rsp),%xmm0 movdqa 16(%rsp),%xmm1 movdqa 32(%rsp),%xmm2 movdqa 48(%rsp),%xmm3 movq %rax,%rsp ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?