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