From: Nicolas Pitre <nicolas.pitre@linaro.org>
To: "Alexey Brodkin" <Alexey.Brodkin@synopsys.com>,
"Måns Rullgård" <mans@mansr.com>
Cc: Arnd Bergmann <arnd@arndb.de>,
rmk+kernel@arm.linux.org.uk, linux-arch@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH 1/5] div64.h: optimize do_div() for power-of-two constant divisors
Date: Mon, 02 Nov 2015 17:33:26 -0500 [thread overview]
Message-ID: <1446503610-6942-2-git-send-email-nicolas.pitre@linaro.org> (raw)
In-Reply-To: <1446503610-6942-1-git-send-email-nicolas.pitre@linaro.org>
On 32-bit targets, gcc is able to do the right thing with a constant
divisor that happens to be a power of two i.e. it turns the division
into a right shift inline.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
include/asm-generic/div64.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/include/asm-generic/div64.h b/include/asm-generic/div64.h
index 8f4e319334..47aa1e2134 100644
--- a/include/asm-generic/div64.h
+++ b/include/asm-generic/div64.h
@@ -41,7 +41,12 @@ extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
uint32_t __base = (base); \
uint32_t __rem; \
(void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
- if (likely(((n) >> 32) == 0)) { \
+ if (__builtin_constant_p(__base) && \
+ (__base & (__base - 1)) == 0) { \
+ /* constant power of 2: gcc is fine */ \
+ __rem = (n) & (__base - 1); \
+ (n) /= __base; \
+ } else if (likely(((n) >> 32) == 0)) { \
__rem = (uint32_t)(n) % __base; \
(n) = (uint32_t)(n) / __base; \
} else \
--
2.4.3
next prev parent reply other threads:[~2015-11-02 22:33 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-02 22:33 [PATCH 0/5] 64-by-32 ddivision optimization for constant divisors on 32-bit machines Nicolas Pitre
2015-11-02 22:33 ` Nicolas Pitre
2015-11-02 22:33 ` Nicolas Pitre [this message]
2015-11-02 22:33 ` [PATCH 1/5] div64.h: optimize do_div() for power-of-two constant divisors Nicolas Pitre
2015-11-02 22:33 ` [PATCH 2/5] do_div(): generic optimization for constant divisor on 32-bit machines Nicolas Pitre
2015-11-03 5:32 ` kbuild test robot
2015-11-03 9:15 ` Arnd Bergmann
2015-11-04 21:04 ` Nicolas Pitre
2015-11-04 21:42 ` Måns Rullgård
2015-11-04 21:42 ` Måns Rullgård
2015-11-02 22:33 ` [PATCH 3/5] __div64_const32(): abstract out the actual 128-bit cross product code Nicolas Pitre
2015-11-02 22:33 ` Nicolas Pitre
2015-11-02 22:33 ` [PATCH 4/5] __div64_32(): make it overridable at compile time Nicolas Pitre
2015-11-02 22:33 ` Nicolas Pitre
2015-11-02 22:33 ` [PATCH 5/5] ARM: asm/div64.h: adjust to generic codde Nicolas Pitre
2015-11-02 22:33 ` Nicolas Pitre
2015-11-03 1:25 ` kbuild test robot
2015-11-03 4:03 ` Nicolas Pitre
2015-11-03 21:39 ` kbuild test robot
2015-11-19 16:36 ` Måns Rullgård
2015-11-19 16:42 ` Nicolas Pitre
2015-11-19 16:44 ` Måns Rullgård
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=1446503610-6942-2-git-send-email-nicolas.pitre@linaro.org \
--to=nicolas.pitre@linaro.org \
--cc=Alexey.Brodkin@synopsys.com \
--cc=arnd@arndb.de \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mans@mansr.com \
--cc=rmk+kernel@arm.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox