mirror of
https://github.com/torvalds/linux.git
synced 2024-12-02 00:51:44 +00:00
12108aa8c1
Simplify memset() on the x86-64 arch. The x86-64 arch has a 'rep stosb' instruction, which can perform memset() using only a single instruction, given: %al = value (just like the second argument of memset()) %rdi = destination %rcx = length Before this patch: ``` 00000000000010c9 <memset>: 10c9: 48 89 f8 mov %rdi,%rax 10cc: 48 85 d2 test %rdx,%rdx 10cf: 74 0e je 10df <memset+0x16> 10d1: 31 c9 xor %ecx,%ecx 10d3: 40 88 34 08 mov %sil,(%rax,%rcx,1) 10d7: 48 ff c1 inc %rcx 10da: 48 39 ca cmp %rcx,%rdx 10dd: 75 f4 jne 10d3 <memset+0xa> 10df: c3 ret ``` After this patch: ``` 0000000000001511 <memset>: 1511: 96 xchg %eax,%esi 1512: 48 89 d1 mov %rdx,%rcx 1515: 57 push %rdi 1516: f3 aa rep stos %al,%es:(%rdi) 1518: 58 pop %rax 1519: c3 ret ``` v2: - Use pushq %rdi / popq %rax (Alviro). - Use xchg %eax, %esi (Willy). Link: https://lore.kernel.org/lkml/ZO9e6h2jjVIMpBJP@1wt.eu Suggested-by: Alviro Iskandar Setiawan <alviro.iskandar@gnuweeb.org> Suggested-by: Willy Tarreau <w@1wt.eu> Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org> Reviewed-by: Alviro Iskandar Setiawan <alviro.iskandar@gnuweeb.org> Signed-off-by: Willy Tarreau <w@1wt.eu> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> |
||
---|---|---|
.. | ||
.gitignore | ||
arch-aarch64.h | ||
arch-arm.h | ||
arch-i386.h | ||
arch-loongarch.h | ||
arch-mips.h | ||
arch-powerpc.h | ||
arch-riscv.h | ||
arch-s390.h | ||
arch-x86_64.h | ||
arch.h | ||
compiler.h | ||
crt.h | ||
ctype.h | ||
errno.h | ||
Makefile | ||
nolibc.h | ||
signal.h | ||
stackprotector.h | ||
std.h | ||
stdarg.h | ||
stdint.h | ||
stdio.h | ||
stdlib.h | ||
string.h | ||
sys.h | ||
time.h | ||
types.h | ||
unistd.h |