1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun/* NG4copy_page.S: Niagara-4 optimized copy page. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2012 (davem@davemloft.net) 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun#include <asm/asi.h> 8*4882a593Smuzhiyun#include <asm/page.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun .text 11*4882a593Smuzhiyun .align 32 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun .register %g2, #scratch 14*4882a593Smuzhiyun .register %g3, #scratch 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun .globl NG4copy_user_page 17*4882a593SmuzhiyunNG4copy_user_page: /* %o0=dest, %o1=src, %o2=vaddr */ 18*4882a593Smuzhiyun prefetch [%o1 + 0x000], #n_reads_strong 19*4882a593Smuzhiyun prefetch [%o1 + 0x040], #n_reads_strong 20*4882a593Smuzhiyun prefetch [%o1 + 0x080], #n_reads_strong 21*4882a593Smuzhiyun prefetch [%o1 + 0x0c0], #n_reads_strong 22*4882a593Smuzhiyun set PAGE_SIZE, %g7 23*4882a593Smuzhiyun prefetch [%o1 + 0x100], #n_reads_strong 24*4882a593Smuzhiyun prefetch [%o1 + 0x140], #n_reads_strong 25*4882a593Smuzhiyun prefetch [%o1 + 0x180], #n_reads_strong 26*4882a593Smuzhiyun prefetch [%o1 + 0x1c0], #n_reads_strong 27*4882a593Smuzhiyun1: 28*4882a593Smuzhiyun ldx [%o1 + 0x00], %o2 29*4882a593Smuzhiyun subcc %g7, 0x40, %g7 30*4882a593Smuzhiyun ldx [%o1 + 0x08], %o3 31*4882a593Smuzhiyun ldx [%o1 + 0x10], %o4 32*4882a593Smuzhiyun ldx [%o1 + 0x18], %o5 33*4882a593Smuzhiyun ldx [%o1 + 0x20], %g1 34*4882a593Smuzhiyun stxa %o2, [%o0] ASI_ST_BLKINIT_MRU_P 35*4882a593Smuzhiyun add %o0, 0x08, %o0 36*4882a593Smuzhiyun ldx [%o1 + 0x28], %g2 37*4882a593Smuzhiyun stxa %o3, [%o0] ASI_ST_BLKINIT_MRU_P 38*4882a593Smuzhiyun add %o0, 0x08, %o0 39*4882a593Smuzhiyun ldx [%o1 + 0x30], %g3 40*4882a593Smuzhiyun stxa %o4, [%o0] ASI_ST_BLKINIT_MRU_P 41*4882a593Smuzhiyun add %o0, 0x08, %o0 42*4882a593Smuzhiyun ldx [%o1 + 0x38], %o2 43*4882a593Smuzhiyun add %o1, 0x40, %o1 44*4882a593Smuzhiyun stxa %o5, [%o0] ASI_ST_BLKINIT_MRU_P 45*4882a593Smuzhiyun add %o0, 0x08, %o0 46*4882a593Smuzhiyun stxa %g1, [%o0] ASI_ST_BLKINIT_MRU_P 47*4882a593Smuzhiyun add %o0, 0x08, %o0 48*4882a593Smuzhiyun stxa %g2, [%o0] ASI_ST_BLKINIT_MRU_P 49*4882a593Smuzhiyun add %o0, 0x08, %o0 50*4882a593Smuzhiyun stxa %g3, [%o0] ASI_ST_BLKINIT_MRU_P 51*4882a593Smuzhiyun add %o0, 0x08, %o0 52*4882a593Smuzhiyun stxa %o2, [%o0] ASI_ST_BLKINIT_MRU_P 53*4882a593Smuzhiyun add %o0, 0x08, %o0 54*4882a593Smuzhiyun bne,pt %icc, 1b 55*4882a593Smuzhiyun prefetch [%o1 + 0x200], #n_reads_strong 56*4882a593Smuzhiyun retl 57*4882a593Smuzhiyun membar #StoreLoad | #StoreStore 58*4882a593Smuzhiyun .size NG4copy_user_page,.-NG4copy_user_page 59