diff options
author | Dave Martin <Dave.Martin@arm.com> | 2017-10-31 15:51:01 +0000 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2017-11-03 15:24:14 +0000 |
commit | 1fc5dce78ad15dce2f23336d339e5f7290b61e19 (patch) | |
tree | 3718014c2a1531441a25339d2d32a5cd0cb7e0ad /arch/arm64/kernel/entry-fpsimd.S | |
parent | 672365649ccac68cf6fafecad1a7913951e7493b (diff) | |
download | linux-stable-1fc5dce78ad15dce2f23336d339e5f7290b61e19.tar.gz linux-stable-1fc5dce78ad15dce2f23336d339e5f7290b61e19.tar.bz2 linux-stable-1fc5dce78ad15dce2f23336d339e5f7290b61e19.zip |
arm64/sve: Low-level SVE architectural state manipulation functions
Manipulating the SVE architectural state, including the vector and
predicate registers, first-fault register and the vector length,
requires the use of dedicated instructions added by SVE.
This patch adds suitable assembly functions for saving and
restoring the SVE registers and querying the vector length.
Setting of the vector length is done as part of register restore.
Since people building kernels may not all get an SVE-enabled
toolchain for a while, this patch uses macros that generate
explicit opcodes in place of assembler mnemonics.
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/kernel/entry-fpsimd.S')
-rw-r--r-- | arch/arm64/kernel/entry-fpsimd.S | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm64/kernel/entry-fpsimd.S b/arch/arm64/kernel/entry-fpsimd.S index 6a27cd6dbfa6..73f17bffcd23 100644 --- a/arch/arm64/kernel/entry-fpsimd.S +++ b/arch/arm64/kernel/entry-fpsimd.S @@ -41,3 +41,20 @@ ENTRY(fpsimd_load_state) fpsimd_restore x0, 8 ret ENDPROC(fpsimd_load_state) + +#ifdef CONFIG_ARM64_SVE +ENTRY(sve_save_state) + sve_save 0, x1, 2 + ret +ENDPROC(sve_save_state) + +ENTRY(sve_load_state) + sve_load 0, x1, x2, 3 + ret +ENDPROC(sve_load_state) + +ENTRY(sve_get_vl) + _sve_rdvl 0, 1 + ret +ENDPROC(sve_get_vl) +#endif /* CONFIG_ARM64_SVE */ |