root/arch/powerpc/lib/string_32.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 
   3 /*
   4  * String handling functions for PowerPC32
   5  *
   6  * Copyright (C) 1996 Paul Mackerras.
   7  *
   8  */
   9 
  10 #include <asm/ppc_asm.h>
  11 #include <asm/export.h>
  12 #include <asm/cache.h>
  13 
  14         .text
  15 
  16 CACHELINE_BYTES = L1_CACHE_BYTES
  17 LG_CACHELINE_BYTES = L1_CACHE_SHIFT
  18 CACHELINE_MASK = (L1_CACHE_BYTES-1)
  19 
  20 _GLOBAL(__arch_clear_user)
  21 /*
  22  * Use dcbz on the complete cache lines in the destination
  23  * to set them to zero.  This requires that the destination
  24  * area is cacheable.
  25  */
  26         cmplwi  cr0, r4, 4
  27         mr      r10, r3
  28         li      r3, 0
  29         blt     7f
  30 
  31 11:     stw     r3, 0(r10)
  32         beqlr
  33         andi.   r0, r10, 3
  34         add     r11, r0, r4
  35         subf    r6, r0, r10
  36 
  37         clrlwi  r7, r6, 32 - LG_CACHELINE_BYTES
  38         add     r8, r7, r11
  39         srwi    r9, r8, LG_CACHELINE_BYTES
  40         addic.  r9, r9, -1      /* total number of complete cachelines */
  41         ble     2f
  42         xori    r0, r7, CACHELINE_MASK & ~3
  43         srwi.   r0, r0, 2
  44         beq     3f
  45         mtctr   r0
  46 4:      stwu    r3, 4(r6)
  47         bdnz    4b
  48 3:      mtctr   r9
  49         li      r7, 4
  50 10:     dcbz    r7, r6
  51         addi    r6, r6, CACHELINE_BYTES
  52         bdnz    10b
  53         clrlwi  r11, r8, 32 - LG_CACHELINE_BYTES
  54         addi    r11, r11, 4
  55 
  56 2:      srwi    r0 ,r11 ,2
  57         mtctr   r0
  58         bdz     6f
  59 1:      stwu    r3, 4(r6)
  60         bdnz    1b
  61 6:      andi.   r11, r11, 3
  62         beqlr
  63         mtctr   r11
  64         addi    r6, r6, 3
  65 8:      stbu    r3, 1(r6)
  66         bdnz    8b
  67         blr
  68 
  69 7:      cmpwi   cr0, r4, 0
  70         beqlr
  71         mtctr   r4
  72         addi    r6, r10, -1
  73 9:      stbu    r3, 1(r6)
  74         bdnz    9b
  75         blr
  76 
  77 90:     mr      r3, r4
  78         blr
  79 91:     add     r3, r10, r4
  80         subf    r3, r6, r3
  81         blr
  82 
  83         EX_TABLE(11b, 90b)
  84         EX_TABLE(4b, 91b)
  85         EX_TABLE(10b, 91b)
  86         EX_TABLE(1b, 91b)
  87         EX_TABLE(8b, 91b)
  88         EX_TABLE(9b, 91b)
  89 
  90 EXPORT_SYMBOL(__arch_clear_user)

/* [<][>][^][v][top][bottom][index][help] */