aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/lib/memzero.S
Commit message (Collapse)AuthorAgeFilesLines
* Optimize ARM memset and memzero functionsHarm Hanemaaijer2017-04-111-96/+112
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ARM memset and memzero functions are optimized with lower overhead for small requests, generation of more 16-bit Thumb2 instructions when compiled in Thumb2 mode, and configurable destination alignment before the main block-copying loop. The new compile-time constant MEMSET_WRITE_ALIGN_BYTES is introduced in assembler.h, to augment the CALGN macro that previously regulated 32-byte write alignment but was only used on the Feroceon platform. MEMSET_WRITE_ALIGN_BYTES can have values of 0 (no write alignment), 8, or 32. Apart from Feroceon, memset write alignment of 32 bytes appears to benefit the armv6 platform, while the armv7 platform seems benefit from alignment to 8 bytes for memset/memzero. The CALGN macro is renamed to MEMSET_CALGN for memset and memzero; the original CALGN macro is reserved for the memcpy family of functions (memcpy, copy_from_user, copy_to_user) currently implemented in copy_template.S, and the associated compile time constant WRITE_ALIGN_BYTES defines the write alignment for memcpy-related functions that will be utilized in subsequent contributions. Because the current CALGN implementation in copy_template.S only implements 32-byte write alignment and is broken on Thumb2, it is only enabled when WRITE_ALIGN_BYTES is equal to 32 and Thumb2 mode is not enabled. Finally, memset and memzero now include a directive to enable unified ARM assembler syntax. Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
* first commitMeizu OpenSource2016-08-151-0/+125