arm64/fpsimdmacros: Introduce a macro to update ZCR_EL1.LEN
authorJulien Grall <julien.grall@arm.com>
Fri, 28 Aug 2020 18:11:51 +0000 (19:11 +0100)
committerWill Deacon <will@kernel.org>
Mon, 21 Sep 2020 17:06:32 +0000 (18:06 +0100)
A follow-up patch will need to update ZCR_EL1.LEN.

Add a macro that could be re-used in the current and new places to
avoid code duplication.

Signed-off-by: Julien Grall <julien.grall@arm.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Dave Martin <Dave.Martin@arm.com>
Link: https://lore.kernel.org/r/20200828181155.17745-5-broonie@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/fpsimdmacros.h

index 636e9d9..60e29a3 100644 (file)
        .purgem _for__body
 .endm
 
+/* Update ZCR_EL1.LEN with the new VQ */
+.macro sve_load_vq xvqminus1, xtmp, xtmp2
+               mrs_s           \xtmp, SYS_ZCR_EL1
+               bic             \xtmp2, \xtmp, ZCR_ELx_LEN_MASK
+               orr             \xtmp2, \xtmp2, \xvqminus1
+               cmp             \xtmp2, \xtmp
+               b.eq            921f
+               msr_s           SYS_ZCR_EL1, \xtmp2     //self-synchronising
+921:
+.endm
+
 .macro sve_save nxbase, xpfpsr, nxtmp
  _for n, 0, 31,        _sve_str_v      \n, \nxbase, \n - 34
  _for n, 0, 15,        _sve_str_p      \n, \nxbase, \n - 16
 .endm
 
 .macro sve_load nxbase, xpfpsr, xvqminus1, nxtmp, xtmp2
-               mrs_s           x\nxtmp, SYS_ZCR_EL1
-               bic             \xtmp2, x\nxtmp, ZCR_ELx_LEN_MASK
-               orr             \xtmp2, \xtmp2, \xvqminus1
-               cmp             \xtmp2, x\nxtmp
-               b.eq            921f
-               msr_s           SYS_ZCR_EL1, \xtmp2     // self-synchronising
-921:
+               sve_load_vq     \xvqminus1, x\nxtmp, \xtmp2
  _for n, 0, 31,        _sve_ldr_v      \n, \nxbase, \n - 34
                _sve_ldr_p      0, \nxbase
                _sve_wrffr      0