From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 613DE3C8C60 for ; Sat, 25 Jul 2026 10:27:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784975262; cv=none; b=ru0dr45zrSsvAMP2CaExdjaH76uf9JljIsa2/8HlE8bw4PIvXzetLfSxXlMCMy9f8ymxQf05wo8utDixPTSARlUCjD+DEbdB4ZJu5J4T5GGO6sOXPe8RMoePTc681WQJStTNOUvQQ/d9K3tECF51RoADjCO+x6a3QjN7pKpSYY4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784975262; c=relaxed/simple; bh=9aZV57ljZ+RXvrRsu2W0OEvnfOvf57AwmL+UUvvu6Yc=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gT475g6e5LFm+RwL+eLTjaf4MPJLPNNAxFCCOvxYx1lY3MBlOfxWpsVKvh9Ac8+L9nP7pGqmupKsNtosPqTWR6ov3frKy93gBJYJrgvpI5/wvC1cPh3DV+JyA2pzb77stPitfdb11e8mmBhYXwpz9D6wsq9Q8krVXx7Dox951mI= 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=kMdH9v5Y; arc=none smtp.client-ip=209.85.221.53 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="kMdH9v5Y" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-472326ca506so849684f8f.2 for ; Sat, 25 Jul 2026 03:27:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784975256; x=1785580056; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=8BxK+ALhcOgn9zRWf8zuaedc6Ta5UI4jKqzNhpJjiik=; b=kMdH9v5Y6KlPe9TQdR9BO9cPg+SmvkVQFfRmYzOhSjyVbj/5ZWSV1aK7igphnlMsew xEZh5Heue2oE9lZbhj7qQDi6CADSIhAAW2dpZRSN5n+yMgtojg1qxZSWglDnJsl8CSJA shu+Nn/N08Ht0SIyT6DyWPi61lqBxUqxKTX8n+G24Wr/lCSzLdIWUUcjFyvM0gJybYJM I87uZLA1bLPFuY2w7i8zM8Oeou7m52cfIKlZdwXdCty1hRWVuj181It2y+jtpFDC5H/3 JpI72Kv05mhLGUv+5EOBxWBP2rkdUsfAYs+46MvrilfeCgqDcWiPc0QGLiVYyLKLcUKM kDtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784975256; x=1785580056; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=8BxK+ALhcOgn9zRWf8zuaedc6Ta5UI4jKqzNhpJjiik=; b=gx5H+DfaTOWr2+wNrjRVBgB2zlsa9ZstXD/IC2xsaBRHsBj0cT+ujOCnPFEw+SK7Na zcIuoN6MbgNjZQCbB9uwA9uDECr7mUOQt1/XuQz8RcLOejVcPw2Iao/Jt3bRhGQjkvBn fOfw6P+rwOq2zUE529yql0s5mLf7hhsQv30Rze64v1tYizMgKsRRk2hQE7hBfB+hf5Ru dEeXD4DDKqbkklBTEVRxkOqPxlE+0wukVL4uBAUIWdegYtQGgoRAx9WSKfMWYNWkR5Nf xUg+n0e3m1CgMygscEMqg7+G0RN8dfFK1lom7vsUaRJ3J0FlvFdgv8dYtY4AVRl5rdNz oy5Q== X-Forwarded-Encrypted: i=1; AHgh+RpXFkFT+TR3XaGRz+oQD3ZOhsm2N7/vHgbeGYzOyXHwc2pfR9u+w4r6drYTkSOU5F26id28tqL3c5+fVvQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yx6C9iw9sUasCEpfBpRt8z8egsLHO7pogAfpiKC0TTFvxXaukgc 26Zmo86SnDv36lSovlQJoSLhj0ioaMsj2pgOXQQuTojb7VkdNlprAi7J X-Gm-Gg: AR+sD13pkpFWFPdrJZfZnBnr9FUqOZcIMEr+LX/McP80188G+PjDA+W8mwUEyz+DvtM EovSgNuPK3K3jqeys6xifuDzUOkWPa4b6HXdNNdd3i0AaadEjbbOa26wJYSUoHXzPyjUFpg8qOA UzFX9S35W33JLnZrNk5U0nQYUhMggeSvh4fvwAjpGA/Epyi31LmzxHbWXlN9p6wnr0AGl9ooEZW 3eH+O5Lxtrzk35EevmYlfm1/Jn9FamG+u0jps8V3fylDBp/n0gBXGdPsogeAJmvlTU9xOEZN0Tk h8dfjTYnMpGKFzv5hE9+GQsERZNVe7Xeoc8U1FIqtg+lngF1Mfrrf3jycIBfLp+TaPpKIhmdjrs p7/3fuqMiR7naFntzZLMVxdmkoIPa6t0Mh5szv2oEsotweWOFojNK7wx8DFzHlpUnyfWdzt1gjy F/GKMw4BySFRZmCe1C0V+oYB4FnnB1FTP5iLYV1Xk= X-Received: by 2002:a05:6000:24c5:b0:47f:8cfd:d383 with SMTP id ffacd0b85a97d-47f9fea737dmr1968001f8f.52.1784975255950; Sat, 25 Jul 2026 03:27:35 -0700 (PDT) Received: from pumpkin (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-47f96d4656bsm14009416f8f.21.2026.07.25.03.27.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Jul 2026 03:27:35 -0700 (PDT) Date: Sat, 25 Jul 2026 11:27:34 +0100 From: David Laight To: "H. Peter Anvin" Cc: Mauricio Faria de Oliveira , Borislav Petkov , Jan Beulich , Thomas Gleixner , Ingo Molnar , Dave Hansen , x86@kernel.org, Juergen Gross , Alexey Dobriyan , Boris Ostrovsky , kernel-dev@igalia.com, linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org Subject: Re: [PATCH v7 2/5] x86/asm: add volatile, clobbers and zero-length check in inline memcmp Message-ID: <20260725112734.2c65f37e@pumpkin> In-Reply-To: References: <20260721-pvh-kasan-inline-v7-0-38979a50cef0@igalia.com> <20260721-pvh-kasan-inline-v7-2-38979a50cef0@igalia.com> <20260722170334.GCamD35gwrCng30WH1@fat_crate.local> <0F3A1121-208F-4F71-8C88-BEAE7CB50E75@zytor.com> <4daed8ac-b533-436f-9f86-6d297b87abbb@suse.com> <5e19b195-0ca2-4510-81cb-497b40e4aaf5@zytor.com> <8df0340f0dc7f6c303c6a7da78fad7b8@igalia.com> <7148BD5B-2E06-4137-B361-18AAF329DDC5@zytor.com> <348133f5-8a78-4805-bf0a-b1b08cdc65f2@zytor.com> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Fri, 24 Jul 2026 17:25:21 -0700 "H. Peter Anvin" wrote: > On 2026-07-24 16:57, H. Peter Anvin wrote: > > > > And of course I got the comparison backwards (negative means a < b, thus we > > want a - b not b - a). Here is a fixed version. > > > > int memcmp(const void *a, const void *b, size_t size) > > { > > int diff; > > > > asm volatile("xor %0,%0 ;" /* Sets ZF for the size = 0 case */ > > "repe cmpsb ;" > > "jz 1f ;" /* When size = 0 loading is unsafe */ > > "movb -1(%1),%b0 ;" > > "movzbl -1(%2),%k2 ;" > > "sub %k2,%0 ;" > > "1:" > > : "=&q" (diff), "+D" (a), "+S" (b), "+c" (size) > > : : "memory"); > > return diff; > > } > > > For extra credit, this version is even smaller in 16- and 32-bit mode, but > larger in 64-bit mode (because it depends on the order of the CMPSB operands, The function is inlined, so it will make no difference. David > which is the inverse of what the x86-64 ABI expects; swapping the order of "a" > and "b" and adding a cmc instruction improves the x86-64 size, but 64 bits is > not where the really tight code is...) > > int memcmp(const void *a, const void *b, size_t size) > { > int diff; > > asm volatile("xor %0,%0 ;" > "repe cmpsb ;" > "jz 1f ;" > "sbb %0,%0 ;" > "or $1,%0 ;" > "1:" > : "=&r" (diff), "+S" (a), "+D" (b), "+c" (size) > : : "memory"); > return diff; > } > >