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 5/6] PowerPC64 ENTRY_TOCLESS


On Tue, Jun 13, 2017 at 09:23:12AM -0300, Tulio Magno Quites Machado Filho wrote:
> Alan Modra <amodra@gmail.com> writes:
> 
> > A number of functions in the sysdeps/powerpc/powerpc64/ tree don't use
> > or change r2, yet declare a global entry that sets up r2.  This patch
> > fixes that problem, and consolidates the ENTRY and EALIGN macros.
> >
> > 	* sysdeps/powerpc/powerpc64/sysdep.h: Formatting.
> > 	(NOPS, ENTRY_3): New macros.
> > 	(ENTRY): Rewrite.
> > 	(ENTRY_TOCLESS): Define.
> > 	(EALIGN, EALIGN_W_0, EALIGN_W_1, EALIGN_W_2, EALIGN_W_4, EALIGN_W_5,
> > 	EALIGN_W_6, EALIGN_W_7, EALIGN_W_8): Delete.
> > 	* sysdeps/powerpc/powerpc64/a2/memcpy.S: Replace EALIGN with ENTRY.
> > 	* sysdeps/powerpc/powerpc64/dl-trampoline.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_floor.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_rint.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_round.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/memset.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strstr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/s_cosf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/s_sinf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strcasestr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/addmul_1.S: Use ENTRY_TOCLESS.
> > 	* sysdeps/powerpc/powerpc64/cell/memcpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_isnan.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/fpu/s_llrintf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/lshift.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/memcpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/mul_1.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power4/memcmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power4/memcpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power4/memset.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power4/strncmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_ceil.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_ceilf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_floor.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_floorf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_round.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_roundf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_trunc.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5+/fpu/s_truncf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power5/fpu/s_isnan.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power6/fpu/s_copysign.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power6/fpu/s_isnan.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power6/memcpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power6/memset.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power6x/fpu/s_isnan.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power6x/fpu/s_llrint.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/add_n.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/memchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/memcmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/memcpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/memmove.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/mempcpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/memrchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/memset.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/rawmemchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strcasecmp.S (strcasecmp_l):
> > 	Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strchrnul.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strcmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strlen.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strncmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strncpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strnlen.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power7/strrchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/s_isinf.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/s_isnan.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/s_llrint.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/memcmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/memset.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strcmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strcpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strlen.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strncmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strncpy.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strnlen.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strrchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power8/strspn.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power9/strcmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/power9/strncmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/strchr.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/strcmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/strlen.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/strncmp.S: Likewise.
> > 	* sysdeps/powerpc/powerpc64/ppc-mcount.S: Store LR earlier.  Don't
> > 	add nop when SHARED.
> > 	* sysdeps/powerpc/powerpc64/start.S: Fix comment.
> > 	* sysdeps/powerpc/powerpc64/multiarch/strrchr-power8.S (ENTRY): Don't
> > 	define.
> > 	(ENTRY_TOCLESS): Define.
> 
> There are 2 more functions that could benefit from this optimization as well:
>  - sysdeps/powerpc/fpu/s_fmaf.S
>  - sysdeps/powerpc/fpu/s_fma.S
> 
> Notice they're reused in powerpc32.

I see.  I hadn't looked for included files.  This will mean modifying
powerpc32/sysdep.h to add

#define ENTRY_TOCLESS(name) ENTRY(name)

> 
> > diff --git a/sysdeps/powerpc/powerpc64/power8/strcasestr.S b/sysdeps/powerpc/powerpc64/power8/strcasestr.S
> > index 6ac6572..3f59cb0 100644
> > --- a/sysdeps/powerpc/powerpc64/power8/strcasestr.S
> > +++ b/sysdeps/powerpc/powerpc64/power8/strcasestr.S
> > @@ -85,7 +85,7 @@
> >  /* TODO: change this to .machine power8 when the minimum required binutils
> >     allows it.  */
> >  	.machine  power7
> > -EALIGN (STRCASESTR, 4, 0)
> > +ENTRY (STRCASESTR, 4)
> >  	CALL_MCOUNT 2
> >  	mflr	r0			/* Load link register LR to r0.  */
> >  	std	r31, -8(r1)		/* Save callers register r31.  */
> 
> 
> Isn't it safe to use ENTRY_TOCLESS here too?

No, the code uses @got@tprel(r2).

-- 
Alan Modra
Australia Development Lab, IBM


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