mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Add coverage for FPMR to fp-ptrace. FPMR can be available independently of SVE and SME, if SME is supported then FPMR is cleared by entering and exiting streaming mode. As with other registers we generate random values to load into the register, we restrict these to bitfields which are always defined. We also leave bitfields where the valid values are affected by the set of supported FP8 formats zero to reduce complexity, it is unlikely that specific bitfields will be affected by ptrace issues. Signed-off-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20241112-arm64-fp-ptrace-fpmr-v2-3-250b57c61254@kernel.org [catalin.marinas@arm.com: use REG_FPMR instead of FPMR] Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
73 lines
1.1 KiB
C
73 lines
1.1 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
// Copyright (C) 2021-2 ARM Limited.
|
|
// Original author: Mark Brown <broonie@kernel.org>
|
|
|
|
#ifndef SME_INST_H
|
|
#define SME_INST_H
|
|
|
|
#define REG_FPMR S3_3_C4_C4_2
|
|
|
|
/*
|
|
* RDSVL X\nx, #\imm
|
|
*/
|
|
.macro rdsvl nx, imm
|
|
.inst 0x4bf5800 \
|
|
| (\imm << 5) \
|
|
| (\nx)
|
|
.endm
|
|
|
|
.macro smstop
|
|
msr S0_3_C4_C6_3, xzr
|
|
.endm
|
|
|
|
.macro smstart_za
|
|
msr S0_3_C4_C5_3, xzr
|
|
.endm
|
|
|
|
.macro smstart_sm
|
|
msr S0_3_C4_C3_3, xzr
|
|
.endm
|
|
|
|
/*
|
|
* LDR (vector to ZA array):
|
|
* LDR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
|
|
*/
|
|
.macro _ldr_za nw, nxbase, offset=0
|
|
.inst 0xe1000000 \
|
|
| (((\nw) & 3) << 13) \
|
|
| ((\nxbase) << 5) \
|
|
| ((\offset) & 7)
|
|
.endm
|
|
|
|
/*
|
|
* STR (vector from ZA array):
|
|
* STR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
|
|
*/
|
|
.macro _str_za nw, nxbase, offset=0
|
|
.inst 0xe1200000 \
|
|
| (((\nw) & 3) << 13) \
|
|
| ((\nxbase) << 5) \
|
|
| ((\offset) & 7)
|
|
.endm
|
|
|
|
/*
|
|
* LDR (ZT0)
|
|
*
|
|
* LDR ZT0, nx
|
|
*/
|
|
.macro _ldr_zt nx
|
|
.inst 0xe11f8000 \
|
|
| (((\nx) & 0x1f) << 5)
|
|
.endm
|
|
|
|
/*
|
|
* STR (ZT0)
|
|
*
|
|
* STR ZT0, nx
|
|
*/
|
|
.macro _str_zt nx
|
|
.inst 0xe13f8000 \
|
|
| (((\nx) & 0x1f) << 5)
|
|
.endm
|
|
|
|
#endif
|