This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] powerpc: New feature - HWCAP/HWCAP2 bits in the TCB


On Fri, Jul 10, 2015 at 01:12:46AM +0300, Kalle Olavi Niemitalo wrote:
> Steven Munroe <munroesj@linux.vnet.ibm.comcom> writes:
> 
> > if (__builtin_cpu_supports(ARCH_2_07) &&   
> >     __builtin_cpu_supports(VEC_CRYPTO))
> >
> > This is 3 instructions (lwz, andi., bc) as packed bits, but 5 or 6 as
> > byte Boolean. 
> 
> I would understand 3 instructions for "||" (test the zero flag) but
> how do you do it for "&&"?  I have hardly any powerpc experience
> though, so perhaps there is some trick I don't realize.
> 
> If not, and if "&&" is more common than "||" in HWCAP tests, then
> would it be worthwhile to invert the HWCAP bits in TCB?  I guess
> it wouldn't, because such a format would increase the risk that
> the program crashes if the bits were not properly initialized
> before they were read.

A trick here is just like doing macro expansion. You need to realize
that arguments are masks so you test feature F by (get_hwcap & F) == F

Then this expands into

if (((get_hwcap & ARCH_2_07) == ARCH_2_07) 
      && ((get_hwcap & VEC_CRYPTO) == VEC_CRYPTO))

Then you realize that its true if and only if all bits from ARCH_2_07
and VEC_CRYPTO masks are true. You could write that as 

if ((get_hwcap & (ARCH_2_07 | VEC_CRYPTO)) == (ARCH_2_07 | VEC_CRYPTO))


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]