Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* NG4memset.S: Niagara-4 optimized memset/bzero.
0003  *
0004  * Copyright (C) 2012 David S. Miller (davem@davemloft.net)
0005  */
0006 
0007 #include <asm/asi.h>
0008 
0009     .register   %g2, #scratch
0010     .register   %g3, #scratch
0011 
0012     .text
0013     .align      32
0014     .globl      NG4memset
0015 NG4memset:
0016     andcc       %o1, 0xff, %o4
0017     be,pt       %icc, 1f
0018      mov        %o2, %o1
0019     sllx        %o4, 8, %g1
0020     or      %g1, %o4, %o2
0021     sllx        %o2, 16, %g1
0022     or      %g1, %o2, %o2
0023     sllx        %o2, 32, %g1
0024     ba,pt       %icc, 1f
0025      or     %g1, %o2, %o4
0026     .size       NG4memset,.-NG4memset
0027 
0028     .align      32
0029     .globl      NG4bzero
0030 NG4bzero:
0031     clr     %o4
0032 1:  cmp     %o1, 16
0033     ble     %icc, .Ltiny
0034      mov        %o0, %o3
0035     sub     %g0, %o0, %g1
0036     and     %g1, 0x7, %g1
0037     brz,pt      %g1, .Laligned8
0038      sub        %o1, %g1, %o1
0039 1:  stb     %o4, [%o0 + 0x00]
0040     subcc       %g1, 1, %g1
0041     bne,pt      %icc, 1b
0042      add        %o0, 1, %o0
0043 .Laligned8:
0044     cmp     %o1, 64 + (64 - 8)
0045     ble     .Lmedium
0046      sub        %g0, %o0, %g1
0047     andcc       %g1, (64 - 1), %g1
0048     brz,pn      %g1, .Laligned64
0049      sub        %o1, %g1, %o1
0050 1:  stx     %o4, [%o0 + 0x00]
0051     subcc       %g1, 8, %g1
0052     bne,pt      %icc, 1b
0053      add        %o0, 0x8, %o0
0054 .Laligned64:
0055     andn        %o1, 64 - 1, %g1
0056     sub     %o1, %g1, %o1
0057     brnz,pn     %o4, .Lnon_bzero_loop
0058      mov        0x20, %g2
0059 1:  stxa        %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
0060     subcc       %g1, 0x40, %g1
0061     stxa        %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
0062     bne,pt      %icc, 1b
0063      add        %o0, 0x40, %o0
0064 .Lpostloop:
0065     cmp     %o1, 8
0066     bl,pn       %icc, .Ltiny
0067      membar     #StoreStore|#StoreLoad
0068 .Lmedium:
0069     andn        %o1, 0x7, %g1
0070     sub     %o1, %g1, %o1
0071 1:  stx     %o4, [%o0 + 0x00]
0072     subcc       %g1, 0x8, %g1
0073     bne,pt      %icc, 1b
0074      add        %o0, 0x08, %o0
0075     andcc       %o1, 0x4, %g1
0076     be,pt       %icc, .Ltiny
0077      sub        %o1, %g1, %o1
0078     stw     %o4, [%o0 + 0x00]
0079     add     %o0, 0x4, %o0
0080 .Ltiny:
0081     cmp     %o1, 0
0082     be,pn       %icc, .Lexit
0083 1:   subcc      %o1, 1, %o1
0084     stb     %o4, [%o0 + 0x00]
0085     bne,pt      %icc, 1b
0086      add        %o0, 1, %o0
0087 .Lexit:
0088     retl
0089      mov        %o3, %o0
0090 .Lnon_bzero_loop:
0091     mov     0x08, %g3
0092     mov     0x28, %o5
0093 1:  stxa        %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
0094     subcc       %g1, 0x40, %g1
0095     stxa        %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
0096     stxa        %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
0097     stxa        %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
0098     add     %o0, 0x10, %o0
0099     stxa        %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
0100     stxa        %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
0101     stxa        %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
0102     stxa        %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
0103     bne,pt      %icc, 1b
0104      add        %o0, 0x30, %o0
0105     ba,a,pt     %icc, .Lpostloop
0106      nop
0107     .size       NG4bzero,.-NG4bzero