Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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