BACKPORT: ARM: 9039/1: assembler: generalize byte swapping macro into rev_l
Take the 4 instruction byte swapping sequence from the decompressor's head.S, and turn it into a rev_l GAS macro for general use. While at it, make it use the 'rev' instruction when compiling for v6 or later. Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> Reviewed-by: Nicolas Pitre <nico@fluxnic.net> Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> (cherry picked from commit 6468e898c67b905ec0f95d9678929135bcaf7f67) (resolved conflict due to different patch context, caused by missing other macros in assembler.h) Bug: 178411248 Change-Id: I8433e97d2880f75cace215f1a8daadec7f29929c Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
parent
6f5e76931b
commit
1b654b23c0
@ -117,10 +117,7 @@
|
|||||||
.macro be32tocpu, val, tmp
|
.macro be32tocpu, val, tmp
|
||||||
#ifndef __ARMEB__
|
#ifndef __ARMEB__
|
||||||
/* convert to little endian */
|
/* convert to little endian */
|
||||||
eor \tmp, \val, \val, ror #16
|
rev_l \val, \tmp
|
||||||
bic \tmp, \tmp, #0x00ff0000
|
|
||||||
mov \val, \val, ror #8
|
|
||||||
eor \val, \val, \tmp, lsr #8
|
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -506,4 +506,21 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
|
|||||||
#define _ASM_NOKPROBE(entry)
|
#define _ASM_NOKPROBE(entry)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rev_l - byte-swap a 32-bit value
|
||||||
|
*
|
||||||
|
* @val: source/destination register
|
||||||
|
* @tmp: scratch register
|
||||||
|
*/
|
||||||
|
.macro rev_l, val:req, tmp:req
|
||||||
|
.if __LINUX_ARM_ARCH__ < 6
|
||||||
|
eor \tmp, \val, \val, ror #16
|
||||||
|
bic \tmp, \tmp, #0x00ff0000
|
||||||
|
mov \val, \val, ror #8
|
||||||
|
eor \val, \val, \tmp, lsr #8
|
||||||
|
.else
|
||||||
|
rev \val, \val
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
#endif /* __ASM_ASSEMBLER_H__ */
|
#endif /* __ASM_ASSEMBLER_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user