/* SPDX-License-Identifier: GPL-2.0 */
/* csum_copy.S: Checksum+copy code for sparc64
 *
 * Copyright (C) 2005 David S. Miller <davem@davemloft.net>
 */

#include <asm/export.h>

#ifdef __KERNEL__
#define GLOBAL_SPARE	%g7
#else
#define GLOBAL_SPARE	%g5
#endif

#ifndef EX_LD
#define EX_LD(x)	x
#endif

#ifndef EX_ST
#define EX_ST(x)	x
#endif

#ifndef EX_RETVAL
#define EX_RETVAL(x)	x
#endif

#ifndef LOAD
#define LOAD(type,addr,dest)	type [addr], dest
#endif

#ifndef STORE
#define STORE(type,src,addr)	type src, [addr]
#endif

#ifndef FUNC_NAME
#define FUNC_NAME	csum_partial_copy_nocheck
#endif

	.register	%g2, #scratch
	.register	%g3, #scratch

	.text

90:
	/* We checked for zero length already, so there must be
	 * at least one byte.
	 */
	be,pt		%icc, 1f
	 nop
	EX_LD(LOAD(ldub, %o0 + 0x00, %o4))
	add		%o0, 1, %o0
	sub		%o2, 1, %o2
	EX_ST(STORE(stb, %o4, %o1 + 0x00))
	add		%o1, 1, %o1
1:	andcc		%o0, 0x2, %g0
	be,pn		%icc, 80f
	 cmp		%o2, 2
	blu,pn		%icc, 60f
	 nop
	EX_LD(LOAD(lduh, %o0 + 0x00, %o5))
	add		%o0, 2, %o0
	sub		%o2, 2, %o2
	EX_ST(STORE(sth, %o5, %o1 + 0x00))
	add		%o1, 2, %o1
	ba,pt		%xcc, 80f
	 add		%o5, %o4, %o4

	.globl		FUNC_NAME
	.type		FUNC_NAME,#function
	EXPORT_SYMBOL(FUNC_NAME)
