~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/lib/copypage_power7.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 /*
  3  *
  4  * Copyright (C) IBM Corporation, 2012
  5  *
  6  * Author: Anton Blanchard <anton@au.ibm.com>
  7  */
  8 #include <asm/page.h>
  9 #include <asm/ppc_asm.h>
 10 
 11 _GLOBAL(copypage_power7)
 12         /*
 13          * We prefetch both the source and destination using enhanced touch
 14          * instructions. We use a stream ID of 0 for the load side and
 15          * 1 for the store side. Since source and destination are page
 16          * aligned we don't need to clear the bottom 7 bits of either
 17          * address.
 18          */
 19         ori     r9,r3,1         /* stream=1 => to */
 20 
 21 #ifdef CONFIG_PPC_64K_PAGES
 22         lis     r7,0x0E01       /* depth=7
 23                                  * units/cachelines=512 */
 24 #else
 25         lis     r7,0x0E00       /* depth=7 */
 26         ori     r7,r7,0x1000    /* units/cachelines=32 */
 27 #endif
 28         ori     r10,r7,1        /* stream=1 */
 29 
 30         DCBT_SETUP_STREAMS(r4, r7, r9, r10, r8)
 31 
 32 #ifdef CONFIG_ALTIVEC
 33         mflr    r0
 34         std     r3,-STACKFRAMESIZE+STK_REG(R31)(r1)
 35         std     r4,-STACKFRAMESIZE+STK_REG(R30)(r1)
 36         std     r0,16(r1)
 37         stdu    r1,-STACKFRAMESIZE(r1)
 38         bl      CFUNC(enter_vmx_ops)
 39         cmpwi   r3,0
 40         ld      r0,STACKFRAMESIZE+16(r1)
 41         ld      r3,STK_REG(R31)(r1)
 42         ld      r4,STK_REG(R30)(r1)
 43         mtlr    r0
 44 
 45         li      r0,(PAGE_SIZE/128)
 46         mtctr   r0
 47 
 48         beq     .Lnonvmx_copy
 49 
 50         addi    r1,r1,STACKFRAMESIZE
 51 
 52         li      r6,16
 53         li      r7,32
 54         li      r8,48
 55         li      r9,64
 56         li      r10,80
 57         li      r11,96
 58         li      r12,112
 59 
 60         .align  5
 61 1:      lvx     v7,0,r4
 62         lvx     v6,r4,r6
 63         lvx     v5,r4,r7
 64         lvx     v4,r4,r8
 65         lvx     v3,r4,r9
 66         lvx     v2,r4,r10
 67         lvx     v1,r4,r11
 68         lvx     v0,r4,r12
 69         addi    r4,r4,128
 70         stvx    v7,0,r3
 71         stvx    v6,r3,r6
 72         stvx    v5,r3,r7
 73         stvx    v4,r3,r8
 74         stvx    v3,r3,r9
 75         stvx    v2,r3,r10
 76         stvx    v1,r3,r11
 77         stvx    v0,r3,r12
 78         addi    r3,r3,128
 79         bdnz    1b
 80 
 81         b       CFUNC(exit_vmx_ops)             /* tail call optimise */
 82 
 83 #else
 84         li      r0,(PAGE_SIZE/128)
 85         mtctr   r0
 86 
 87         stdu    r1,-STACKFRAMESIZE(r1)
 88 #endif
 89 
 90 .Lnonvmx_copy:
 91         std     r14,STK_REG(R14)(r1)
 92         std     r15,STK_REG(R15)(r1)
 93         std     r16,STK_REG(R16)(r1)
 94         std     r17,STK_REG(R17)(r1)
 95         std     r18,STK_REG(R18)(r1)
 96         std     r19,STK_REG(R19)(r1)
 97         std     r20,STK_REG(R20)(r1)
 98 
 99 1:      ld      r0,0(r4)
100         ld      r5,8(r4)
101         ld      r6,16(r4)
102         ld      r7,24(r4)
103         ld      r8,32(r4)
104         ld      r9,40(r4)
105         ld      r10,48(r4)
106         ld      r11,56(r4)
107         ld      r12,64(r4)
108         ld      r14,72(r4)
109         ld      r15,80(r4)
110         ld      r16,88(r4)
111         ld      r17,96(r4)
112         ld      r18,104(r4)
113         ld      r19,112(r4)
114         ld      r20,120(r4)
115         addi    r4,r4,128
116         std     r0,0(r3)
117         std     r5,8(r3)
118         std     r6,16(r3)
119         std     r7,24(r3)
120         std     r8,32(r3)
121         std     r9,40(r3)
122         std     r10,48(r3)
123         std     r11,56(r3)
124         std     r12,64(r3)
125         std     r14,72(r3)
126         std     r15,80(r3)
127         std     r16,88(r3)
128         std     r17,96(r3)
129         std     r18,104(r3)
130         std     r19,112(r3)
131         std     r20,120(r3)
132         addi    r3,r3,128
133         bdnz    1b
134 
135         ld      r14,STK_REG(R14)(r1)
136         ld      r15,STK_REG(R15)(r1)
137         ld      r16,STK_REG(R16)(r1)
138         ld      r17,STK_REG(R17)(r1)
139         ld      r18,STK_REG(R18)(r1)
140         ld      r19,STK_REG(R19)(r1)
141         ld      r20,STK_REG(R20)(r1)
142         addi    r1,r1,STACKFRAMESIZE
143         blr

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php