From: daniel.thompson@linaro.org (Daniel Thompson)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3] ARM: add get_user() support for 8 byte types
Date: Tue, 17 Jun 2014 14:28:44 +0100 [thread overview]
Message-ID: <53A0428C.10200@linaro.org> (raw)
In-Reply-To: <20140617110908.GH23430@n2100.arm.linux.org.uk>
On 17/06/14 12:09, Russell King - ARM Linux wrote:
> On Tue, Jun 17, 2014 at 11:17:23AM +0100, Daniel Thompson wrote:
>> ... at this point there is a narrowing cast followed by an implicit
>> widening. This results in compiler either ignoring r3 altogether or, if
>> spilling to the stack, generating code to set r3 to zero before doing
>> the store.
>
> In actual fact, there's very little difference between the two
> implementations in terms of generated code.
>
> The difference between them is what happens on the 64-bit big endian
> narrowing case, where we use __get_user_4 with your version. This
> adds one additional instruction.
Good point.
> and 64-bit narrowed to 32-bit:
>
> str lr, [sp, #-4]!
> - mov ip, r0
> + mov r3, r0
> mov r0, r1
> #APP
> @ 275 "t-getuser.c" 1
> - bl __get_user_8
> + bl __get_user_4
> @ 0 "" 2
> - str r2, [ip, #0]
> + str r2, [r3, #0]
> ldr pc, [sp], #4
The later case avoids allocating r3 for the __get_user_x and should
reduce register pressure and, potentially, saves a few instructions
elsewhere (one of my rather large test functions does demonstrate this
effect).
I don't know if we care about that. If we do I'm certainly happy to put
a patch together than exploits this (whilst avoiding the add in the big
endian case).
Daniel.
WARNING: multiple messages have this Message-ID (diff)
From: Daniel Thompson <daniel.thompson@linaro.org>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Rob Clark <robdclark@gmail.com>,
Nicolas Pitre <nicolas.pitre@linaro.org>,
Arnd Bergmann <arnd.bergmann@linaro.org>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, patches@linaro.org,
linaro-kernel@lists.linaro.org
Subject: Re: [PATCH v3] ARM: add get_user() support for 8 byte types
Date: Tue, 17 Jun 2014 14:28:44 +0100 [thread overview]
Message-ID: <53A0428C.10200@linaro.org> (raw)
In-Reply-To: <20140617110908.GH23430@n2100.arm.linux.org.uk>
On 17/06/14 12:09, Russell King - ARM Linux wrote:
> On Tue, Jun 17, 2014 at 11:17:23AM +0100, Daniel Thompson wrote:
>> ... at this point there is a narrowing cast followed by an implicit
>> widening. This results in compiler either ignoring r3 altogether or, if
>> spilling to the stack, generating code to set r3 to zero before doing
>> the store.
>
> In actual fact, there's very little difference between the two
> implementations in terms of generated code.
>
> The difference between them is what happens on the 64-bit big endian
> narrowing case, where we use __get_user_4 with your version. This
> adds one additional instruction.
Good point.
> and 64-bit narrowed to 32-bit:
>
> str lr, [sp, #-4]!
> - mov ip, r0
> + mov r3, r0
> mov r0, r1
> #APP
> @ 275 "t-getuser.c" 1
> - bl __get_user_8
> + bl __get_user_4
> @ 0 "" 2
> - str r2, [ip, #0]
> + str r2, [r3, #0]
> ldr pc, [sp], #4
The later case avoids allocating r3 for the __get_user_x and should
reduce register pressure and, potentially, saves a few instructions
elsewhere (one of my rather large test functions does demonstrate this
effect).
I don't know if we care about that. If we do I'm certainly happy to put
a patch together than exploits this (whilst avoiding the add in the big
endian case).
Daniel.
next prev parent reply other threads:[~2014-06-17 13:28 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-12 15:42 [PATCH v3] ARM: add get_user() support for 8 byte types Daniel Thompson
2014-06-12 15:42 ` Daniel Thompson
2014-06-12 15:58 ` Russell King - ARM Linux
2014-06-12 15:58 ` Russell King - ARM Linux
2014-06-17 10:17 ` Daniel Thompson
2014-06-17 10:17 ` Daniel Thompson
2014-06-17 11:09 ` Russell King - ARM Linux
2014-06-17 11:09 ` Russell King - ARM Linux
2014-06-17 13:28 ` Daniel Thompson [this message]
2014-06-17 13:28 ` Daniel Thompson
2014-06-17 13:36 ` Russell King - ARM Linux
2014-06-17 13:36 ` Russell King - ARM Linux
2014-06-17 13:54 ` Daniel Thompson
2014-06-17 13:54 ` Daniel Thompson
2014-06-12 17:04 ` Arnd Bergmann
2014-06-12 17:04 ` Arnd Bergmann
2014-06-20 10:01 ` [PATCH v4] " Daniel Thompson
2014-06-20 10:01 ` Daniel Thompson
2014-07-10 19:47 ` [PATCH 3.16.0-rc3-rmk v5] " Daniel Thompson
2014-07-10 19:47 ` Daniel Thompson
2014-08-21 5:36 ` Victor Kamensky
2014-08-21 5:36 ` Victor Kamensky
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=53A0428C.10200@linaro.org \
--to=daniel.thompson@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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.