Would it be worth putting the logic in an aptly named (private) method? 
Something like:

...
private long alignDown(long address, long alignment) {
   return address & <whatever>;
}
...
long mapBase = alignDown(address, ps);
…


Cheers,
Mikael

> On May 13, 2019, at 9:14 AM, Andrew Dinn <ad...@redhat.com> wrote:
> 
> Thank you for looking at the patch.
> 
> On 28/04/2019 18:09, Andrew Haley wrote:
>> On 4/25/19 5:34 PM, Andrew Dinn wrote:
>>>   long map_base = (address & ~(ps - 1));
>> This looks like a hard way to write
>>   long map_base = address & -ps;
> 
> My version certainly uses more characters, that is for sure. However, I chose 
> (and still prefer) this form for /clarity/. It seems to me to communicate as 
> simply as possible what mask is being constructed, granted the starting 
> premise that ps is a power of 2 (i.e. has only a single bit set).
> 
> It only requires elementary knowledge of binary representations to see:
> 
>  firstly, that ps-1 clears the original bit and sets all lower bits;
> 
>  next that ~(ps-1) clears those lower bits and sets all bits from the 
> original (inclusive) upwards;
> 
>  then that the result can be used as a mask to clear those same bottom bits 
> from address;
> 
>  finally that this mask operation is equivalent to rounding down to the 
> relevant power of two.
> 
> I find your alternative (a tad) less clear because it employs an arithmetic 
> operation to achieve the requisite bitwise transformation. That the two 
> expressions compute to equivalent results requires some experience and 
> understanding of the twos-complement representations of numbers rather than 
> basic knowledge of bit fields.
> 
> As a gcc hacker 'your mileage may vary' ;-)
> 
> Crucially, every compiler we rely on is going to produce the same code in 
> both cases.
> 
> regards,
> 
> 
> Andrew Dinn
> -----------
> Senior Principal Software Engineer
> Red Hat UK Ltd
> Registered in England and Wales under Company Registration No. 03798903
> Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander

Reply via email to