Multiple versions of routines tuned for different devices

Matthew Gretton-Dann matthew.gretton-dann@arm.com
Tue Nov 22 15:35:00 GMT 2011


On 11/11/11 18:55, David Gilbert wrote:
> Hi,
>     What's the right way to include multiple versions of string/memory
> routines, where the appropriate
> choice can't be determined from compiler defines?
>
>    Greta's memcpy for A15 ARMs is good, however I have a routine that
> is faster on the older/current
> A9 cores;  I don't believe there is a way to get gcc to tell the code
> what -mtune is passed to it.

Can we write some configure magic to look at how gcc is being invoked 
and use that to create a pre-define?

So in configure scan "$(CC) $(CFLAGS)" for a -mtune option and use the 
value of that to create an appropriate predefine.

If -mtune isn't in the command line, then for ARM EABI targets you could 
compile a dummy file with -S to produce assembly output which will have 
.cpu/.arch/.fpu directives present, and use those to set the predefine.

Then your source code would have to see which pre-defines were set to 
determine which code to use, something like:

#ifdef __ARM_CORTEX_A15
   /* Cortex-A15 implementation.  */
#elif defined(__ARM_CORTEX_A9)
   /* Cortex-A9 implementation.  */
#else
   /* Generic implementation.  */
#endif

[The names __ARM_... in the compiler name-space so probably not the best 
choices].

Thanks,

Matt

-- 
Matthew Gretton-Dann
Principal Engineer, PD Software - Tools, ARM Ltd



More information about the Newlib mailing list