xref: /openbmc/linux/arch/sparc/lib/NG4memset.S (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
29f825962SDavid S. Miller/* NG4memset.S: Niagara-4 optimized memset/bzero.
39f825962SDavid S. Miller *
49f825962SDavid S. Miller * Copyright (C) 2012 David S. Miller (davem@davemloft.net)
59f825962SDavid S. Miller */
69f825962SDavid S. Miller
79f825962SDavid S. Miller#include <asm/asi.h>
89f825962SDavid S. Miller
99f825962SDavid S. Miller	.register	%g2, #scratch
109f825962SDavid S. Miller	.register	%g3, #scratch
119f825962SDavid S. Miller
129f825962SDavid S. Miller	.text
139f825962SDavid S. Miller	.align		32
149f825962SDavid S. Miller	.globl		NG4memset
159f825962SDavid S. MillerNG4memset:
169f825962SDavid S. Miller	andcc		%o1, 0xff, %o4
179f825962SDavid S. Miller	be,pt		%icc, 1f
189f825962SDavid S. Miller	 mov		%o2, %o1
199f825962SDavid S. Miller	sllx		%o4, 8, %g1
209f825962SDavid S. Miller	or		%g1, %o4, %o2
219f825962SDavid S. Miller	sllx		%o2, 16, %g1
229f825962SDavid S. Miller	or		%g1, %o2, %o2
239f825962SDavid S. Miller	sllx		%o2, 32, %g1
249f825962SDavid S. Miller	ba,pt		%icc, 1f
259f825962SDavid S. Miller	 or		%g1, %o2, %o4
269f825962SDavid S. Miller	.size		NG4memset,.-NG4memset
279f825962SDavid S. Miller
289f825962SDavid S. Miller	.align		32
299f825962SDavid S. Miller	.globl		NG4bzero
309f825962SDavid S. MillerNG4bzero:
319f825962SDavid S. Miller	clr		%o4
329f825962SDavid S. Miller1:	cmp		%o1, 16
339f825962SDavid S. Miller	ble		%icc, .Ltiny
349f825962SDavid S. Miller	 mov		%o0, %o3
359f825962SDavid S. Miller	sub		%g0, %o0, %g1
369f825962SDavid S. Miller	and		%g1, 0x7, %g1
379f825962SDavid S. Miller	brz,pt		%g1, .Laligned8
389f825962SDavid S. Miller	 sub		%o1, %g1, %o1
399f825962SDavid S. Miller1:	stb		%o4, [%o0 + 0x00]
409f825962SDavid S. Miller	subcc		%g1, 1, %g1
419f825962SDavid S. Miller	bne,pt		%icc, 1b
429f825962SDavid S. Miller	 add		%o0, 1, %o0
439f825962SDavid S. Miller.Laligned8:
449f825962SDavid S. Miller	cmp		%o1, 64 + (64 - 8)
459f825962SDavid S. Miller	ble		.Lmedium
469f825962SDavid S. Miller	 sub		%g0, %o0, %g1
479f825962SDavid S. Miller	andcc		%g1, (64 - 1), %g1
489f825962SDavid S. Miller	brz,pn		%g1, .Laligned64
499f825962SDavid S. Miller	 sub		%o1, %g1, %o1
509f825962SDavid S. Miller1:	stx		%o4, [%o0 + 0x00]
519f825962SDavid S. Miller	subcc		%g1, 8, %g1
529f825962SDavid S. Miller	bne,pt		%icc, 1b
539f825962SDavid S. Miller	 add		%o0, 0x8, %o0
549f825962SDavid S. Miller.Laligned64:
559f825962SDavid S. Miller	andn		%o1, 64 - 1, %g1
569f825962SDavid S. Miller	sub		%o1, %g1, %o1
579f825962SDavid S. Miller	brnz,pn		%o4, .Lnon_bzero_loop
589f825962SDavid S. Miller	 mov		0x20, %g2
599f825962SDavid S. Miller1:	stxa		%o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
609f825962SDavid S. Miller	subcc		%g1, 0x40, %g1
619f825962SDavid S. Miller	stxa		%o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
629f825962SDavid S. Miller	bne,pt		%icc, 1b
639f825962SDavid S. Miller	 add		%o0, 0x40, %o0
649f825962SDavid S. Miller.Lpostloop:
659f825962SDavid S. Miller	cmp		%o1, 8
669f825962SDavid S. Miller	bl,pn		%icc, .Ltiny
679f825962SDavid S. Miller	 membar		#StoreStore|#StoreLoad
689f825962SDavid S. Miller.Lmedium:
699f825962SDavid S. Miller	andn		%o1, 0x7, %g1
709f825962SDavid S. Miller	sub		%o1, %g1, %o1
719f825962SDavid S. Miller1:	stx		%o4, [%o0 + 0x00]
729f825962SDavid S. Miller	subcc		%g1, 0x8, %g1
739f825962SDavid S. Miller	bne,pt		%icc, 1b
749f825962SDavid S. Miller	 add		%o0, 0x08, %o0
759f825962SDavid S. Miller	andcc		%o1, 0x4, %g1
769f825962SDavid S. Miller	be,pt		%icc, .Ltiny
779f825962SDavid S. Miller	 sub		%o1, %g1, %o1
789f825962SDavid S. Miller	stw		%o4, [%o0 + 0x00]
799f825962SDavid S. Miller	add		%o0, 0x4, %o0
809f825962SDavid S. Miller.Ltiny:
819f825962SDavid S. Miller	cmp		%o1, 0
829f825962SDavid S. Miller	be,pn		%icc, .Lexit
839f825962SDavid S. Miller1:	 subcc		%o1, 1, %o1
849f825962SDavid S. Miller	stb		%o4, [%o0 + 0x00]
859f825962SDavid S. Miller	bne,pt		%icc, 1b
869f825962SDavid S. Miller	 add		%o0, 1, %o0
879f825962SDavid S. Miller.Lexit:
889f825962SDavid S. Miller	retl
899f825962SDavid S. Miller	 mov		%o3, %o0
909f825962SDavid S. Miller.Lnon_bzero_loop:
919f825962SDavid S. Miller	mov		0x08, %g3
929f825962SDavid S. Miller	mov		0x28, %o5
939f825962SDavid S. Miller1:	stxa		%o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
949f825962SDavid S. Miller	subcc		%g1, 0x40, %g1
959f825962SDavid S. Miller	stxa		%o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
969f825962SDavid S. Miller	stxa		%o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
979f825962SDavid S. Miller	stxa		%o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
989f825962SDavid S. Miller	add		%o0, 0x10, %o0
999f825962SDavid S. Miller	stxa		%o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P
1009f825962SDavid S. Miller	stxa		%o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P
1019f825962SDavid S. Miller	stxa		%o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P
1029f825962SDavid S. Miller	stxa		%o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P
1039f825962SDavid S. Miller	bne,pt		%icc, 1b
1049f825962SDavid S. Miller	 add		%o0, 0x30, %o0
1059f825962SDavid S. Miller	ba,a,pt		%icc, .Lpostloop
1060ae2d26fSBabu Moger	 nop
1079f825962SDavid S. Miller	.size		NG4bzero,.-NG4bzero
108