From: Gabriel Paubert <paubert@iram.es>
To: "Eric W. Biederman" <ebiederm+eric@ccr.net>
Cc: Arvind Sankar <arvinds@MIT.EDU>,
davem@redhat.com, mingo@chiara.csoma.elte.hu, sct@redhat.com,
andrea@e-mind.com, cel@monkey.org, linux-kernel@vger.rutgers.edu,
linux-mm@kvack.org
Subject: Re: [patch] arca-vm-2.2.5
Date: Fri, 9 Apr 1999 11:27:10 +0200 (METDST) [thread overview]
Message-ID: <Pine.HPP.3.96.990409104632.13413S-100000@gra-ux1.iram.es> (raw)
In-Reply-To: <m1n20iwa8t.fsf@flinx.ccr.net>
On 9 Apr 1999, Eric W. Biederman wrote:
> AS> typo there, I guess. the >> should be an integer division. Since the divisor is
> AS> a constant power of 2, the compiler will optimize it into a shift.
>
> Actually I believe:
> #define DIVISOR(x) (x & ~((x >> 1) | ~(x >> 1)))
^^^^^^^^^^^^^^^^^^^^^^^
interesting formula. Unless I'm wrong, set y=x>>1 and evaluate it again:
~(y | ~y)
which should give zero on any binary machine. So I think you've come up
with a sophisticated way of generating an OOPS :-) at least on
architectures which don't silently and happily divide by zero.
I've needed it quite often but I don't know of any short formula which
computes the log2 of an integer (whether rounded up or down does not
matter) with standard C operators.
I've been looking for it quite carefully, and I don't even think that it
is possible: there is an example on how to do this in the HP-UX assembler
documentation, it takes 18 machine instructions (no loops, performing a
binary search) and it has been written by people who, as you would
expect, know very well the tricks of the architecture (cascaded
conditional nullification to perform branchless if then else: the then
branch is a shift, the else branch is an add).
Code size or time are not the problem here since it is a compile time
constant, but trying to find a simple C expression to approximate log2 is
probably futile (and not worth the effort in this case).
Gabriel.
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org. For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/
next prev parent reply other threads:[~1999-04-09 9:32 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-04-01 23:32 Andrea Arcangeli
1999-04-04 21:07 ` Chuck Lever
1999-04-05 0:22 ` Andrea Arcangeli
1999-04-05 13:23 ` Mark Hemment
1999-04-05 15:56 ` Andrea Arcangeli
1999-04-07 11:28 ` [patch] only-one-cache-query [was Re: [patch] arca-vm-2.2.5] Andrea Arcangeli
1999-04-07 13:06 ` Stephen C. Tweedie
1999-04-07 13:49 ` Andrea Arcangeli
1999-04-07 13:42 ` Andrea Arcangeli
1999-04-07 13:47 ` Ingo Molnar
1999-04-07 14:08 ` Andrea Arcangeli
1999-04-05 20:24 ` [patch] arca-vm-2.2.5 Horst von Brand
1999-04-05 23:25 ` Andrea Arcangeli
1999-04-05 23:37 ` Horst von Brand
1999-04-06 1:23 ` Andrea Arcangeli
1999-04-17 11:12 ` Andrea Arcangeli
1999-04-05 21:31 ` Chuck Lever
1999-04-06 0:15 ` Andrea Arcangeli
1999-04-06 2:14 ` Doug Ledford
1999-04-06 13:04 ` Andrea Arcangeli
1999-04-06 21:31 ` Stephen C. Tweedie
1999-04-06 22:27 ` Andrea Arcangeli
1999-04-07 12:27 ` Stephen C. Tweedie
1999-04-25 3:22 ` Chuck Lever
1999-04-06 5:52 ` Chuck Lever
1999-04-06 13:09 ` Andrea Arcangeli
1999-04-06 16:19 ` Eric W. Biederman
1999-04-06 20:26 ` Andrea Arcangeli
1999-04-07 5:00 ` Eric W. Biederman
1999-04-07 11:36 ` Andrea Arcangeli
1999-04-06 14:02 ` Stephen C. Tweedie
1999-04-06 15:38 ` Chuck Lever
1999-04-06 17:16 ` Andrea Arcangeli
1999-04-06 18:07 ` Andrea Arcangeli
1999-04-06 21:22 ` Stephen C. Tweedie
1999-04-06 22:19 ` Ingo Molnar
1999-04-06 22:40 ` David Miller
1999-04-06 22:49 ` Ingo Molnar
1999-04-06 22:53 ` David Miller
1999-04-07 15:59 ` Gabriel Paubert
1999-04-07 21:07 ` Arvind Sankar
1999-04-09 6:58 ` Eric W. Biederman
1999-04-09 9:27 ` Gabriel Paubert [this message]
1999-04-09 15:40 ` Eric W. Biederman
1999-04-08 8:09 ` Carlo Daffara
1999-04-06 22:31 ` Andrea Arcangeli
1999-04-06 20:47 ` Chuck Lever
1999-04-06 21:04 ` Andrea Arcangeli
1999-04-06 21:11 ` Stephen C. Tweedie
1999-04-06 14:00 ` Stephen C. Tweedie
1999-04-06 16:29 ` Andrea Arcangeli
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=Pine.HPP.3.96.990409104632.13413S-100000@gra-ux1.iram.es \
--to=paubert@iram.es \
--cc=andrea@e-mind.com \
--cc=arvinds@MIT.EDU \
--cc=cel@monkey.org \
--cc=davem@redhat.com \
--cc=ebiederm+eric@ccr.net \
--cc=linux-kernel@vger.rutgers.edu \
--cc=linux-mm@kvack.org \
--cc=mingo@chiara.csoma.elte.hu \
--cc=sct@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox