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

Steven Munroe munroesj@linux.vnet.ibm.com
Tue Jun 9 16:38:00 GMT 2015


On Tue, 2015-06-09 at 17:42 +0200, Ondřej Bílka wrote:
> On Tue, Jun 09, 2015 at 10:06:33AM -0500, Steven Munroe wrote:
> > On Tue, 2015-06-09 at 15:47 +0100, Szabolcs Nagy wrote:
> > > 
> > > On 08/06/15 22:03, Carlos Eduardo Seo wrote:
> > > > The proposed patch adds a new feature for powerpc. In order to get
> > > > faster access to the HWCAP/HWCAP2 bits, we now store them in the TCB.
> > > > This enables users to write versioned code based on the HWCAP bits
> > > > without going through the overhead of reading them from the auxiliary
> > > > vector.
> > 
> > > i assume this is for multi-versioning.
> > 
> > The intent is for the compiler to implement the equivalent of
> > __builtin_cpu_supports("feature"). X86 has the cpuid instruction, POWER
> > is RISC so we use the HWCAP. The trick to access the HWCAP[2]
> > efficiently as getauxv and scanning the auxv is too slow for inline
> > optimizations.
> > 
> > > i dont see how the compiler can generate code to access the
> > > hwcap bits currently (without making assumptions about libc
> > > interfaces).
> > > 
> > These offset will become a durable part the PowerPC 64-bit ELF V2 ABI.
> > 
> > The TCB offsets are already fixed and can not change from release to
> > release.
> > 
> I don't have problem with this but why do you add tls, how can different
> threads have different ones when kernel could move them between cores.
> 
> So instead we just add to libc api following two variables below. These would
> be initialized by linker as we will probably use them internally.
> 
> extern int __hwcap, __hwcap2;
> 
The Power ABI's address the TCB off a dedicated GPR (R2 or R13). This
guarantees one instruction load from TCB.

A Static variable would require a an indirect load via the TOC/GOT
(which can be megabytes for a large program/library). I really really
want the avoid that.

The point is to make fast decisions about which code the execute.
STT_GNU_IFUNC is just too complication for most application programmers
to use.

Now if the GLIBC community wants to provide a durable API for static
access to the HWCAP. I have not problem with that, but it does not solve
this problem.





More information about the Libc-alpha mailing list