FUNC_NAME:		/* %o0=src, %o1=dst, %o2=len */
	LOAD(prefetch, %o0 + 0x000, #n_reads)
	xor		%o0, %o1, %g1
	mov		1, %o3
	clr		%o4
	andcc		%g1, 0x3, %g0
	bne,pn		%icc, 95f
	 LOAD(prefetch, %o0 + 0x040, #n_reads)
	
	brz,pn		%o2, 70f
	 andcc		%o0, 0x3, %g0

	/* We "remember" whether the lowest bit in the address
	 * was set in GLOBAL_SPARE.  Because if it is, we have to swap
	 * upper and lower 8 bit fields of the sum we calculate.
	*/
	bne,pn		%icc, 90b
	 andcc		%o0, 0x1, GLOBAL_SPARE

80:
	LOAD(prefetch, %o0 + 0x080, #n_reads)
	andncc		%o2, 0x3f, %g3

	LOAD(prefetch, %o0 + 0x0c0, #n_reads)
	sub		%o2, %g3, %o2
	brz,pn		%g3, 2f
	 LOAD(prefetch, %o0 + 0x100, #n_reads)

	/* So that we don't need to use the non-pairing
	 * add-with-carry instructions we accumulate 32-bit
	 * values into a 64-bit register.  At the end of the
	 * loop we fold it down to 32-bits and so on.
	 */
	ba,pt		%xcc, 1f
	LOAD(prefetch, %o0 + 0x140, #n_reads)

	.align		32
1:	EX_LD(LOAD(lduw, %o0 + 0x00, %o5))
	EX_LD(LOAD(lduw, %o0 + 0x04, %g1))
	EX_LD(LOAD(lduw, %o0 + 0x08, %g2))
	add		%o4, %o5, %o4
	EX_ST(STORE(stw, %o5, %o1 + 0x00))
	EX_LD(LOAD(lduw, %o0 + 0x0c, %o5))
	add		%o4, %g1, %o4
	EX_ST(STORE(stw, %g1, %o1 + 0x04))
	EX_LD(LOAD(lduw, %o0 + 0x10, %g1))
	add		%o4, %g2, %o4
	EX_ST(STORE(stw, %g2, %o1 + 0x08))
	EX_LD(LOAD(lduw, %o0 + 0x14, %g2))
	add		%o4, %o5, %o4
	EX_ST(STORE(stw, %o5, %o1 + 0x0c))
	EX_LD(LOAD(lduw, %o0 + 0x18, %o5))
	add		%o4, %g1, %o4
	EX_ST(STORE(stw, %g1, %o1 + 0x10))
	EX_LD(LOAD(lduw, %o0 + 0x1c, %g1))
	add		%o4, %g2, %o4
	EX_ST(STORE(stw, %g2, %o1 + 0x14))
	EX_LD(LOAD(lduw, %o0 + 0x20, %g2))
	add		%o4, %o5, %o4
	EX_ST(STORE(stw, %o5, %o1 + 0x18))
	EX_LD(LOAD(lduw, %o0 + 0x24, %o5))
	add		%o4, %g1, %o4
	EX_ST(STORE(stw, %g1, %o1 + 0x1c))
	EX_LD(LOAD(lduw, %o0 + 0x28, %g1))
	add		%o4, %g2, %o4
	EX_ST(STORE(stw, %g2, %o1 + 0x20))
	EX_LD(LOAD(lduw, %o0 + 0x2c, %g2))
	add		%o4, %o5, %o4
	EX_ST(STORE(stw, %o5, %o1 + 0x24))
	EX_LD(LOAD(lduw, %o0 + 0x30, %o5))
	add		%o4, %g1, %o4
	EX_ST(STORE(stw, %g1, %o1 + 0x28))
	EX_LD(LOAD(lduw, %o0 + 0x34, %g1))
	add		%o4, %g2, %o4
	EX_ST(STORE(stw, %g2, %o1 + 0x2c))
	EX_LD(LOAD(lduw, %o0 + 0x38, %g2))
	add		%o4, %o5, %o4
	EX_ST(STORE(stw, %o5, %o1 + 0x30))
	EX_LD(LOAD(lduw, %o0 + 0x3c, %o5))
	add		%o4, %g1, %o4
	EX_ST(STORE(stw, %g1, %o1 + 0x34))
	LOAD(prefetch, %o0 + 0x180, #n_reads)
	add		%o4, %g2, %o4
	EX_ST(STORE(stw, %g2, %o1 + 0x38))
	subcc		%g3, 0x40, %g3
	add		%o0, 0x40, %o0
	add		%o4, %o5, %o4
	EX_ST(STORE(stw, %o5, %o1 + 0x3c))
	bne,pt		%icc, 1b
	 add		%o1, 0x40, %o1

2:	and		%o2, 0x3c, %g3
	brz,pn		%g3, 2f
	 sub		%o2, %g3, %o2
1:	EX_LD(LOAD(lduw, %o0 + 0x00, %o5))
	subcc		%g3, 0x4, %g3
	add		%o0, 0x4, %o0
	add		%o4, %o5, %o4
	EX_ST(STORE(stw, %o5, %o1 + 0x00))
	bne,pt		%icc, 1b
	 add		%o1, 0x4, %o1

2:
	/* fold 64-->32 */
	srlx		%o4, 32, %o5
	srl		%o4, 0, %o4
	add		%o4, %o5, %o4
	srlx		%o4, 32, %o5
	srl		%o4, 0, %o4
	add		%o4, %o5, %o4

	/* fold 32-->16 */
	sethi		%hi(0xffff0000), %g1
	srl		%o4, 16, %o5
	andn		%o4, %g1, %g2
	add		%o5, %g2, %o4
	srl		%o4, 16, %o5
	andn		%o4, %g1, %g2
	add		%o5, %g2, %o4

60:
	/* %o4 has the 16-bit sum we have calculated so-far.  */
	cmp		%o2, 2
	blu,pt		%icc, 1f
	 nop
	EX_LD(LOAD(lduh, %o0 + 0x00, %o5))
	sub		%o2, 2, %o2
	add		%o0, 2, %o0
	add		%o4, %o5, %o4
	EX_ST(STORE(sth, %o5, %o1 + 0x00))
	add		%o1, 0x2, %o1
1:	brz,pt		%o2, 1f
	 nop
	EX_LD(LOAD(ldub, %o0 + 0x00, %o5))
	sub		%o2, 1, %o2
	add		%o0, 1, %o0
	EX_ST(STORE(stb, %o5, %o1 + 0x00))
	sllx		%o5, 8, %o5
	add		%o1, 1, %o1
	add		%o4, %o5, %o4
1:
	/* fold 32-->16 */
	sethi		%hi(0xffff0000), %g1
	srl		%o4, 16, %o5
	andn		%o4, %g1, %g2
	add		%o5, %g2, %o4
	srl		%o4, 16, %o5
	andn		%o4, %g1, %g2
	add		%o5, %g2, %o4

1:	brz,pt		GLOBAL_SPARE, 1f
	 nop

	/* We started with an odd byte, byte-swap the result.  */
	srl		%o4, 8, %o5
	and		%o4, 0xff, %g1
	sll		%g1, 8, %g1
	or		%o5, %g1, %o4

1:	addcc		%o3, %o4, %o3
	addc		%g0, %o3, %o3

70:
	retl
	 srl		%o3, 0, %o0

95:	mov		0, GLOBAL_SPARE
	brlez,pn	%o2, 4f
	 andcc		%o0, 1, %o5		
	be,a,pt		%icc, 1f
	 srl		%o2, 1, %g1		
	sub		%o2, 1, %o2	
	EX_LD(LOAD(ldub, %o0, GLOBAL_SPARE))
	add		%o0, 1, %o0	
	EX_ST(STORE(stb, GLOBAL_SPARE, %o1))
	srl		%o2, 1, %g1
	add		%o1, 1, %o1
1:	brz,a,pn	%g1, 3f
	 andcc		%o2, 1, %g0
	andcc		%o0, 2, %g0	
	be,a,pt		%icc, 1f
	 srl		%g1, 1, %g1
	EX_LD(LOAD(lduh, %o0, %o4))
	sub		%o2, 2, %o2	
	srl		%o4, 8, %g2
	sub		%g1, 1, %g1	
	EX_ST(STORE(stb, %g2, %o1))
	add		%o4, GLOBAL_SPARE, GLOBAL_SPARE
	EX_ST(STORE(stb, %o4, %o1 + 1))
	add		%o0, 2, %o0	
	srl		%g1, 1, %g1
	add		%o1, 2, %o1
1:	brz,a,pn	%g1, 2f		
	 andcc		%o2, 2, %g0
	EX_LD(LOAD(lduw, %o0, %o4))
5:	srl		%o4, 24, %g2
	srl		%o4, 16, %g3
	EX_ST(STORE(stb, %g2, %o1))
	srl		%o4, 8, %g2
	EX_ST(STORE(stb, %g3, %o1 + 1))
	add		%o0, 4, %o0
	EX_ST(STORE(stb, %g2, %o1 + 2))
	addcc		%o4, GLOBAL_SPARE, GLOBAL_SPARE
	EX_ST(STORE(stb, %o4, %o1 + 3))
	addc		GLOBAL_SPARE, %g0, GLOBAL_SPARE
	add		%o1, 4, %o1
	subcc		%g1, 1, %g1
	bne,a,pt	%icc, 5b
	 EX_LD(LOAD(lduw, %o0, %o4))
	sll		GLOBAL_SPARE, 16, %g2
	srl		GLOBAL_SPARE, 16, GLOBAL_SPARE
	srl		%g2, 16, %g2
	andcc		%o2, 2, %g0
	add		%g2, GLOBAL_SPARE, GLOBAL_SPARE 
2:	be,a,pt		%icc, 3f		
	 andcc		%o2, 1, %g0
	EX_LD(LOAD(lduh, %o0, %o4))
	andcc		%o2, 1, %g0
	srl		%o4, 8, %g2
	add		%o0, 2, %o0	
	EX_ST(STORE(stb, %g2, %o1))
	add		GLOBAL_SPARE, %o4, GLOBAL_SPARE
	EX_ST(STORE(stb, %o4, %o1 + 1))
	add		%o1, 2, %o1
3:	be,a,pt		%icc, 1f		
	 sll		GLOBAL_SPARE, 16, %o4
	EX_LD(LOAD(ldub, %o0, %g2))
	sll		%g2, 8, %o4	
	EX_ST(STORE(stb, %g2, %o1))
	add		GLOBAL_SPARE, %o4, GLOBAL_SPARE
	sll		GLOBAL_SPARE, 16, %o4
1:	addcc		%o4, GLOBAL_SPARE, GLOBAL_SPARE
	srl		GLOBAL_SPARE, 16, %o4
	addc		%g0, %o4, GLOBAL_SPARE
	brz,pt		%o5, 4f
	 srl		GLOBAL_SPARE, 8, %o4
	and		GLOBAL_SPARE, 0xff, %g2
	and		%o4, 0xff, %o4
	sll		%g2, 8, %g2
	or		%g2, %o4, GLOBAL_SPARE
4:	addcc		%o3, GLOBAL_SPARE, %o3
	addc		%g0, %o3, %o0
	retl
	 srl		%o0, 0, %o0
	.size		FUNC_NAME, .-FUNC_NAME
