xref: /linux/tools/testing/selftests/powerpc/copyloops/asm/ppc_asm.h (revision 4b660dbd9ee2059850fd30e0df420ca7a38a1856)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __SELFTESTS_POWERPC_PPC_ASM_H
3 #define __SELFTESTS_POWERPC_PPC_ASM_H
4 #include <ppc-asm.h>
5 
6 #define CONFIG_ALTIVEC
7 
8 #define r1	1
9 
10 #define R14 r14
11 #define R15 r15
12 #define R16 r16
13 #define R17 r17
14 #define R18 r18
15 #define R19 r19
16 #define R20 r20
17 #define R21 r21
18 #define R22 r22
19 #define R29 r29
20 #define R30 r30
21 #define R31 r31
22 
23 #define STACKFRAMESIZE	256
24 #define STK_REG(i)	(112 + ((i)-14)*8)
25 
26 #define _GLOBAL(A) FUNC_START(test_ ## A)
27 #define _GLOBAL_TOC(A) _GLOBAL(A)
28 #define _GLOBAL_TOC_KASAN(A) _GLOBAL(A)
29 #define _GLOBAL_KASAN(A) _GLOBAL(A)
30 #define CFUNC(name) name
31 
32 #define PPC_MTOCRF(A, B)	mtocrf A, B
33 
34 #define EX_TABLE(x, y)			\
35 	.section __ex_table,"a";	\
36 	.8byte	x, y;			\
37 	.previous
38 
39 #define BEGIN_FTR_SECTION		.if test_feature
40 #define FTR_SECTION_ELSE		.else
41 #define ALT_FTR_SECTION_END_IFCLR(x)	.endif
42 #define ALT_FTR_SECTION_END_IFSET(x)	.endif
43 #define ALT_FTR_SECTION_END(x, y)	.endif
44 #define END_FTR_SECTION_IFCLR(x)	.endif
45 #define END_FTR_SECTION_IFSET(x)	.endif
46 
47 /* Default to taking the first of any alternative feature sections */
48 test_feature = 1
49 
50 #define DCBT_SETUP_STREAMS(from, from_parms, to, to_parms, scratch)	\
51 	lis	scratch,0x8000;	/* GO=1 */				\
52 	clrldi	scratch,scratch,32;					\
53 	/* setup read stream 0 */					\
54 	dcbt	0,from,0b01000;		/* addr from */			\
55 	dcbt	0,from_parms,0b01010;	/* length and depth from */	\
56 	/* setup write stream 1 */					\
57 	dcbtst	0,to,0b01000;		/* addr to */			\
58 	dcbtst	0,to_parms,0b01010;	/* length and depth to */	\
59 	eieio;								\
60 	dcbt	0,scratch,0b01010;	/* all streams GO */
61 
62 #endif /* __SELFTESTS_POWERPC_PPC_ASM_H */
63