This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports 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, v5] ARM: Add Cortex-A15 optimized NEON and VFP memcpy routines, with IFUNC.


> +++ b/ports/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c
> @@ -0,0 +1,33 @@
> +/* Copyright (C) 2005-2013 Free Software Foundation, Inc.

The first line of each new file should be a descriptive comment.

> +void *__memcpy_arm (void *dest, const void *src, size_t n);
> +
> +/* Copy memory like memcpy, but no return value required.  Can't alias
> +   to memcpy because it's not defined in the same translation
> +   unit.  */

Why not just define the aliases in memcpy.S instead?
(Then this can be an empty file just to override arm/aeabi_memcpy.c.)

You should also add some comments about why it's important that the
__aeabi_* functions use __memcpy_arm rather than memcpy.

> +++ b/ports/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
> @@ -0,0 +1,44 @@
> +/* Enumerate available IFUNC implementations of a function.  arm version.

ARM in caps.

> +	      IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_ARM_VFPv3,
> +			      __memcpy_vfp)

HWCAP_ARM_VFP.

> +ENTRY(memcpy)
> +	.type	memcpy, %gnu_indirect_function
> +	ldr	r1, .Lmemcpy_arm
> +	tst	r0, #HWCAP_ARM_VFP
> +	ldrne	r1, .Lmemcpy_vfp

If __SOFTFP__ is predefined by the compiler, then the compiler is presuming
VFP support anyway.  So you can make this:

#ifdef __SOFTFP__
	ldr	r1, .Lmemcpy_arm
	tst	r0, #HWCAP_ARM_VFP
	ldrne	r1, .Lmemcpy_vfp
#else
	ldr	r1, .Lmemcpy_vfp
#endif

(and also conditionalize .Lmemcpy_arm, below).

> +# If we are configuring for armv7 we need binutils 2.21 to ensure that
> +# NEON alignments are assembled correctly.
> +if test $machine = arm/armv7; then
> +   AC_CHECK_PROG_VER(AS, $AS, --version,
> +		  [GNU assembler.* \([0-9]*\.[0-9.]*\)],
> +		  [2.1[0-9][0-9]*|2.[2-9][1-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
> +fi

Just put this in sysdeps/arm/armv7/configure.in and don't test $machine.
Whenever possible, it is far better to test for an actual relevant detail
empirically rather than testing version numbers.  If you can show an
example of an instruction sequence that is misassembled by binutils 2.20
then we can help you construct a more precise configure check.


Thanks,
Roland


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