[PATCH] Use REV and REV16 for byte swapping on ARMv6+

Russell King - ARM Linux linux at arm.linux.org.uk
Sat Oct 24 07:13:57 EDT 2009


On Sat, Oct 24, 2009 at 02:29:42PM +0530, Rabin Vincent wrote:
> ARMv6 introduced the REV and REV16 instructions that reverse bytes in
> words and halfwords.  Use them for the arch-specific implementation of
> the byte swapping helpers on ARMv6+.

Please submit to the patch system.  Note that you can now use this format,
and just put the "KernelVersion:" header somewhere in before the 'diff'
line.

> 
> Signed-off-by: Rabin Vincent <rabin at rab.in>
> ---
>  arch/arm/include/asm/swab.h |   19 +++++++++++++++++++
>  1 files changed, 19 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/include/asm/swab.h b/arch/arm/include/asm/swab.h
> index ca2bf2f..9997ad2 100644
> --- a/arch/arm/include/asm/swab.h
> +++ b/arch/arm/include/asm/swab.h
> @@ -22,6 +22,24 @@
>  #  define __SWAB_64_THRU_32__
>  #endif
>  
> +#if defined(__KERNEL__) && __LINUX_ARM_ARCH__ >= 6
> +
> +static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
> +{
> +	__asm__ ("rev16 %0, %1" : "=r" (x) : "r" (x));
> +	return x;
> +}
> +#define __arch_swab16 __arch_swab16
> +
> +static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
> +{
> +	__asm__ ("rev %0, %1" : "=r" (x) : "r" (x));
> +	return x;
> +}
> +#define __arch_swab32 __arch_swab32
> +
> +#else
> +
>  static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
>  {
>  	__u32 t;
> @@ -48,3 +66,4 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
>  
>  #endif
>  
> +#endif
> -- 
> 1.6.5
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



More information about the linux-arm-kernel mailing list