From nobody Sun Feb 8 20:32:52 2026 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2C7C1A08AF for ; Tue, 16 Dec 2025 10:38:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765881513; cv=none; b=iZd9WX8ZPlY10M8RhyHKTrc7xBX8uYcPfTBilqgHWCfKrrP4t4lLRqYtiIgWPsvZWviS7q3/+VVwtjDgVp9fjmgN+QFQjX4MQKMfQaOO56G7SEJ6PblLWT84XuntxAWV16sELEmBPnpic3GVegTlGV73LOovaHVMGVzawxKXgAI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765881513; c=relaxed/simple; bh=9EmLVrGrQ9w6332TvGtGHUhI9Wo5hUcYGSTa5ZwPkl0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=SZ5/wJ3JeQL7bBpmjIlgmnqr1SVgejRFbuIOtg9eQxnncjSz5zl1fPvntiK3Gl4u8zFedjwF/IvjCgJ/4BS0r7zJN0/bMua4zDOvXXsAnr0kEdeYQQ8NnQxdwds1SaSXZmoAxp6a1qSS02+bf8mE8oFL9bpUmdYWSeXnWvUmOck= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XyYvtfl1; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XyYvtfl1" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b7ce5d6627dso248049466b.2 for ; Tue, 16 Dec 2025 02:38:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765881510; x=1766486310; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=oeKCAdQUCswi5XyRLWoXmOa0rXRCzlnZHcHen+2jWTE=; b=XyYvtfl1mMy0yJfb8pF9Ag6s3TmEDXhc06EsbxBBm9Ltrnr3pQD+/z8ZY5UAeOccfE qTwSy7GodWFS3AH+1myk57nWbhNhZ29Bwz5XN0nR2b/8r0Mpj+nvw5TNNQqDWxuuZpX2 bbBS1xrDZuMBc/Yf0ebkd1FRLfnv/NpvfODuWcpEk6ugFuQ6YaLetsTDZfybLMq79RVA 66bImnAJirg+4OYefDGKexX+33jqGCFXE3SPOQHkXkRtvRas1DeaxuW/qOkDdPrDu6tM 8K2hAes7e9l2Hkzk0tB3BdERDXF00rRARZTQy7+fFVmRY7WOR+tsV4qaeTS+0KG9RxjA 5xGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765881510; x=1766486310; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=oeKCAdQUCswi5XyRLWoXmOa0rXRCzlnZHcHen+2jWTE=; b=smylKo0SUusQyKZrkQpLAzhs9pcT2XSaHYWauzysXI/DclpP6gYgJEKqfLNaYEg7n3 tBN9/poAUg1uK1lQKJCPa9PrrX93aCWeHeuKynSb+2XQ7+kp6CYuXR26AQgVCpACxCwX EQ+sB15eN8qTq64hYZVU0epfY5ACw+2o+Mn06Dh1HwxOUpbV5sRhrRSROuagUluazqXi 6Z7IvhDUyep5Mz2nx6EqeHuIHdtMA32LD7XfDzpoUk7JAwwn+qb9r69XvorG0vaMwGY0 0JkDdtLzPiP24sfBuSlSe9NKpszMgp6i8tOumP2mkGXPf6igiLNjIvAZXsASG6iUyn3q Dedg== X-Forwarded-Encrypted: i=1; AJvYcCVvfaYgSFPkjvenRIkEU7BcLOyKvi/+ylyZn6vPp52fri/PWsVcBllZ9n627Z0lOM7DMKqHpCskgaj8yr0=@vger.kernel.org X-Gm-Message-State: AOJu0Yy70NSwVggD70bY1+KzVRjsKWU8uIHY5360VxqCxFu7aXXP7GgF 4iSF7n5KtZqGWE01JB9kpbXEg/WddWGs9dEh3UKZaA9WY/qe48sHlF+M X-Gm-Gg: AY/fxX4JJJX75PzTRPqz6D9ldMTpRUi/cJH62zSUFFIiOXu6+R0Q2I9/Px8y7G3k0qa IrTexYlA8ABpJh0uRQqp6vYMgOCaxODZDEbgvVp4sT6Q7wpDLhSqf6g+NOpx5iRD8oPFiVes/96 Ru5CnnUGyWDcUpi8x+W/9iwuz1hW0Fpv7omAbGaehy8SJtdfNzNw+Ldv3BBGL/Q7lG3KiXZbsD3 O8ldXmApHcGzjq+6K18ASUS//o+9HK7sh5+GNvgJbjl/oMgSWKNwnTijDKSY8Nugxf9vPg3ZBt6 5cyrbmiiMl4Mssy+013O+GlX/twgiJaTaRwfUEeNj0Qsc2sK/kqo23le2aVc/XMvHiC+Y2WMXU2 onFomvDhpvxMq35KKvKEr+4EEaT0S87Zz39BI/5qdtZ4pmnWVWawOvkSPzw5dId63phGoMD68cY 0GJqy4lYtFk7K8jl9corG5VRZgkp+qecFqFzonTG8hkkEF7XDA8NpCgQ== X-Google-Smtp-Source: AGHT+IFYk+8YkmvLRPK6KBqaVdVIojSqNmh3EHAemt7fQZoEzzzsvYafGnJ1++/59F9RDvgo5ZO6Pw== X-Received: by 2002:a17:907:6e9f:b0:b73:6c97:af49 with SMTP id a640c23a62f3a-b7d23a972c5mr1421503666b.30.1765881509811; Tue, 16 Dec 2025 02:38:29 -0800 (PST) Received: from fedora ([193.77.86.199]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b7cfa51759esm1607411766b.35.2025.12.16.02.38.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 02:38:29 -0800 (PST) From: Uros Bizjak To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: Uros Bizjak , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" Subject: [PATCH RESEND] x86/asm/32: Modernize _memcpy() Date: Tue, 16 Dec 2025 11:37:33 +0100 Message-ID: <20251216103750.229347-1-ubizjak@gmail.com> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use inout "+" constraint modifier where appropriate, declare temporary variables as unsigned long and rewrite parts of assembly in plain C. The memcpy() function shrinks by 10 bytes, from: 00e778d0 : e778d0: 55 push %ebp e778d1: 89 e5 mov %esp,%ebp e778d3: 83 ec 0c sub $0xc,%esp e778d6: 89 5d f4 mov %ebx,-0xc(%ebp) e778d9: 89 c3 mov %eax,%ebx e778db: 89 c8 mov %ecx,%eax e778dd: 89 75 f8 mov %esi,-0x8(%ebp) e778e0: c1 e9 02 shr $0x2,%ecx e778e3: 89 d6 mov %edx,%esi e778e5: 89 7d fc mov %edi,-0x4(%ebp) e778e8: 89 df mov %ebx,%edi e778ea: f3 a5 rep movsl %ds:(%esi),%es:(%edi) e778ec: 89 c1 mov %eax,%ecx e778ee: 83 e1 03 and $0x3,%ecx e778f1: 74 02 je e778f5 e778f3: f3 a4 rep movsb %ds:(%esi),%es:(%edi) e778f5: 8b 75 f8 mov -0x8(%ebp),%esi e778f8: 89 d8 mov %ebx,%eax e778fa: 8b 5d f4 mov -0xc(%ebp),%ebx e778fd: 8b 7d fc mov -0x4(%ebp),%edi e77900: 89 ec mov %ebp,%esp e77902: 5d pop %ebp e77903: c3 ret to: 00e778b0 : e778b0: 55 push %ebp e778b1: 89 e5 mov %esp,%ebp e778b3: 83 ec 08 sub $0x8,%esp e778b6: 89 75 f8 mov %esi,-0x8(%ebp) e778b9: 89 d6 mov %edx,%esi e778bb: 89 ca mov %ecx,%edx e778bd: 89 7d fc mov %edi,-0x4(%ebp) e778c0: c1 e9 02 shr $0x2,%ecx e778c3: 89 c7 mov %eax,%edi e778c5: f3 a5 rep movsl %ds:(%esi),%es:(%edi) e778c7: 83 e2 03 and $0x3,%edx e778ca: 74 04 je e778d0 e778cc: 89 d1 mov %edx,%ecx e778ce: f3 a4 rep movsb %ds:(%esi),%es:(%edi) e778d0: 8b 75 f8 mov -0x8(%ebp),%esi e778d3: 8b 7d fc mov -0x4(%ebp),%edi e778d6: 89 ec mov %ebp,%esp e778d8: 5d pop %ebp e778d9: c3 ret due to a better register allocation, avoiding the call-saved %ebx register. No functional changes intended. Signed-off-by: Uros Bizjak Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: Dave Hansen Cc: "H. Peter Anvin" --- arch/x86/include/asm/string_32.h | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/arch/x86/include/asm/string_32.h b/arch/x86/include/asm/string= _32.h index e9cce169bb4c..16cdda93e437 100644 --- a/arch/x86/include/asm/string_32.h +++ b/arch/x86/include/asm/string_32.h @@ -32,16 +32,18 @@ extern size_t strlen(const char *s); =20 static __always_inline void *__memcpy(void *to, const void *from, size_t n) { - int d0, d1, d2; - asm volatile("rep movsl\n\t" - "movl %4,%%ecx\n\t" - "andl $3,%%ecx\n\t" - "jz 1f\n\t" - "rep movsb\n\t" - "1:" - : "=3D&c" (d0), "=3D&D" (d1), "=3D&S" (d2) - : "0" (n / 4), "g" (n), "1" ((long)to), "2" ((long)from) - : "memory"); + unsigned long esi =3D (unsigned long)from; + unsigned long edi =3D (unsigned long)to; + unsigned long ecx =3D n >> 2; + + asm volatile("rep movsl" + : "+D" (edi), "+S" (esi), "+c" (ecx) + : : "memory"); + ecx =3D n & 3; + if (ecx) + asm volatile("rep movsb" + : "+D" (edi), "+S" (esi), "+c" (ecx) + : : "memory"); return to; } =20 --=20 2.52.0