xref: /linux/arch/sparc/lib/crc32c_asm.S (revision 37b33c68b00089a574ebd0a856a5d554eb3001b7)
1*0f60a8acSEric Biggers/* SPDX-License-Identifier: GPL-2.0 */
2*0f60a8acSEric Biggers#include <linux/linkage.h>
3*0f60a8acSEric Biggers#include <asm/visasm.h>
4*0f60a8acSEric Biggers#include <asm/asi.h>
5*0f60a8acSEric Biggers
6*0f60a8acSEric Biggers#include "../crypto/opcodes.h"
7*0f60a8acSEric Biggers
8*0f60a8acSEric BiggersENTRY(crc32c_sparc64)
9*0f60a8acSEric Biggers	/* %o0=crc32p, %o1=data_ptr, %o2=len */
10*0f60a8acSEric Biggers	VISEntryHalf
11*0f60a8acSEric Biggers	lda	[%o0] ASI_PL, %f1
12*0f60a8acSEric Biggers1:	ldd	[%o1], %f2
13*0f60a8acSEric Biggers	CRC32C(0,2,0)
14*0f60a8acSEric Biggers	subcc	%o2, 8, %o2
15*0f60a8acSEric Biggers	bne,pt	%icc, 1b
16*0f60a8acSEric Biggers	 add	%o1, 0x8, %o1
17*0f60a8acSEric Biggers	sta	%f1, [%o0] ASI_PL
18*0f60a8acSEric Biggers	VISExitHalf
19*0f60a8acSEric Biggers2:	retl
20*0f60a8acSEric Biggers	 nop
21*0f60a8acSEric BiggersENDPROC(crc32c_sparc64)
22