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 */
48test_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