hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/* SPDX-License-Identifier: GPL-2.0 */
/* NG4memset.S: Niagara-4 optimized memset/bzero.
 *
 * Copyright (C) 2012 David S. Miller (davem@davemloft.net)
 */
 
#include <asm/asi.h>
 
   .register    %g2, #scratch
   .register    %g3, #scratch
 
   .text
   .align        32
   .globl        NG4memset
NG4memset:
   andcc        %o1, 0xff, %o4
   be,pt        %icc, 1f
    mov        %o2, %o1
   sllx        %o4, 8, %g1
   or        %g1, %o4, %o2
   sllx        %o2, 16, %g1
   or        %g1, %o2, %o2
   sllx        %o2, 32, %g1
   ba,pt        %icc, 1f
    or        %g1, %o2, %o4
   .size        NG4memset,.-NG4memset
 
   .align        32
   .globl        NG4bzero
NG4bzero:
   clr        %o4
1:    cmp        %o1, 16
   ble        %icc, .Ltiny
    mov        %o0, %o3
   sub        %g0, %o0, %g1
   and        %g1, 0x7, %g1
   brz,pt        %g1, .Laligned8
    sub        %o1, %g1, %o1
1:    stb        %o4, [%o0 + 0x00]
   subcc        %g1, 1, %g1
   bne,pt        %icc, 1b
    add        %o0, 1, %o0
.Laligned8:
   cmp        %o1, 64 + (64 - 8)
   ble        .Lmedium
    sub        %g0, %o0, %g1
   andcc        %g1, (64 - 1), %g1
   brz,pn        %g1, .Laligned64
    sub        %o1, %g1, %o1
1:    stx        %o4, [%o0 + 0x00]
   subcc        %g1, 8, %g1
   bne,pt        %icc, 1b
    add        %o0, 0x8, %o0
.Laligned64:
   andn        %o1, 64 - 1, %g1
   sub        %o1, %g1, %o1
   brnz,pn        %o4, .Lnon_bzero_loop
    mov        0x20, %g2
1:    stxa        %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
   subcc        %g1, 0x40, %g1
   stxa        %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
   bne,pt        %icc, 1b
    add        %o0, 0x40, %o0
.Lpostloop:
   cmp        %o1, 8
   bl,pn        %icc, .Ltiny
    membar        #StoreStore|#StoreLoad
.Lmedium:
   andn        %o1, 0x7, %g1
   sub        %o1, %g1, %o1
1:    stx        %o4, [%o0 + 0x00]
   subcc        %g1, 0x8, %g1
   bne,pt        %icc, 1b
    add        %o0, 0x08, %o0
   andcc        %o1, 0x4, %g1
   be,pt        %icc, .Ltiny
    sub        %o1, %g1, %o1
   stw        %o4, [%o0 + 0x00]
   add        %o0, 0x4, %o0
.Ltiny:
   cmp        %o1, 0
   be,pn        %icc, .Lexit
1:     subcc        %o1, 1, %o1
   stb        %o4, [%o0 + 0x00]
   bne,pt        %icc, 1b
    add        %o0, 1, %o0
.Lexit:
   retl
    mov        %o3, %o0
.Lnon_bzero_loop:
   mov        0x08, %g3
   mov        0x28, %o5
1:    stxa        %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
   subcc        %g1, 0x40, %g1
   stxa        %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
   stxa        %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
   stxa        %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
   add        %o0, 0x10, %o0
   stxa        %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
   stxa        %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
   stxa        %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
   stxa        %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
   bne,pt        %icc, 1b
    add        %o0, 0x30, %o0
   ba,a,pt        %icc, .Lpostloop
    nop
   .size        NG4bzero,.-NG4bzero