The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=cb991a228179639cc0568fdd5d4b4b07b6f47b5a
commit cb991a228179639cc0568fdd5d4b4b07b6f47b5a Author: Konstantin Belousov <k...@freebsd.org> AuthorDate: 2025-03-02 23:54:24 +0000 Commit: Konstantin Belousov <k...@freebsd.org> CommitDate: 2025-03-04 04:24:59 +0000 amd64 csu: microoptimize startup Reorder operations to reduce moving the values among registers. Use the LEA instruction to combine arithmetic with the moves. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D49206 --- lib/csu/amd64/crt1_s.S | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/csu/amd64/crt1_s.S b/lib/csu/amd64/crt1_s.S index f7ea076d94f1..3ceea9289330 100644 --- a/lib/csu/amd64/crt1_s.S +++ b/lib/csu/amd64/crt1_s.S @@ -49,15 +49,12 @@ _start: #ifdef GCRT subq $16, %rsp #endif - movq %rsi, %rcx - movq %rdi, %rsi /* argv = ap */ - addq $8, %rsi /* argv += 1 */ - movq %rdi, %rdx /* env = ap */ - addq $16, %rdx /* env += 2 */ - movslq (%rdi), %rax - movl %eax, %edi /* argc = *(long *)(void *)ap */ - shlq $3, %rax - addq %rax, %rdx /* env += argc */ + movq %rsi, %rcx /* cleanup */ + movslq (%rdi), %rax /* long *ap; tmpargc = *ap */ + leaq 0x8(%rdi), %rsi /* argv = ap + 1 */ + leaq 0x10(%rdi, %rax, 8), %rdx /* env = ap + 2 + tmpargc */ + movl %eax, %edi /* argc = tmpargc */ + #ifdef PIC /* * XXX. %rip relative addressing is not intended for use in the