From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dedi548.your-server.de (dedi548.your-server.de [85.10.215.148]) by sourceware.org (Postfix) with ESMTPS id C68D63858C2B for ; Fri, 27 Oct 2023 16:59:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C68D63858C2B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embedded-brains.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embedded-brains.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C68D63858C2B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=85.10.215.148 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698425967; cv=none; b=n8KrJr9/dt2NlZCgGtt3e5yJ/v1k4MdSAtw5IvVp6VECdlHgjBgjsYMwVuIYnWYTD63OJFrzJd4FuAezydHkuICpbdbI3QzJ/23suF6GylZTfkL/QJE2gSL15s2TjFSKZKTylo3qFmiR1Iz+AdhmmgfzxqWWA3OKQxXYjXt4dDE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698425967; c=relaxed/simple; bh=iCOmyhZ8MradmGhvTXFQua3e9xfDKyH58YFYL5XlIf0=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=KmVIhoBDgf+3e4ds2OHA0MM0KxaPNppizCcxxulyt5Ez6hz5GNEBuWqZkS0ObtIrIKTLaaaFt1EmJ9xmZnZhZTdFgSChmYbhMBxGd447Pkf3MBkzIq7woGEi4cnUchePLjNgfIsNTCOdV5RrWwaw6CO82hUPHMqeiM0mtoFHqUc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from sslproxy04.your-server.de ([78.46.152.42]) by dedi548.your-server.de with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qwQB8-0009rj-7U for newlib@sourceware.org; Fri, 27 Oct 2023 18:59:22 +0200 Received: from [82.100.198.138] (helo=mail.embedded-brains.de) by sslproxy04.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qwQB8-0002ti-3Q for newlib@sourceware.org; Fri, 27 Oct 2023 18:59:22 +0200 Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id BBDD34800F0 for ; Fri, 27 Oct 2023 18:59:21 +0200 (CEST) Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavis, port 10032) with ESMTP id HaYxqMLutWX5 for ; Fri, 27 Oct 2023 18:59:21 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id 15347480159 for ; Fri, 27 Oct 2023 18:59:21 +0200 (CEST) X-Virus-Scanned: amavis at zimbra.eb.localhost Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavis, port 10026) with ESMTP id VepWEKxXxhKs for ; Fri, 27 Oct 2023 18:59:20 +0200 (CEST) Received: from zimbra.eb.localhost (unknown [192.168.96.242]) by mail.embedded-brains.de (Postfix) with ESMTPSA id DC3614800F0 for ; Fri, 27 Oct 2023 18:59:20 +0200 (CEST) From: Sebastian Huber To: newlib@sourceware.org Subject: [PATCH] aarch64: Remove duplicated optimized memmove() Date: Fri, 27 Oct 2023 18:59:18 +0200 Message-Id: <20231027165918.69721-1-sebastian.huber@embedded-brains.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authenticated-Sender: smtp-embedded@poldi-networks.de X-Virus-Scanned: Clear (ClamAV 0.103.10/27074/Fri Oct 27 09:58:36 2023) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: The optimized aarch64/memcpy.S already provides a memmove() implementatio= n. --- newlib/Makefile.in | 20 --- newlib/libc/machine/aarch64/Makefile.inc | 1 - newlib/libc/machine/aarch64/memmove-stub.c | 2 +- newlib/libc/machine/aarch64/memmove.S | 155 --------------------- 4 files changed, 1 insertion(+), 177 deletions(-) delete mode 100644 newlib/libc/machine/aarch64/memmove.S diff --git a/newlib/Makefile.in b/newlib/Makefile.in index 4cb3534cc4..9eb21c7919 100644 --- a/newlib/Makefile.in +++ b/newlib/Makefile.in @@ -595,7 +595,6 @@ check_PROGRAMS =3D @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memcpy-stub.c \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memcpy.S \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memmove-stub.c \ -@HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memmove.S \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memrchr-stub.c \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memrchr.S \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memset-stub.c \ @@ -1848,7 +1847,6 @@ am__objects_51 =3D libc/ssp/libc_a-chk_fail.$(OBJEX= T) \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memcpy-stub= .$(OBJEXT) \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memcpy.$(OB= JEXT) \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memmove-stu= b.$(OBJEXT) \ -@HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memmove.$(O= BJEXT) \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memrchr-stu= b.$(OBJEXT) \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memrchr.$(O= BJEXT) \ @HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memset-stub= .$(OBJEXT) \ @@ -8025,9 +8023,6 @@ libc/machine/aarch64/libc_a-memcpy.$(OBJEXT): \ libc/machine/aarch64/libc_a-memmove-stub.$(OBJEXT): \ libc/machine/aarch64/$(am__dirstamp) \ libc/machine/aarch64/$(DEPDIR)/$(am__dirstamp) -libc/machine/aarch64/libc_a-memmove.$(OBJEXT): \ - libc/machine/aarch64/$(am__dirstamp) \ - libc/machine/aarch64/$(DEPDIR)/$(am__dirstamp) libc/machine/aarch64/libc_a-memrchr-stub.$(OBJEXT): \ libc/machine/aarch64/$(am__dirstamp) \ libc/machine/aarch64/$(DEPDIR)/$(am__dirstamp) @@ -12739,7 +12734,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc= _a-memcpy-stub.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc= _a-memcpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc= _a-memmove-stub.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc= _a-memmove.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc= _a-memrchr-stub.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc= _a-memrchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc= _a-memset-stub.Po@am__quote@ @@ -16709,20 +16703,6 @@ libc/machine/aarch64/libc_a-memcpy.obj: libc/mac= hine/aarch64/memcpy.S @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(= depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAUL= T_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS= ) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memcpy.obj `if test -f '= libc/machine/aarch64/memcpy.S'; then $(CYGPATH_W) 'libc/machine/aarch64/m= emcpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memcpy.S'; fi= ` =20 -libc/machine/aarch64/libc_a-memmove.o: libc/machine/aarch64/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) = $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAG= S) -MT libc/machine/aarch64/libc_a-memmove.o -MD -MP -MF libc/machine/aar= ch64/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/aarch64/libc_a-memmo= ve.o `test -f 'libc/machine/aarch64/memmove.S' || echo '$(srcdir)/'`libc/= machine/aarch64/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR= )/libc_a-memmove.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'libc/machine/= aarch64/memmove.S' object=3D'libc/machine/aarch64/libc_a-memmove.o' libto= ol=3Dno @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(= depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAUL= T_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS= ) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memmove.o `test -f 'libc= /machine/aarch64/memmove.S' || echo '$(srcdir)/'`libc/machine/aarch64/mem= move.S - -libc/machine/aarch64/libc_a-memmove.obj: libc/machine/aarch64/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) = $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAG= S) -MT libc/machine/aarch64/libc_a-memmove.obj -MD -MP -MF libc/machine/a= arch64/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/aarch64/libc_a-mem= move.obj `if test -f 'libc/machine/aarch64/memmove.S'; then $(CYGPATH_W) = 'libc/machine/aarch64/memmove.S'; else $(CYGPATH_W) '$(srcdir)/libc/machi= ne/aarch64/memmove.S'; fi` -@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR= )/libc_a-memmove.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'libc/machine/= aarch64/memmove.S' object=3D'libc/machine/aarch64/libc_a-memmove.obj' lib= tool=3Dno @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(= depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAUL= T_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS= ) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memmove.obj `if test -f = 'libc/machine/aarch64/memmove.S'; then $(CYGPATH_W) 'libc/machine/aarch64= /memmove.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memmove.S'= ; fi` - libc/machine/aarch64/libc_a-memrchr.o: libc/machine/aarch64/memrchr.S @am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) = $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAG= S) -MT libc/machine/aarch64/libc_a-memrchr.o -MD -MP -MF libc/machine/aar= ch64/$(DEPDIR)/libc_a-memrchr.Tpo -c -o libc/machine/aarch64/libc_a-memrc= hr.o `test -f 'libc/machine/aarch64/memrchr.S' || echo '$(srcdir)/'`libc/= machine/aarch64/memrchr.S @am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR= )/libc_a-memrchr.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Po diff --git a/newlib/libc/machine/aarch64/Makefile.inc b/newlib/libc/machi= ne/aarch64/Makefile.inc index c749b0d575..f705dfea15 100644 --- a/newlib/libc/machine/aarch64/Makefile.inc +++ b/newlib/libc/machine/aarch64/Makefile.inc @@ -6,7 +6,6 @@ libc_a_SOURCES +=3D \ %D%/memcpy-stub.c \ %D%/memcpy.S \ %D%/memmove-stub.c \ - %D%/memmove.S \ %D%/memrchr-stub.c \ %D%/memrchr.S \ %D%/memset-stub.c \ diff --git a/newlib/libc/machine/aarch64/memmove-stub.c b/newlib/libc/mac= hine/aarch64/memmove-stub.c index 8fa4ab9387..bc8255fb8b 100644 --- a/newlib/libc/machine/aarch64/memmove-stub.c +++ b/newlib/libc/machine/aarch64/memmove-stub.c @@ -27,5 +27,5 @@ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) # include "../../string/memmove.c" #else -/* See memmove.S */ +/* See memcpy.S */ #endif diff --git a/newlib/libc/machine/aarch64/memmove.S b/newlib/libc/machine/= aarch64/memmove.S deleted file mode 100644 index 597a8c8e9e..0000000000 --- a/newlib/libc/machine/aarch64/memmove.S +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright (c) 2013, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions ar= e met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyrig= ht - notice, this list of conditions and the following disclaimer in= the - documentation and/or other materials provided with the distribu= tion. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote pro= ducts - derived from this software without specific prior written permi= ssion. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL= , - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. = */ - -/* - * Copyright (c) 2015 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in th= e - * documentation and/or other materials provided with the distributio= n. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMP= LIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDEN= TAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMI= TED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, O= R - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY O= F - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* Assumptions: - * - * ARMv8-a, AArch64, unaligned accesses - */ - -#if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) -/* See memmove-stub.c */ -#else - - .macro def_fn f p2align=3D0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -/* Parameters and result. */ -#define dstin x0 -#define src x1 -#define count x2 -#define srcend x3 -#define dstend x4 -#define tmp1 x5 -#define A_l x6 -#define A_h x7 -#define B_l x8 -#define B_h x9 -#define C_l x10 -#define C_h x11 -#define D_l x12 -#define D_h x13 -#define E_l count -#define E_h tmp1 - -/* All memmoves up to 96 bytes are done by memcpy as it supports overlap= s. - Larger backwards copies are also handled by memcpy. The only remainin= g - case is forward large copies. The destination is aligned, and an - unrolled loop processes 64 bytes per iteration. -*/ - -def_fn memmove, 6 - sub tmp1, dstin, src - cmp count, 96 - ccmp tmp1, count, 2, hi - b.hs memcpy - - cbz tmp1, 3f - add dstend, dstin, count - add srcend, src, count - - /* Align dstend to 16 byte alignment so that we don't cross cache line - boundaries on both loads and stores. There are at least 96 bytes - to copy, so copy 16 bytes unaligned and then align. The loop - copies 64 bytes per iteration and prefetches one iteration ahead. *= / - - and tmp1, dstend, 15 - ldp D_l, D_h, [srcend, -16] - sub srcend, srcend, tmp1 - sub count, count, tmp1 - ldp A_l, A_h, [srcend, -16] - stp D_l, D_h, [dstend, -16] - ldp B_l, B_h, [srcend, -32] - ldp C_l, C_h, [srcend, -48] - ldp D_l, D_h, [srcend, -64]! - sub dstend, dstend, tmp1 - subs count, count, 128 - b.ls 2f - nop -1: - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [srcend, -16] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [srcend, -32] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [srcend, -48] - stp D_l, D_h, [dstend, -64]! - ldp D_l, D_h, [srcend, -64]! - subs count, count, 64 - b.hi 1b - - /* Write the last full set of 64 bytes. The remainder is at most 64 - bytes, so it is safe to always copy 64 bytes from the start even if - there is just 1 byte left. */ -2: - ldp E_l, E_h, [src, 48] - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [src, 32] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [src, 16] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [src] - stp D_l, D_h, [dstend, -64] - stp E_l, E_h, [dstin, 48] - stp A_l, A_h, [dstin, 32] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstin] -3: ret - - .size memmove, . - memmove -#endif --=20 2.35.3