From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Stefan Agner <stefan@agner.ch>
Cc: clang-built-linux@googlegroups.com, arnd@arndb.de,
ard.biesheuvel@linaro.org, ndesaulniers@google.com,
linux-kernel@vger.kernel.org, jiancai@google.com,
yamada.masahiro@socionext.com, manojgupta@google.com,
robin.murphy@arm.com, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 1/3] ARM: use .fpu assembler directives instead of assembler arguments
Date: Sun, 19 Apr 2020 15:04:15 +0100 [thread overview]
Message-ID: <20200419140415.GW25745@shell.armlinux.org.uk> (raw)
In-Reply-To: <a78f7e5820a6b827c9d68362a94dcbf80a317dc9.1587299429.git.stefan@agner.ch>
On Sun, Apr 19, 2020 at 02:35:49PM +0200, Stefan Agner wrote:
> Explicit FPU selection has been introduced in commit 1a6be26d5b1a
> ("[ARM] Enable VFP to be built when non-VFP capable CPUs are selected")
> to make use of assembler mnemonics for VFP instructions.
>
> However, clang currently does not support passing assembler flags
> like this and errors out with:
> clang-10: error: the clang compiler does not support '-Wa,-mfpu=softvfp+vfp'
>
> Make use of the .fpu assembler directives to select the floating point
> hardware selectively. Also use the new unified assembler language
> mnemonics. This allows to build these procedures with Clang.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/762
> Signed-off-by: Stefan Agner <stefan@agner.ch>
> ---
> Changes in v2:
> - Add link in commit message
>
> arch/arm/vfp/Makefile | 2 --
> arch/arm/vfp/vfphw.S | 30 +++++++++++++++++++-----------
> 2 files changed, 19 insertions(+), 13 deletions(-)
>
> diff --git a/arch/arm/vfp/Makefile b/arch/arm/vfp/Makefile
> index 9975b63ac3b0..749901a72d6d 100644
> --- a/arch/arm/vfp/Makefile
> +++ b/arch/arm/vfp/Makefile
> @@ -8,6 +8,4 @@
> # ccflags-y := -DDEBUG
> # asflags-y := -DDEBUG
>
> -KBUILD_AFLAGS :=$(KBUILD_AFLAGS:-msoft-float=-Wa,-mfpu=softvfp+vfp -mfloat-abi=soft)
> -
> obj-y += vfpmodule.o entry.o vfphw.o vfpsingle.o vfpdouble.o
> diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
> index b2e560290860..e214007a20a2 100644
> --- a/arch/arm/vfp/vfphw.S
> +++ b/arch/arm/vfp/vfphw.S
> @@ -258,11 +258,13 @@ vfp_current_hw_state_address:
>
> ENTRY(vfp_get_float)
> tbl_branch r0, r3, #3
> - .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mrc p10, 0, r0, c\dr, c0, 0 @ fmrs r0, s0
> + .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
Apart from the extraneous comma above, this looks fine, thanks.
> +1: vmov r0, s\dr
> ret lr
> .org 1b + 8
> -1: mrc p10, 0, r0, c\dr, c0, 4 @ fmrs r0, s1
> + .endr
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov r0, s\dr
> ret lr
> .org 1b + 8
> .endr
> @@ -271,10 +273,12 @@ ENDPROC(vfp_get_float)
> ENTRY(vfp_put_float)
> tbl_branch r1, r3, #3
> .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mcr p10, 0, r0, c\dr, c0, 0 @ fmsr r0, s0
> +1: vmov s\dr, r0
> ret lr
> .org 1b + 8
> -1: mcr p10, 0, r0, c\dr, c0, 4 @ fmsr r0, s1
> + .endr
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov s\dr, r0
> ret lr
> .org 1b + 8
> .endr
> @@ -282,15 +286,17 @@ ENDPROC(vfp_put_float)
>
> ENTRY(vfp_get_double)
> tbl_branch r0, r3, #3
> + .fpu vfpv2
> .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: fmrrd r0, r1, d\dr
> +1: vmov r0, r1, d\dr
> ret lr
> .org 1b + 8
> .endr
> #ifdef CONFIG_VFPv3
> @ d16 - d31 registers
> - .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mrrc p11, 3, r0, r1, c\dr @ fmrrd r0, r1, d\dr
> + .fpu vfpv3
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov r0, r1, d\dr
> ret lr
> .org 1b + 8
> .endr
> @@ -304,15 +310,17 @@ ENDPROC(vfp_get_double)
>
> ENTRY(vfp_put_double)
> tbl_branch r2, r3, #3
> + .fpu vfpv2
> .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: fmdrr d\dr, r0, r1
> +1: vmov d\dr, r0, r1
> ret lr
> .org 1b + 8
> .endr
> #ifdef CONFIG_VFPv3
> + .fpu vfpv3
> @ d16 - d31 registers
> - .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov d\dr, r0, r1
> ret lr
> .org 1b + 8
> .endr
> --
> 2.25.1
>
>
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 10.2Mbps down 587kbps up
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Stefan Agner <stefan@agner.ch>
Cc: arnd@arndb.de, ard.biesheuvel@linaro.org, robin.murphy@arm.com,
yamada.masahiro@socionext.com, ndesaulniers@google.com,
manojgupta@google.com, jiancai@google.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com
Subject: Re: [PATCH v2 1/3] ARM: use .fpu assembler directives instead of assembler arguments
Date: Sun, 19 Apr 2020 15:04:15 +0100 [thread overview]
Message-ID: <20200419140415.GW25745@shell.armlinux.org.uk> (raw)
In-Reply-To: <a78f7e5820a6b827c9d68362a94dcbf80a317dc9.1587299429.git.stefan@agner.ch>
On Sun, Apr 19, 2020 at 02:35:49PM +0200, Stefan Agner wrote:
> Explicit FPU selection has been introduced in commit 1a6be26d5b1a
> ("[ARM] Enable VFP to be built when non-VFP capable CPUs are selected")
> to make use of assembler mnemonics for VFP instructions.
>
> However, clang currently does not support passing assembler flags
> like this and errors out with:
> clang-10: error: the clang compiler does not support '-Wa,-mfpu=softvfp+vfp'
>
> Make use of the .fpu assembler directives to select the floating point
> hardware selectively. Also use the new unified assembler language
> mnemonics. This allows to build these procedures with Clang.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/762
> Signed-off-by: Stefan Agner <stefan@agner.ch>
> ---
> Changes in v2:
> - Add link in commit message
>
> arch/arm/vfp/Makefile | 2 --
> arch/arm/vfp/vfphw.S | 30 +++++++++++++++++++-----------
> 2 files changed, 19 insertions(+), 13 deletions(-)
>
> diff --git a/arch/arm/vfp/Makefile b/arch/arm/vfp/Makefile
> index 9975b63ac3b0..749901a72d6d 100644
> --- a/arch/arm/vfp/Makefile
> +++ b/arch/arm/vfp/Makefile
> @@ -8,6 +8,4 @@
> # ccflags-y := -DDEBUG
> # asflags-y := -DDEBUG
>
> -KBUILD_AFLAGS :=$(KBUILD_AFLAGS:-msoft-float=-Wa,-mfpu=softvfp+vfp -mfloat-abi=soft)
> -
> obj-y += vfpmodule.o entry.o vfphw.o vfpsingle.o vfpdouble.o
> diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
> index b2e560290860..e214007a20a2 100644
> --- a/arch/arm/vfp/vfphw.S
> +++ b/arch/arm/vfp/vfphw.S
> @@ -258,11 +258,13 @@ vfp_current_hw_state_address:
>
> ENTRY(vfp_get_float)
> tbl_branch r0, r3, #3
> - .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mrc p10, 0, r0, c\dr, c0, 0 @ fmrs r0, s0
> + .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
Apart from the extraneous comma above, this looks fine, thanks.
> +1: vmov r0, s\dr
> ret lr
> .org 1b + 8
> -1: mrc p10, 0, r0, c\dr, c0, 4 @ fmrs r0, s1
> + .endr
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov r0, s\dr
> ret lr
> .org 1b + 8
> .endr
> @@ -271,10 +273,12 @@ ENDPROC(vfp_get_float)
> ENTRY(vfp_put_float)
> tbl_branch r1, r3, #3
> .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mcr p10, 0, r0, c\dr, c0, 0 @ fmsr r0, s0
> +1: vmov s\dr, r0
> ret lr
> .org 1b + 8
> -1: mcr p10, 0, r0, c\dr, c0, 4 @ fmsr r0, s1
> + .endr
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov s\dr, r0
> ret lr
> .org 1b + 8
> .endr
> @@ -282,15 +286,17 @@ ENDPROC(vfp_put_float)
>
> ENTRY(vfp_get_double)
> tbl_branch r0, r3, #3
> + .fpu vfpv2
> .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: fmrrd r0, r1, d\dr
> +1: vmov r0, r1, d\dr
> ret lr
> .org 1b + 8
> .endr
> #ifdef CONFIG_VFPv3
> @ d16 - d31 registers
> - .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mrrc p11, 3, r0, r1, c\dr @ fmrrd r0, r1, d\dr
> + .fpu vfpv3
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov r0, r1, d\dr
> ret lr
> .org 1b + 8
> .endr
> @@ -304,15 +310,17 @@ ENDPROC(vfp_get_double)
>
> ENTRY(vfp_put_double)
> tbl_branch r2, r3, #3
> + .fpu vfpv2
> .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: fmdrr d\dr, r0, r1
> +1: vmov d\dr, r0, r1
> ret lr
> .org 1b + 8
> .endr
> #ifdef CONFIG_VFPv3
> + .fpu vfpv3
> @ d16 - d31 registers
> - .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr
> + .irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
> +1: vmov d\dr, r0, r1
> ret lr
> .org 1b + 8
> .endr
> --
> 2.25.1
>
>
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 10.2Mbps down 587kbps up
next prev parent reply other threads:[~2020-04-19 14:04 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-19 12:35 [PATCH v2 0/3] ARM: make use of UAL VFP mnemonics when possible Stefan Agner
2020-04-19 12:35 ` Stefan Agner
2020-04-19 12:35 ` [PATCH v2 1/3] ARM: use .fpu assembler directives instead of assembler arguments Stefan Agner
2020-04-19 12:35 ` Stefan Agner
2020-04-19 14:04 ` Russell King - ARM Linux admin [this message]
2020-04-19 14:04 ` Russell King - ARM Linux admin
2020-04-19 12:35 ` [PATCH v2 2/3] ARM: use VFP assembler mnemonics in register load/store macros Stefan Agner
2020-04-19 12:35 ` Stefan Agner
2020-04-19 12:35 ` [PATCH v2 3/3] ARM: use VFP assembler mnemonics if available Stefan Agner
2020-04-19 12:35 ` Stefan Agner
2020-04-19 14:12 ` [PATCH v2 0/3] ARM: make use of UAL VFP mnemonics when possible Russell King - ARM Linux admin
2020-04-19 14:12 ` Russell King - ARM Linux admin
2020-04-19 21:20 ` Stefan Agner
2020-04-19 21:20 ` Stefan Agner
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=20200419140415.GW25745@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=ard.biesheuvel@linaro.org \
--cc=arnd@arndb.de \
--cc=clang-built-linux@googlegroups.com \
--cc=jiancai@google.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manojgupta@google.com \
--cc=ndesaulniers@google.com \
--cc=robin.murphy@arm.com \
--cc=stefan@agner.ch \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.