xref: /xen-4.10.0-shim-comet/xen/arch/x86/copy_page.S
  • Home
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • current directory
1        .file __FILE__
2
3#include <asm/page.h>
4
5#define src_reg %rsi
6#define dst_reg %rdi
7#define WORD_SIZE 8
8#define tmp1_reg %r8
9#define tmp2_reg %r9
10#define tmp3_reg %r10
11#define tmp4_reg %r11
12
13ENTRY(copy_page_sse2)
14        mov     $PAGE_SIZE/(4*WORD_SIZE)-3, %ecx
15
16        prefetchnta 2*4*WORD_SIZE(src_reg)
17        mov     (src_reg), tmp1_reg
18        mov     WORD_SIZE(src_reg), tmp2_reg
19        mov     2*WORD_SIZE(src_reg), tmp3_reg
20        mov     3*WORD_SIZE(src_reg), tmp4_reg
21
220:      prefetchnta 3*4*WORD_SIZE(src_reg)
231:      add     $4*WORD_SIZE, src_reg
24        movnti  tmp1_reg, (dst_reg)
25        mov     (src_reg), tmp1_reg
26        dec     %ecx
27        movnti  tmp2_reg, WORD_SIZE(dst_reg)
28        mov     WORD_SIZE(src_reg), tmp2_reg
29        movnti  tmp3_reg, 2*WORD_SIZE(dst_reg)
30        mov     2*WORD_SIZE(src_reg), tmp3_reg
31        movnti  tmp4_reg, 3*WORD_SIZE(dst_reg)
32        lea     4*WORD_SIZE(dst_reg), dst_reg
33        mov     3*WORD_SIZE(src_reg), tmp4_reg
34        jg      0b
35        jpe     1b
36
37        movnti  tmp1_reg, (dst_reg)
38        movnti  tmp2_reg, WORD_SIZE(dst_reg)
39        movnti  tmp3_reg, 2*WORD_SIZE(dst_reg)
40        movnti  tmp4_reg, 3*WORD_SIZE(dst_reg)
41
42        sfence
43        ret
44

Last Index update Sun Aug 20 00:18:20 CST 2023