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


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.

> 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?

-- 
Tulio Magno


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