xref: /linux/arch/powerpc/include/asm/xor.h (revision 8c994eff8fcfe8ecb1f1dbebed25b4d7bb75be12)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *
4  * Copyright (C) IBM Corporation, 2012
5  *
6  * Author: Anton Blanchard <anton@au.ibm.com>
7  */
8 #ifndef _ASM_POWERPC_XOR_H
9 #define _ASM_POWERPC_XOR_H
10 
11 #ifdef CONFIG_ALTIVEC
12 
13 #include <asm/cputable.h>
14 #include <asm/cpu_has_feature.h>
15 #include <asm/xor_altivec.h>
16 
17 static struct xor_block_template xor_block_altivec = {
18 	.name = "altivec",
19 	.do_2 = xor_altivec_2,
20 	.do_3 = xor_altivec_3,
21 	.do_4 = xor_altivec_4,
22 	.do_5 = xor_altivec_5,
23 };
24 
25 #define XOR_SPEED_ALTIVEC()				\
26 	do {						\
27 		if (cpu_has_feature(CPU_FTR_ALTIVEC))	\
28 			xor_speed(&xor_block_altivec);	\
29 	} while (0)
30 #else
31 #define XOR_SPEED_ALTIVEC()
32 #endif
33 
34 /* Also try the generic routines. */
35 #include <asm-generic/xor.h>
36 
37 #undef XOR_TRY_TEMPLATES
38 #define XOR_TRY_TEMPLATES				\
39 do {							\
40 	xor_speed(&xor_block_8regs);			\
41 	xor_speed(&xor_block_8regs_p);			\
42 	xor_speed(&xor_block_32regs);			\
43 	xor_speed(&xor_block_32regs_p);			\
44 	XOR_SPEED_ALTIVEC();				\
45 } while (0)
46 
47 #endif /* _ASM_POWERPC_XOR_H */
48