From dc1467c68df2e9a3bb0b212924b2131950cd1305 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Mon, 3 Mar 2025 01:54:24 +0200 Subject: [PATCH] amd64 csu: microoptimize startup (cherry picked from commit cb991a228179639cc0568fdd5d4b4b07b6f47b5a) --- 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 f7ea076d94f..3ceea928933 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