From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from r-passerv.ralfj.de (r-passerv.ralfj.de [109.230.236.95]) by sourceware.org (Postfix) with ESMTPS id E035F3858430 for ; Mon, 27 Nov 2023 11:15:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E035F3858430 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=ralfj.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ralfj.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E035F3858430 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=109.230.236.95 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701083715; cv=none; b=UFk33fbOsJMZ/L+CZ8c04EaRXKSvsRaTk6H3Dk39mWOzBWdc+SqvA5aaIfjChGQk8zdmCpMew0TrNTZpdNhwEC0oBIXTBZMfOq7bXYBqE4BWzn6o0wkT6cFJcSNgphir4TY8wQW9MmnPEo/RO5gHdn4iFkKqsk6GTBJ4xrgUvPY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701083715; c=relaxed/simple; bh=b1Rwi6xus2EHM4L3t9vlZLMr5cd4yqyn9F9PeFjfaSE=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=qOsR5FILJC2Dcn0pO4ITgLm3jn6g6x6bxf7YnIOMWRary+qMQMDMHF3r7xKy3F4t1JrnicNjOQ/TGTp/TpKL2I8xeP2agkE4c95I+cCGxI1ZSRPdRT2Dz9h+ilsndTUkPe1eHI0qUjkVcMR1jZ/IsKdenNfbJS5Oe18AAY8WIWQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from [129.132.31.99] (rj-screen.inf.ethz.ch [129.132.31.99]) by r-passerv.ralfj.de (Postfix) with ESMTPSA id 16A522051DBB; Mon, 27 Nov 2023 12:15:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=ralfj.de; s=mail; t=1701083711; bh=b1Rwi6xus2EHM4L3t9vlZLMr5cd4yqyn9F9PeFjfaSE=; h=Date:Subject:To:References:From:In-Reply-To:From; b=lGB0RNs/s4D1JCXzYHCBBecrozeN1t1JJUfPy9Nseo6VeVvw4vEgik+tyu8/vjoiV dxRPTQKqeMrWgDbDc1iIfQ+ttvnN+XVzKc/hRtw0y+6nHRoQptUERdQTpG0cXnCAWY xcKOYqx90+LemNL8T8ffD+WTnczyAnPswVKKgZwk= Message-ID: <69271612-79a5-43c6-9fc7-fb2461c5d39f@ralfj.de> Date: Mon, 27 Nov 2023 12:15:09 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Support for memcpy with equal source and destination Content-Language: en-US To: Paul Eggert , Adhemerval Zanella Netto , libc-alpha References: <1e8beece-f865-4309-a28f-6782135e2a8a@linaro.org> <9e6eb1ab-9a9d-4b69-ae49-4805ee7cdce8@cs.ucla.edu> From: Ralf Jung Autocrypt: addr=post@ralfj.de; keydata= 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 In-Reply-To: <9e6eb1ab-9a9d-4b69-ae49-4805ee7cdce8@cs.ucla.edu> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,JMQ_SPF_NEUTRAL,SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi all, > On 2023-11-25 00:20, Ralf Jung wrote: >> For a memcpy that is implemented in C (rather than assembly), I don't think it >> is possible to make this promise (of supporting src==dest) when there is >> "restrict" in the signature. > > Actually it is possible, though it costs a conditional branch compared to the > naive approach that generally would work anyway. Ah, true, I forgot about that option. However, at that point it seems unclear why that branch should live inside `memcpy`, rather than being performed by the caller. The entire argument made all along by compiler developers (as I understood it) was that the existing `memcpy` are already working fine for the src==dest case; if new branches need to be added, that's a different discussion. This probably needs benchmark to determine on which side the branch is less expensive overall? Or a dedicated memcpy variant that allows src==dest, as has been brought up elsewhere. > When n is zero, this implementation also supports NULL dest or src, though > that's a separate issue. Yeah I'd like to see that guarantee as well, if possible. :) Kind regards, Ralf > > >> when one sees restrict in a signature, it is impossible to tell what the >> actual constraint is without further documentation: the function needs to say >> which memory is being accesses through which pointer, and *that* is then where >> the disjointness comes from. > > True, and one could document the new guarantee along those lines. Writing the > documentation could be a bit tricky, though, as one needs to explain all this > stuff clearly without being too prolix. >