mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
UPSTREAM: 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 6468e898c6)
Bug: 178411248
Change-Id: I8433e97d2880f75cace215f1a8daadec7f29929c
Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
parent
d3f36ae0bb
commit
c5de0d2e10
|
|
@ -168,10 +168,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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -578,4 +578,21 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
|
||||||
__adldst_l str, \src, \sym, \tmp, \cond
|
__adldst_l str, \src, \sym, \tmp, \cond
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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