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