xref: /linux/tools/testing/selftests/arm64/fp/sme-inst.h (revision da1d9caf95def6f0320819cf941c9fd1069ba9e1)
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (C) 2021-2 ARM Limited.
3 // Original author: Mark Brown <broonie@kernel.org>
4 
5 #ifndef SME_INST_H
6 #define SME_INST_H
7 
8 /*
9  * RDSVL X\nx, #\imm
10  */
11 .macro rdsvl nx, imm
12 	.inst	0x4bf5800			\
13 		| (\imm << 5)			\
14 		| (\nx)
15 .endm
16 
17 .macro smstop
18 	msr	S0_3_C4_C6_3, xzr
19 .endm
20 
21 .macro smstart_za
22 	msr	S0_3_C4_C5_3, xzr
23 .endm
24 
25 .macro smstart_sm
26 	msr	S0_3_C4_C3_3, xzr
27 .endm
28 
29 /*
30  * LDR (vector to ZA array):
31  *	LDR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
32  */
33 .macro _ldr_za nw, nxbase, offset=0
34 	.inst	0xe1000000			\
35 		| (((\nw) & 3) << 13)		\
36 		| ((\nxbase) << 5)		\
37 		| ((\offset) & 7)
38 .endm
39 
40 /*
41  * STR (vector from ZA array):
42  *	STR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
43  */
44 .macro _str_za nw, nxbase, offset=0
45 	.inst	0xe1200000			\
46 		| (((\nw) & 3) << 13)		\
47 		| ((\nxbase) << 5)		\
48 		| ((\offset) & 7)
49 .endm
50 
51 #endif
52