ZERO_REGION_SIZE
Patrick Kelsey
kelsey at ieee.org
Thu Nov 15 22:11:07 UTC 2012
On Thu, Nov 15, 2012 at 5:02 PM, Juli Mallett <jmallett at freebsd.org> wrote:
> On Thu, Nov 15, 2012 at 1:07 PM, Warner Losh <imp at bsdimp.com> wrote:
>
>>
>> On Nov 15, 2012, at 1:13 PM, Alan Cox wrote:
>> > P.S. I would encourage someone with hardware to look into implementing a
>> > non-iterative ffs*() using (d)clz. The MIPS pmap would benefit from
>> > this. Basically, most pmap_enter() calls are doing an ffs*().
>>
>> ffs finds the first bit set. clz counts the number of leading zeros and
>> thus finds the last bit set. Would a non-iterative fls* be helpful?
>>
>
> Right. And no widespread ctz/ffs MIPS instructions as far as I know. We
> could use pop/dpop on processors that support them to do non-iterative
> ffs*, with a few additional instructions, though.
I was thinking something like this might work:
value to ffs is in r1, MSB is the index of the MSB (so, 31 or 63):
if (0 == r1) return(your_choice);
r2 = r1 - 1;
r2 = r1 ^ r2;
return (MSB - clz(r2));
-Patrick
More information about the freebsd-mips
mailing list