diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2017-12-10 06:21:35 +0100 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gmail.com> | 2017-12-10 23:48:53 +0100 |
commit | fbb871e220672a8e9e4e7870da5b206fe05904b2 (patch) | |
tree | 6d69470a801f1e5668bcce0b7e69f8600237a660 /arch/xtensa/include | |
parent | xtensa: clean up fixups in assembly code (diff) | |
download | linux-fbb871e220672a8e9e4e7870da5b206fe05904b2.tar.xz linux-fbb871e220672a8e9e4e7870da5b206fe05904b2.zip |
xtensa: clean up word alignment macros in assembly code
Remove duplicate definitions of ALIGN/src_b/__src_b and SSA8/ssa8/__ssa8
from assembly sources and put single definition into asm/asmmacro.h
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'arch/xtensa/include')
-rw-r--r-- | arch/xtensa/include/asm/asmmacro.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/xtensa/include/asm/asmmacro.h b/arch/xtensa/include/asm/asmmacro.h index d2a4415a4c08..7f2ae5872151 100644 --- a/arch/xtensa/include/asm/asmmacro.h +++ b/arch/xtensa/include/asm/asmmacro.h @@ -158,4 +158,37 @@ .previous \ 97: + +/* + * Extract unaligned word that is split between two registers w0 and w1 + * into r regardless of machine endianness. SAR must be loaded with the + * starting bit of the word (see __ssa8). + */ + + .macro __src_b r, w0, w1 +#ifdef __XTENSA_EB__ + src \r, \w0, \w1 +#else + src \r, \w1, \w0 +#endif + .endm + +/* + * Load 2 lowest address bits of r into SAR for __src_b to extract unaligned + * word starting at r from two registers loaded from consecutive aligned + * addresses covering r regardless of machine endianness. + * + * r 0 1 2 3 + * LE SAR 0 8 16 24 + * BE SAR 32 24 16 8 + */ + + .macro __ssa8 r +#ifdef __XTENSA_EB__ + ssa8b \r +#else + ssa8l \r +#endif + .endm + #endif /* _XTENSA_ASMMACRO_H */ |