From: Vladimir Murzin <vladimir.murzin@arm•com>
To: Mark Rutland <mark.rutland@arm•com>,
linux-arm-kernel@lists•infradead.org, kvmarm@lists•linux.dev
Cc: broonie@kernel•org, catalin.marinas@arm•com, james.morse@arm•com,
maz@kernel•org, oupton@kernel•org, tabba@google•com,
will@kernel•org
Subject: Re: [PATCH 07/18] arm64: fpsimd: Use assembler for SVE instructions
Date: Wed, 27 May 2026 13:58:09 +0100 [thread overview]
Message-ID: <46c5ae49-e59c-4014-91d3-f00124897d20@arm.com> (raw)
In-Reply-To: <20260521132556.584676-8-mark.rutland@arm.com>
Hi Mark,
On 5/21/26 14:25, Mark Rutland wrote:
> Historically we supported assemblers which could not assemble SVE
> instructions. We dropped support for such assemblers in commit:
>
> 118c40b7b503 ("kbuild: require gcc-8 and binutils-2.30")
>
> Since that commit, all supported assemblers (binutils and LLVM) are
> capable of assembling SVE instructions, and there's no need for us to
> manually encode SVE instructions.
>
> Rely on the assembler to encode SVE instructions, and remove the manual
> encoding. The various _sve_<insn> macros are kept for now, and will be
> cleaned up in subsequent patches.
>
> There should be no functional change as a result of this patch.
>
> Signed-off-by: Mark Rutland <mark.rutland@arm•com>
> Cc: Catalin Marinas <catalin.marinas@arm•com>
> Cc: Fuad Tabba <tabba@google•com>
> Cc: James Morse <james.morse@arm•com>
> Cc: Marc Zyngier <maz@kernel•org>
> Cc: Mark Brown <broonie@kernel•org>
> Cc: Oliver Upton <oupton@kernel•org>
> Cc: Will Deacon <will@kernel•org>
> ---
> arch/arm64/include/asm/fpsimdmacros.h | 64 +++++++--------------------
> 1 file changed, 16 insertions(+), 48 deletions(-)
>
> diff --git a/arch/arm64/include/asm/fpsimdmacros.h b/arch/arm64/include/asm/fpsimdmacros.h
> index adf33d2da40c3..1122eea6daacf 100644
> --- a/arch/arm64/include/asm/fpsimdmacros.h
> +++ b/arch/arm64/include/asm/fpsimdmacros.h
> @@ -99,85 +99,53 @@
> .endif
> .endm
>
> -/* SVE instruction encodings for non-SVE-capable assemblers */
> -/* (pre binutils 2.28, all kernel capable clang versions support SVE) */
> +/* Deprecated macros for SVE instructions */
>
> /* STR (vector): STR Z\nz, [X\nxbase, #\offset, MUL VL] */
Nitpick:
all these comments now redundant and just repeat the code... I know they are gone by
the end of the series :)
> .macro _sve_str_v nz, nxbase, offset=0
> - _sve_check_zreg \nz
> - _check_general_reg \nxbase
> - _check_num (\offset), -0x100, 0xff
> - .inst 0xe5804000 \
> - | (\nz) \
> - | ((\nxbase) << 5) \
> - | (((\offset) & 7) << 10) \
> - | (((\offset) & 0x1f8) << 13)
> + .arch_extension sve
> + str z\nz, [X\nxbase, #\offset, MUL VL]
> .endm
>
> /* LDR (vector): LDR Z\nz, [X\nxbase, #\offset, MUL VL] */
> .macro _sve_ldr_v nz, nxbase, offset=0
> - _sve_check_zreg \nz
> - _check_general_reg \nxbase
> - _check_num (\offset), -0x100, 0xff
> - .inst 0x85804000 \
> - | (\nz) \
> - | ((\nxbase) << 5) \
> - | (((\offset) & 7) << 10) \
> - | (((\offset) & 0x1f8) << 13)
> + .arch_extension sve
> + ldr z\nz, [X\nxbase, #\offset, MUL VL]
> .endm
>
> /* STR (predicate): STR P\np, [X\nxbase, #\offset, MUL VL] */
> .macro _sve_str_p np, nxbase, offset=0
> - _sve_check_preg \np
> - _check_general_reg \nxbase
> - _check_num (\offset), -0x100, 0xff
> - .inst 0xe5800000 \
> - | (\np) \
> - | ((\nxbase) << 5) \
> - | (((\offset) & 7) << 10) \
> - | (((\offset) & 0x1f8) << 13)
> + .arch_extension sve
> + str p\np, [X\nxbase, #\offset, MUL VL]
> .endm
>
> /* LDR (predicate): LDR P\np, [X\nxbase, #\offset, MUL VL] */
> .macro _sve_ldr_p np, nxbase, offset=0
> - _sve_check_preg \np
> - _check_general_reg \nxbase
> - _check_num (\offset), -0x100, 0xff
> - .inst 0x85800000 \
> - | (\np) \
> - | ((\nxbase) << 5) \
> - | (((\offset) & 7) << 10) \
> - | (((\offset) & 0x1f8) << 13)
> + .arch_extension sve
> + ldr p\np, [x\nxbase, #\offset, MUL VL]
> .endm
>
> /* RDVL X\nx, #\imm */
> .macro _sve_rdvl nx, imm
> - _check_general_reg \nx
> - _check_num (\imm), -0x20, 0x1f
> - .inst 0x04bf5000 \
> - | (\nx) \
> - | (((\imm) & 0x3f) << 5)
> + .arch_extension sve
> + rdvl x\nx, #\imm
> .endm
>
> /* RDFFR (unpredicated): RDFFR P\np.B */
> .macro _sve_rdffr np
> - _sve_check_preg \np
> - .inst 0x2519f000 \
> - | (\np)
> + .arch_extension sve
> + rdffr p\np\().b
> .endm
>
> /* WRFFR P\np.B */
> .macro _sve_wrffr np
> - _sve_check_preg \np
> - .inst 0x25289000 \
> - | ((\np) << 5)
Missing ".arch_extension sve"?
> + wrffr p\np\().b
> .endm
>
> /* PFALSE P\np.B */
> .macro _sve_pfalse np
> - _sve_check_preg \np
> - .inst 0x2518e400 \
> - | (\np)
> + .arch_extension sve
> + pfalse p\np\().b
> .endm
>
> /* SME instruction encodings for non-SME-capable assemblers */
> -- 2.30.2
>
next prev parent reply other threads:[~2026-05-27 12:58 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-21 13:25 [PATCH 00/18] arm64+KVM: FPSIMD/SVE/SME cleanups Mark Rutland
2026-05-21 13:25 ` [PATCH 01/18] KVM: arm64: Don't include <asm/fpsimdmacros.h> Mark Rutland
2026-05-26 14:18 ` Mark Brown
2026-05-27 10:10 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 02/18] KVM: arm64: Don't override FFR save/restore argument Mark Rutland
2026-05-26 14:27 ` Mark Brown
2026-05-27 10:16 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 03/18] KVM: arm64: pkvm: Save host FPMR in host cpu context Mark Rutland
2026-05-27 10:29 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 04/18] KVM: arm64: pkvm: Remove struct cpu_sve_state Mark Rutland
2026-05-27 11:58 ` Vladimir Murzin
2026-05-27 16:02 ` Mark Rutland
2026-05-27 16:11 ` Vladimir Murzin
2026-05-28 15:09 ` Mark Rutland
2026-05-28 15:12 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 05/18] arm64: fpsimd: Fold sve_init_regs() into do_sve_acc() Mark Rutland
2026-05-26 15:28 ` Mark Brown
2026-05-27 12:05 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 06/18] arm64: fpsimd: Remove sve_set_vq() and sme_set_vq() Mark Rutland
2026-05-26 15:42 ` Mark Brown
2026-05-27 12:50 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 07/18] arm64: fpsimd: Use assembler for SVE instructions Mark Rutland
2026-05-26 15:43 ` Mark Brown
2026-05-27 12:58 ` Vladimir Murzin [this message]
2026-05-27 16:10 ` Mark Rutland
2026-05-21 13:25 ` [PATCH 08/18] arm64: fpsimd: Use assembler for baseline SME instructions Mark Rutland
2026-05-26 15:45 ` Mark Brown
2026-05-27 13:06 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 09/18] arm64: fpsimd: Move sve_get_vl() and sme_get_vl() inline Mark Rutland
2026-05-26 15:47 ` Mark Brown
2026-05-27 13:18 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 10/18] arm64: sysreg: Add FPCR and FPSR Mark Rutland
2026-05-26 15:55 ` Mark Brown
2026-05-26 16:51 ` Mark Rutland
2026-05-26 16:54 ` Mark Brown
2026-05-21 13:25 ` [PATCH 11/18] arm64: fpsimd: Split FPSR/FPCR from SVE save/restore Mark Rutland
2026-05-26 16:28 ` Mark Brown
2026-05-27 13:51 ` Mark Rutland
2026-05-27 14:13 ` Mark Brown
2026-05-27 16:13 ` Mark Rutland
2026-05-27 13:44 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 12/18] arm64: fpsimd: Move fpsimd save/restore inline Mark Rutland
2026-05-26 16:44 ` Mark Brown
2026-05-28 16:15 ` Mark Rutland
2026-05-28 16:39 ` Mark Brown
2026-05-27 14:49 ` Vladimir Murzin
2026-05-27 15:34 ` Mark Rutland
2026-05-27 16:13 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 13/18] arm64: fpsimd: Use opaque type for SVE state Mark Rutland
2026-05-26 16:53 ` Mark Brown
2026-05-28 9:45 ` Vladimir Murzin
2026-05-28 16:25 ` Mark Rutland
2026-05-21 13:25 ` [PATCH 14/18] arm64: fpsimd: Use opaque type for SME state Mark Rutland
2026-05-26 16:56 ` Mark Brown
2026-05-28 9:51 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 15/18] arm64: fpsimd: Move SVE save/restore inline Mark Rutland
2026-05-27 12:29 ` Mark Brown
2026-05-28 10:39 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 16/18] arm64: fpsimd: Move sve_flush_live() inline Mark Rutland
2026-05-27 12:54 ` Mark Brown
2026-05-27 16:23 ` Mark Rutland
2026-05-28 10:49 ` Vladimir Murzin
2026-05-21 13:25 ` [PATCH 17/18] arm64: fpsimd: Move SME save/restore inline Mark Rutland
2026-05-26 14:08 ` Mark Rutland
2026-05-26 14:39 ` Vladimir Murzin
2026-05-26 15:28 ` Mark Rutland
2026-05-26 16:38 ` Mark Rutland
2026-05-27 9:00 ` Vladimir Murzin
2026-05-29 9:10 ` Mark Rutland
2026-05-28 12:30 ` Vladimir Murzin
2026-05-28 14:39 ` Mark Rutland
2026-05-21 13:25 ` [PATCH 18/18] arm64: fpsimd: Remove <asm/fpsimdmacros.h> Mark Rutland
2026-05-28 13:10 ` Vladimir Murzin
2026-05-27 8:07 ` [PATCH 00/18] arm64+KVM: FPSIMD/SVE/SME cleanups Marc Zyngier
2026-05-27 10:32 ` Mark Rutland
2026-05-27 14:36 ` Will Deacon
2026-05-28 13:21 ` Vladimir Murzin
2026-05-28 16:28 ` Mark Rutland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46c5ae49-e59c-4014-91d3-f00124897d20@arm.com \
--to=vladimir.murzin@arm$(echo .)com \
--cc=broonie@kernel$(echo .)org \
--cc=catalin.marinas@arm$(echo .)com \
--cc=james.morse@arm$(echo .)com \
--cc=kvmarm@lists$(echo .)linux.dev \
--cc=linux-arm-kernel@lists$(echo .)infradead.org \
--cc=mark.rutland@arm$(echo .)com \
--cc=maz@kernel$(echo .)org \
--cc=oupton@kernel$(echo .)org \
--cc=tabba@google$(echo .)com \
--cc=will@kernel$(echo .)org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox