From patchwork Mon Jan 27 10:43:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Lapshin X-Patchwork-Id: 105431 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E628D385802C for ; Mon, 27 Jan 2025 10:45:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E628D385802C Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=espressifsystems.onmicrosoft.com header.i=@espressifsystems.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-espressifsystems-onmicrosoft-com header.b=Mxfbjpe2 X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01on20702.outbound.protection.outlook.com [IPv6:2a01:111:f403:200e::702]) by sourceware.org (Postfix) with ESMTPS id 38B5D385843F for ; Mon, 27 Jan 2025 10:43:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 38B5D385843F Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=espressif.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=espressif.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 38B5D385843F Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:200e::702 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974627; cv=pass; b=PF9QuBh5MPpANajxe6D+DB2CDAts1O30mxNpcIJm+W3jok6v8W8rnyDhkFkWLumcV/lSOl8F6ClR2s3fZVQexlVXeCIV3z5/NfZ6/nD3xX7E4jzf/gKE73FfUy4sBbRBm0PaIHB4RlgYliXrKai0l1WQntORHwTRJPAfmAx6jzY= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974627; c=relaxed/simple; bh=eXgqkyim4CQ2PgMjtvOpBUGwT4FUnuyw8SVpp8O5yH4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=lAPNcNnthq03YHpYAxOVmLEewmVVq9RMnzd/43KQOKeTB0DeZfe3vRArHNOYQyoCiaCrkNgMW1/OAESBoMn8J0LWyltYlh23c6JpsHqKVEXwGhG+V1mF65DCXHT/BLY/F3NYoRvEltwmVfPTWaf2Y+ipUF6YTdwZ+tjm2q/Q3VU= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 38B5D385843F ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Kpf4yOy4nNGj29BGnfVvljAMBXCqKFxLB5xb12faCQULpcwB8UIcSkALboKENsZsCs+ItqKXhCDAmkGvvJClPwudFMLIm+87oO86W2cby1jhlmMrClYt/aDTFEw3coITtTPcatsw6b0po832M8PoVOz8rVP2XNsV4IsoA4JJ9rj6Tmz8AyxO7nny0LLJG8PsjFKNfHFAaA8dS7fP6owBVT6rh3vfw5GxuP3xbt961QYwwSpLwq+T3TFM+ew4ukTt2V+JXVI+BXXcVHbjZa7KIiQpGi2hIhv9/qGmzvcTSnLdFYF0g9XwO5kl0epFPv/hD0tCCqK4QSUGUnkIXHUNxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eXgqkyim4CQ2PgMjtvOpBUGwT4FUnuyw8SVpp8O5yH4=; b=SBraXApH/GxTarx7DlVSjpScHvCAPppJhQOl8cSshLJ2kJksGNZnRIh2u25isnZMY9AYqszoWW42SetbkZpDT19AWi7XBp9E0nmsU5EnINtuFAEZPA7UnA4vXcaZE8QPntP+iMBPGzY/cmptQXoLApGtoJt8JvcJKZLHCHq7igLXnho7ZOX/La7Q6qJuf/njXeJspiT/8JT3Q2pO5M5tJV/kmeLlF0URYFz3CHGjCyQzcsBJvgAlsFjb0Vk/4Ae3M8ru1aTfMgARE2ZgKvNPCBSaay4w9KHPR30JtM8dNWRua/EQ9Vo6G4YthdPL1P+idLsx7og1EjsdDHazOFiPzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=espressif.com; dmarc=pass action=none header.from=espressif.com; dkim=pass header.d=espressif.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=espressifsystems.onmicrosoft.com; s=selector1-espressifsystems-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eXgqkyim4CQ2PgMjtvOpBUGwT4FUnuyw8SVpp8O5yH4=; b=Mxfbjpe2sJ3+uxe2e49wJXPc9nTZsOq66n7KxaNEXp3QIEEXMzV4z+1LHuyHxwv8GNSuWREmKNgQpFuPrRXMs71DNp/WfOOcZG0C/7fzTenH8eYuR8UT1LBp9R1q7RFxzHZo8fK//LBgwAijw9lape0/7nJueNlrtvR8xLtjJxU= Received: from TYZPR04MB5736.apcprd04.prod.outlook.com (2603:1096:400:1fa::7) by TYSPR04MB8166.apcprd04.prod.outlook.com (2603:1096:405:9a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.17; Mon, 27 Jan 2025 10:43:41 +0000 Received: from TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521]) by TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521%6]) with mapi id 15.20.8377.009; Mon, 27 Jan 2025 10:43:41 +0000 From: Alexey Lapshin To: "newlib@sourceware.org" CC: Alexey Gerenkov , Ivan Grokhotkov Subject: [PATCH 1/6] newlib: string: refactor str/mem-family functions Thread-Topic: [PATCH 1/6] newlib: string: refactor str/mem-family functions Thread-Index: AQHbcKhUf5UnTFjOtku+t8q7qXRPtg== Date: Mon, 27 Jan 2025 10:43:41 +0000 Message-ID: <3668279f9eb28a9b644b90aab0b32152bc04a484.camel@espressif.com> References: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> In-Reply-To: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=espressif.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR04MB5736:EE_|TYSPR04MB8166:EE_ x-ms-office365-filtering-correlation-id: 2e1fa108-6ed7-4dd7-7c1e-08dd3ebf774d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?2xkN9LWdMDdgH3AxOVWtpy3yfaeoJA8?= =?utf-8?q?MfG2VUO/qVUdfNHm3XVwgp9o8NM7pq5SqbzK2VxEN/1GVk2G01uvzZ6WaEuNM0sXv?= =?utf-8?q?loLWtWAw+520Nu8gZSc9IRz+yVp0ygnguhYQYHpd/hcG2Ul6Knx7HV5ZeSEVe7BYr?= =?utf-8?q?rYCZM2kBJkRjzVZNl/W0J3uRB3kYuTTkr3FhCgPNU3c6zuYNuM9phr72+KmsbJ3/D?= =?utf-8?q?B8s2g7iSO7G0B3Q4FaZUyD++dOUj2WWVaYmeiJukXCt9/c+kABmBI3CQvyUDr+Exi?= =?utf-8?q?peVKkZD9ROBgIG4/y8ZVzkuMPVAS7dfjcnllCTlxySYXCvpqdA0vn4PFv9dsp5r+3?= =?utf-8?q?4eEXQ3zTuS2x61gbTnza+irEe3NEwQ8tfGbER3CacV3+Y+7zB/yf2dRerkRxcuQce?= =?utf-8?q?L8akw9rQES+3lSBI7SCUvG08ff3R8rWcfBEvGKT/TjP7tO3UmNiOm6faj/eDXjR1S?= =?utf-8?q?0np9tEExCBb8sXIUenVxX09Pl01LAsZc0GA/15R6r8syyzjqdOSneayMiORrpJ1p0?= =?utf-8?q?SwbinJMKhrHd26EgFMH1pBT+J7GVzkIWcf41R2bMxO6kygdxPAoq1xxShiYQ2VDnT?= =?utf-8?q?YfxAi8jfqMQvCc2lb8IXitOZCy6nn6NOayZDhr66t1Vu1VJef6CdJT8ZSXdKo8NfG?= =?utf-8?q?WZCT80aP1BZDL9kV/rOcdcjW+Msm5WjsoBY19lqbYxJOsU6pJAwRaLZoPHXoHFrkw?= =?utf-8?q?sksGDkmb+y8y9DxCWnIq5a0GFM+uWbXb5qcoum5VbBrxfX3vYTjc7mjN9FgrXsIfD?= =?utf-8?q?kPTo0cufu7eQPi7Bc4KcslOsxRhll8/kjoOc36HhJj5LOzE0N13h/23LvskhLM0gP?= =?utf-8?q?BNI6/OIoioYpOpJbggbJEAvSvzhxIWDcm8bL7LxV8yTDIpqoxSUWg81UIfgoknXLE?= =?utf-8?q?3U8oQoeObBqWSzfSiEqOPDnmAUYp3/imadtF8WG/f7vqzbbkh7IL+4WFr9vHveFMJ?= =?utf-8?q?gnRS9kCkMLla/flob/s3EJr6GNoE1v6VqBcEPLqk1OGalqOfBr27/+okxpWQUZx0E?= =?utf-8?q?C5hpdF7iayTVtv9paszpV97vPu+bFSOmZBFYSMpWbvs3FVIkkOJ/mgfszUz93egN7?= =?utf-8?q?CfIqJVUH9BGyrRKhF7pBsalPies6eCYcgGrObtK68+hOfoKXQW2V03krWZUHPbmuh?= =?utf-8?q?rvKsURWAoY5fUFdCNCl0V1q9O1LlXQrNkwE2arOes50odtiXONckdCK6InNFsQAtL?= =?utf-8?q?HXluUQmj+CleOJtmfqLc7soX2HqA+I9VhdVPSPhjHsyBN6FMI8ViS/uoNlT2SAge9?= =?utf-8?q?4wBb8RCvquF33/upyfgRL0t2KNFgWfG/OeSahC1cdTPXI0GAPgsfzqctNi7lNRNGv?= =?utf-8?q?nfajqN57MLqq3eIyPyPNspijfK+wK2jZI7T5F8Pmb4qEgaK3yo/Ru9jMBghfjtRPd?= =?utf-8?q?U0Q8AnjMMs5?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR04MB5736.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?i/CTtmweh2774hsGa5tX1AghFDB1?= =?utf-8?q?4CI1HuEPVzUCoiMUvLPizcK+KyljTV62zbtj+bCIf01r99iwOFBRv90XzvWW+MB9e?= =?utf-8?q?FHGsTgqd4/vWwDJiChzC9XAqw8nA5I2+RIsSUX/LImrr6OhrAbQoBRsDMCCx7jDOE?= =?utf-8?q?DJFw4yVnGz/irXN8R3K7SaJ0TNE5xgp/LZDotnyoG7AFdi6qUbIeQ8uzryy1mr3jq?= =?utf-8?q?n016JtiSnFrJSMxyg9mVDgkrfTXSyrZzZLtM07UP8bs8QtC+sg+pqyvqcrJu9/FWj?= =?utf-8?q?0Z4ws8frvEsY0dlvxXGWltE6Ah6yTeibk+NFj1I6/ZztFTACOLV2fmvWh7xCDUyci?= =?utf-8?q?nDA6gKILlrWhEjXHEHI68lNBn6aprQxdxtLAIIv2Q9tDa6tONLX6LnIrGQN+8FCqK?= =?utf-8?q?X4F0t+yWB5/FfWMsGG7ddG8z2NivM0DddZJ3QfTzBlkEJg/Xbvw4RIvd4eqkDiGJG?= =?utf-8?q?ZzzV16Tq47Mk0lUBtg3bPTFh4Bw7Ub70xqnQ6XIt9CW5kZ8ZwLnhH+xigAIS15WR0?= =?utf-8?q?qDAOGEkcglox/i2aPhp4ki9GkuPuUqYONlspktJTiUaXdA/+buPW1m+JDXIzYVoWH?= =?utf-8?q?9CrBhNM0weTp5FGabW/8wyMMf5UuH7bbMsEIgqcdaZR+/mVa4mio1WRfENpKPereJ?= =?utf-8?q?fTH8Fof2uG1lWFmOvHPYs5FDMHQD6J28sZEVDPVhGRfLFMl/rgDy2z7g+P5mWYn6n?= =?utf-8?q?DI5ycDytE/ukiUXgpHCbeLXN/gz7HKhX3yEK8RXbGo02cxyyBQP+WYcX8adN+L/Sw?= =?utf-8?q?Oddo+sskaXli/VQLmWYdTXMnqHFipTfyXASEkQTb7LZg76qNhwNQCqwtpmB4VHpV7?= =?utf-8?q?8n8IK+YjyRnO2sXDlfchjWe6k+XjB1Sb5aRzUFqTl+im1Haaca7gakWjm3UUcmmJs?= =?utf-8?q?2XZseC6yFnPKpwVRTyEnlxNVDuoGqB7+rO1zVX2FRaw/Uab2wyxLtB3287tR7KfRO?= =?utf-8?q?SKpoWzLBSqd02Ovajf5WmoVLc/bJ2mwf933wGJcMwwpI/kckWQLgPkNVZHSPP0k0B?= =?utf-8?q?7kh5hxQ/hF+o9kUZOkrWgdYSq57X2NH4KNJEGDhwIZVjjK/M1ncVpHn/h7rNZbfgi?= =?utf-8?q?kGZnxz8+1eBt0ezt63dIK52WhcMBST+DNdW48DIIDLo/2EtJAWlCCEP8ew18G9iER?= =?utf-8?q?Lyy10NZXvFOA3IPb4rVI4Yc2RBcERJ1mUpm+pS/OYgukeCqorLanJTLZiZ1Q556PS?= =?utf-8?q?R+fD2kk0Psp7OwSQriA5Uu0517gO4jAtBik4LeErurSeyvhreXTqtOv25t/iLGZH9?= =?utf-8?q?la50ZyjfwZBtVvPqzZpStBdO/AVGfRawzkTjhIn678QGs6H19JOSyd+eAbFfy1+dx?= =?utf-8?q?+tC4Rw0XqGhJ945M5cj1n8nnd1c64JSaDNw8A24WTTXIVnHLj0c4U628xxH7unxa2?= =?utf-8?q?o8GCaIy/MvNb/0Huxl9PzlCM7BA76+7LdzhOArQsq5jrrpAoebFWtCiQ/TQKk8IoB?= =?utf-8?q?4aY04tf2oRIo5j/9PTm8Ct6SSh2kpwqxohLNDpgX4DvAsPHvKGkfn56DVE2RHSB/B?= =?utf-8?q?8ijb5XhBQEttTUQZKH6+deODt2LRnHcGMs1mpnT+iq3Xeyku8RN+RfY=3D?= Content-ID: MIME-Version: 1.0 X-OriginatorOrg: espressif.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB5736.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e1fa108-6ed7-4dd7-7c1e-08dd3ebf774d X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jan 2025 10:43:41.7213 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5faf27fd-3557-4294-9545-8ea74a409f39 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 0MGmcTBf6OtNVOGi/ptriKO+ldtzd2/6PJWhhynALIeW3sLaI5/J5qHVteI6g3hTlvXnWKM2YEa5tLIzwZ7yYRH6ghrEXgqphUDhVnraxik= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYSPR04MB8166 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org Move common macros to local.h header --- newlib/libc/string/local.h | 32 +++++++++++++++++++++++ newlib/libc/string/memccpy.c | 34 +++++------------------- newlib/libc/string/memchr.c | 43 ++++++------------------------- newlib/libc/string/memcmp.c | 20 ++++----------- newlib/libc/string/memcpy.c | 23 ++++------------- newlib/libc/string/memmove.c | 23 ++++------------- newlib/libc/string/mempcpy.c | 24 +++++------------ newlib/libc/string/memrchr.c | 47 ++++++++-------------------------- newlib/libc/string/memset.c | 18 +++++-------- newlib/libc/string/rawmemchr.c | 35 +++---------------------- newlib/libc/string/stpcpy.c | 23 ++--------------- newlib/libc/string/stpncpy.c | 32 +++++------------------ newlib/libc/string/strcat.c | 25 +++--------------- newlib/libc/string/strchr.c | 30 ++++------------------ newlib/libc/string/strcmp.c | 23 ++--------------- newlib/libc/string/strcpy.c | 23 ++--------------- newlib/libc/string/strlen.c | 23 +++-------------- newlib/libc/string/strncat.c | 24 +++-------------- newlib/libc/string/strncmp.c | 24 +++-------------- newlib/libc/string/strncpy.c | 26 +++---------------- 20 files changed, 120 insertions(+), 432 deletions(-) -- 2.43.0 diff --git a/newlib/libc/string/local.h b/newlib/libc/string/local.h index 8d364fdaa..fb8e6c65c 100644 --- a/newlib/libc/string/local.h +++ b/newlib/libc/string/local.h @@ -17,4 +17,36 @@ int __wcwidth (wint_t); # define __inhibit_loop_to_libcall #endif +/* Nonzero if X is not aligned on a "long" boundary. */ +#define UNALIGNED_X(X) ((long)X & (sizeof (long) - 1)) +/* Nonzero if either X or Y is not aligned on a "long" boundary. */ +#define UNALIGNED_X_Y(X, Y) \ + (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) + +/* How many bytes are copied each iteration of the word copy loop. */ +#define LITTLE_BLOCK_SIZE (sizeof (long)) + +/* How many bytes are copied each iteration of the 4X unrolled loop. */ +#define BIG_BLOCK_SIZE (sizeof (long) << 2) + +/* Threshhold for punting to the little block byte copier. */ +#define TOO_SMALL_LITTLE_BLOCK(LEN) ((LEN) < LITTLE_BLOCK_SIZE) + +/* Threshhold for punting to the big block byte copier. */ +#define TOO_SMALL_BIG_BLOCK(LEN) ((LEN) < BIG_BLOCK_SIZE) + +/* Macros for detecting endchar. */ +#if LONG_MAX == 2147483647L +#define DETECT_NULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) +#else +#if LONG_MAX == 9223372036854775807L +/* Nonzero if X (a long int) contains a NULL byte. */ +#define DETECT_NULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) +#else +#error long int is not a 32bit or 64bit type. +#endif +#endif + +/* Returns nonzero if (long)X contains the byte used to fill (long)MASK. */ +#define DETECT_CHAR(X, MASK) (DETECT_NULL(X ^ MASK)) diff --git a/newlib/libc/string/memccpy.c b/newlib/libc/string/memccpy.c index d6b2f8bea..332332489 100644 --- a/newlib/libc/string/memccpy.c +++ b/newlib/libc/string/memccpy.c @@ -31,29 +31,7 @@ PORTABILITY #include #include #include - -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -/* How many bytes are copied each iteration of the word copy loop. */ -#define LITTLEBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the byte copier. */ -#define TOO_SMALL(LEN) ((LEN) < LITTLEBLOCKSIZE) - -/* Macros for detecting endchar */ -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - +#include "local.h" void * memccpy (void *__restrict dst0, @@ -88,7 +66,7 @@ memccpy (void *__restrict dst0, /* If the size is small, or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ - if (!TOO_SMALL(len0) && !UNALIGNED (src, dst)) + if (!TOO_SMALL_LITTLE_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) { unsigned int i; unsigned long mask = 0; @@ -102,19 +80,19 @@ memccpy (void *__restrict dst0, the word-sized segment with a word-sized block of the search character and then detecting for the presence of NULL in the result. */ - for (i = 0; i < LITTLEBLOCKSIZE; i++) + for (i = 0; i < sizeof(mask); i++) mask = (mask << 8) + endchar; /* Copy one long word at a time if possible. */ - while (len0 >= LITTLEBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(len0)) { unsigned long buffer = (unsigned long)(*aligned_src); buffer ^= mask; - if (DETECTNULL (buffer)) + if (DETECT_NULL(buffer)) break; /* endchar is found, go byte by byte from here */ *aligned_dst++ = *aligned_src++; - len0 -= LITTLEBLOCKSIZE; + len0 -= LITTLE_BLOCK_SIZE; } /* Pick up any residual with a byte copier. */ diff --git a/newlib/libc/string/memchr.c b/newlib/libc/string/memchr.c index 21bc4d879..a702a9142 100644 --- a/newlib/libc/string/memchr.c +++ b/newlib/libc/string/memchr.c @@ -32,34 +32,7 @@ QUICKREF #include <_ansi.h> #include #include - -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X) ((long)X & (sizeof (long) - 1)) - -/* How many bytes are loaded each iteration of the word copy loop. */ -#define LBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the bytewise iterator. */ -#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - -/* DETECTCHAR returns nonzero if (long)X contains the byte used - to fill (long)MASK. */ -#define DETECTCHAR(X,MASK) (DETECTNULL(X ^ MASK)) +#include "local.h" void * memchr (const void *src_void, @@ -74,7 +47,7 @@ memchr (const void *src_void, unsigned long mask; unsigned int i; - while (UNALIGNED (src)) + while (UNALIGNED_X(src)) { if (!length--) return NULL; @@ -83,7 +56,7 @@ memchr (const void *src_void, src++; } - if (!TOO_SMALL (length)) + if (!TOO_SMALL_LITTLE_BLOCK(length)) { /* If we get this far, we know that length is large and src is word-aligned. */ @@ -96,18 +69,18 @@ memchr (const void *src_void, asrc = (unsigned long *) src; mask = d << 8 | d; mask = mask << 16 | mask; - for (i = 32; i < LBLOCKSIZE * 8; i <<= 1) + for (i = 32; i < sizeof(mask) * 8; i <<= 1) mask = (mask << i) | mask; - while (length >= LBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(length)) { - if (DETECTCHAR (*asrc, mask)) + if (DETECT_CHAR(*asrc, mask)) break; - length -= LBLOCKSIZE; + length -= LITTLE_BLOCK_SIZE; asrc++; } - /* If there are fewer than LBLOCKSIZE characters left, + /* If there are fewer than LITTLE_BLOCK_SIZE characters left, then we resort to the bytewise loop. */ src = (unsigned char *) asrc; diff --git a/newlib/libc/string/memcmp.c b/newlib/libc/string/memcmp.c index 342fb9fbc..c996f3349 100644 --- a/newlib/libc/string/memcmp.c +++ b/newlib/libc/string/memcmp.c @@ -30,17 +30,7 @@ QUICKREF */ #include - - -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -/* How many bytes are copied each iteration of the word copy loop. */ -#define LBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the byte copier. */ -#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) +#include "local.h" int memcmp (const void *m1, @@ -70,22 +60,22 @@ memcmp (const void *m1, /* If the size is too small, or either pointer is unaligned, then we punt to the byte compare loop. Hopefully this will not turn up in inner loops. */ - if (!TOO_SMALL(n) && !UNALIGNED(s1,s2)) + if (!TOO_SMALL_LITTLE_BLOCK(n) && !UNALIGNED_X_Y(s1,s2)) { /* Otherwise, load and compare the blocks of memory one word at a time. */ a1 = (unsigned long*) s1; a2 = (unsigned long*) s2; - while (n >= LBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(n)) { if (*a1 != *a2) break; a1++; a2++; - n -= LBLOCKSIZE; + n -= LITTLE_BLOCK_SIZE; } - /* check m mod LBLOCKSIZE remaining characters */ + /* check m mod LITTLE_BLOCK_SIZE remaining characters */ s1 = (unsigned char*)a1; s2 = (unsigned char*)a2; diff --git a/newlib/libc/string/memcpy.c b/newlib/libc/string/memcpy.c index 52f716b92..1bbd4e0bf 100644 --- a/newlib/libc/string/memcpy.c +++ b/newlib/libc/string/memcpy.c @@ -31,19 +31,6 @@ QUICKREF #include #include "local.h" -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -/* How many bytes are copied each iteration of the 4X unrolled loop. */ -#define BIGBLOCKSIZE (sizeof (long) << 2) - -/* How many bytes are copied each iteration of the word copy loop. */ -#define LITTLEBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the byte copier. */ -#define TOO_SMALL(LEN) ((LEN) < BIGBLOCKSIZE) - void * __inhibit_loop_to_libcall memcpy (void *__restrict dst0, @@ -70,26 +57,26 @@ memcpy (void *__restrict dst0, /* If the size is small, or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ - if (!TOO_SMALL(len0) && !UNALIGNED (src, dst)) + if (!TOO_SMALL_BIG_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; /* Copy 4X long words at a time if possible. */ - while (len0 >= BIGBLOCKSIZE) + while (!TOO_SMALL_BIG_BLOCK(len0)) { *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; - len0 -= BIGBLOCKSIZE; + len0 -= BIG_BLOCK_SIZE; } /* Copy one long word at a time if possible. */ - while (len0 >= LITTLEBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(len0)) { *aligned_dst++ = *aligned_src++; - len0 -= LITTLEBLOCKSIZE; + len0 -= LITTLE_BLOCK_SIZE; } /* Pick up any residual with a byte copier. */ diff --git a/newlib/libc/string/memmove.c b/newlib/libc/string/memmove.c index da5dfdbdd..a82744c7d 100644 --- a/newlib/libc/string/memmove.c +++ b/newlib/libc/string/memmove.c @@ -34,19 +34,6 @@ QUICKREF #include #include "local.h" -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -/* How many bytes are copied each iteration of the 4X unrolled loop. */ -#define BIGBLOCKSIZE (sizeof (long) << 2) - -/* How many bytes are copied each iteration of the word copy loop. */ -#define LITTLEBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the byte copier. */ -#define TOO_SMALL(LEN) ((LEN) < BIGBLOCKSIZE) - /*SUPPRESS 20*/ void * __inhibit_loop_to_libcall @@ -98,26 +85,26 @@ memmove (void *dst_void, /* Use optimizing algorithm for a non-destructive copy to closely match memcpy. If the size is small or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ - if (!TOO_SMALL(length) && !UNALIGNED (src, dst)) + if (!TOO_SMALL_BIG_BLOCK(length) && !UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; /* Copy 4X long words at a time if possible. */ - while (length >= BIGBLOCKSIZE) + while (!TOO_SMALL_BIG_BLOCK(length)) { *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; - length -= BIGBLOCKSIZE; + length -= BIG_BLOCK_SIZE; } /* Copy one long word at a time if possible. */ - while (length >= LITTLEBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(length)) { *aligned_dst++ = *aligned_src++; - length -= LITTLEBLOCKSIZE; + length -= LITTLE_BLOCK_SIZE; } /* Pick up any residual with a byte copier. */ diff --git a/newlib/libc/string/mempcpy.c b/newlib/libc/string/mempcpy.c index 129165603..06e97de85 100644 --- a/newlib/libc/string/mempcpy.c +++ b/newlib/libc/string/mempcpy.c @@ -28,19 +28,7 @@ PORTABILITY #include #include #include - -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -/* How many bytes are copied each iteration of the 4X unrolled loop. */ -#define BIGBLOCKSIZE (sizeof (long) << 2) - -/* How many bytes are copied each iteration of the word copy loop. */ -#define LITTLEBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the byte copier. */ -#define TOO_SMALL(LEN) ((LEN) < BIGBLOCKSIZE) +#include "local.h" void * mempcpy (void *dst0, @@ -65,26 +53,26 @@ mempcpy (void *dst0, /* If the size is small, or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ - if (!TOO_SMALL(len0) && !UNALIGNED (src, dst)) + if (!TOO_SMALL_BIG_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; /* Copy 4X long words at a time if possible. */ - while (len0 >= BIGBLOCKSIZE) + while (!TOO_SMALL_BIG_BLOCK(len0)) { *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; *aligned_dst++ = *aligned_src++; - len0 -= BIGBLOCKSIZE; + len0 -= BIG_BLOCK_SIZE; } /* Copy one long word at a time if possible. */ - while (len0 >= LITTLEBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(len0)) { *aligned_dst++ = *aligned_src++; - len0 -= LITTLEBLOCKSIZE; + len0 -= LITTLE_BLOCK_SIZE; } /* Pick up any residual with a byte copier. */ diff --git a/newlib/libc/string/memrchr.c b/newlib/libc/string/memrchr.c index 652efb359..0a0c80fd9 100644 --- a/newlib/libc/string/memrchr.c +++ b/newlib/libc/string/memrchr.c @@ -32,34 +32,7 @@ QUICKREF #include <_ansi.h> #include #include - -/* Nonzero if X is not aligned on a "long" boundary. */ -#define UNALIGNED(X) ((long)(X + 1) & (sizeof (long) - 1)) - -/* How many bytes are loaded each iteration of the word copy loop. */ -#define LBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the bytewise iterator. */ -#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - -/* DETECTCHAR returns nonzero if (long)X contains the byte used - to fill (long)MASK. */ -#define DETECTCHAR(X,MASK) (DETECTNULL(X ^ MASK)) +#include "local.h" void * memrchr (const void *src_void, @@ -74,7 +47,7 @@ memrchr (const void *src_void, unsigned long mask; unsigned int i; - while (UNALIGNED (src)) + while (UNALIGNED_X(src)) { if (!length--) return NULL; @@ -83,7 +56,7 @@ memrchr (const void *src_void, src--; } - if (!TOO_SMALL (length)) + if (!TOO_SMALL_LITTLE_BLOCK(length)) { /* If we get this far, we know that length is large and src is word-aligned. */ @@ -93,24 +66,24 @@ memrchr (const void *src_void, the word-sized segment with a word-sized block of the search character and then detecting for the presence of NUL in the result. */ - asrc = (unsigned long *) (src - LBLOCKSIZE + 1); + asrc = (unsigned long *) (src - LITTLE_BLOCK_SIZE + 1); mask = d << 8 | d; mask = mask << 16 | mask; - for (i = 32; i < LBLOCKSIZE * 8; i <<= 1) + for (i = 32; i < sizeof(mask) * 8; i <<= 1) mask = (mask << i) | mask; - while (length >= LBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(length)) { - if (DETECTCHAR (*asrc, mask)) + if (DETECT_CHAR(*asrc, mask)) break; - length -= LBLOCKSIZE; + length -= LITTLE_BLOCK_SIZE; asrc--; } - /* If there are fewer than LBLOCKSIZE characters left, + /* If there are fewer than LITTLE_BLOCK_SIZE characters left, then we resort to the bytewise loop. */ - src = (unsigned char *) asrc + LBLOCKSIZE - 1; + src = (unsigned char *) asrc + LITTLE_BLOCK_SIZE - 1; } #endif /* not PREFER_SIZE_OVER_SPEED */ diff --git a/newlib/libc/string/memset.c b/newlib/libc/string/memset.c index e8e667a24..99b5526c7 100644 --- a/newlib/libc/string/memset.c +++ b/newlib/libc/string/memset.c @@ -29,10 +29,6 @@ QUICKREF #include #include "local.h" -#define LBLOCKSIZE (sizeof(long)) -#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) -#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) - void * __inhibit_loop_to_libcall memset (void *m, @@ -48,7 +44,7 @@ memset (void *m, unsigned int d = c & 0xff; /* To avoid sign extension, copy C to an unsigned variable. */ - while (UNALIGNED (s)) + while (UNALIGNED_X(s)) { if (n--) *s++ = (char) c; @@ -56,7 +52,7 @@ memset (void *m, return m; } - if (!TOO_SMALL (n)) + if (!TOO_SMALL_LITTLE_BLOCK(n)) { /* If we get this far, we know that n is large and s is word-aligned. */ aligned_addr = (unsigned long *) s; @@ -65,23 +61,23 @@ memset (void *m, we can set large blocks quickly. */ buffer = (d << 8) | d; buffer |= (buffer << 16); - for (i = 32; i < LBLOCKSIZE * 8; i <<= 1) + for (i = 32; i < sizeof(buffer) * 8; i <<= 1) buffer = (buffer << i) | buffer; /* Unroll the loop. */ - while (n >= LBLOCKSIZE*4) + while (!TOO_SMALL_BIG_BLOCK(n)) { *aligned_addr++ = buffer; *aligned_addr++ = buffer; *aligned_addr++ = buffer; *aligned_addr++ = buffer; - n -= 4*LBLOCKSIZE; + n -= BIG_BLOCK_SIZE; } - while (n >= LBLOCKSIZE) + while (!TOO_SMALL_LITTLE_BLOCK(n)) { *aligned_addr++ = buffer; - n -= LBLOCKSIZE; + n -= LITTLE_BLOCK_SIZE; } /* Pick up the remainder with a bytewise loop. */ s = (char*)aligned_addr; diff --git a/newlib/libc/string/rawmemchr.c b/newlib/libc/string/rawmemchr.c index 56e2b5e2d..1458a9d8b 100644 --- a/newlib/libc/string/rawmemchr.c +++ b/newlib/libc/string/rawmemchr.c @@ -31,34 +31,7 @@ QUICKREF #include <_ansi.h> #include #include - -/* Nonzero if X is not aligned on a "long" boundary. */ -#define UNALIGNED(X) ((long)X & (sizeof (long) - 1)) - -/* How many bytes are loaded each iteration of the word copy loop. */ -#define LBLOCKSIZE (sizeof (long)) - -/* Threshhold for punting to the bytewise iterator. */ -#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - -/* DETECTCHAR returns nonzero if (long)X contains the byte used - to fill (long)MASK. */ -#define DETECTCHAR(X,MASK) (DETECTNULL(X ^ MASK)) +#include "local.h" void * rawmemchr (const void *src_void, @@ -72,7 +45,7 @@ rawmemchr (const void *src_void, unsigned long mask; unsigned int i; - while (UNALIGNED (src)) + while (UNALIGNED_X (src)) { if (*src == d) return (void *) src; @@ -89,12 +62,12 @@ rawmemchr (const void *src_void, asrc = (unsigned long *) src; mask = d << 8 | d; mask = mask << 16 | mask; - for (i = 32; i < LBLOCKSIZE * 8; i <<= 1) + for (i = 32; i < sizeof(mask) * 8; i <<= 1) mask = (mask << i) | mask; while (1) { - if (DETECTCHAR (*asrc, mask)) + if (DETECT_CHAR (*asrc, mask)) break; asrc++; } diff --git a/newlib/libc/string/stpcpy.c b/newlib/libc/string/stpcpy.c index 4e2ae9fe0..884ac8f10 100644 --- a/newlib/libc/string/stpcpy.c +++ b/newlib/libc/string/stpcpy.c @@ -33,25 +33,6 @@ QUICKREF /*SUPPRESS 560*/ /*SUPPRESS 530*/ -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - char* stpcpy (char *__restrict dst, const char *__restrict src) @@ -61,14 +42,14 @@ stpcpy (char *__restrict dst, const long *aligned_src; /* If SRC or DEST is unaligned, then copy bytes. */ - if (!UNALIGNED (src, dst)) + if (!UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; /* SRC and DEST are both "long int" aligned, try to do "long int" sized copies. */ - while (!DETECTNULL(*aligned_src)) + while (!DETECT_NULL(*aligned_src)) { *aligned_dst++ = *aligned_src++; } diff --git a/newlib/libc/string/stpncpy.c b/newlib/libc/string/stpncpy.c index 87fe268cf..2e356c4b8 100644 --- a/newlib/libc/string/stpncpy.c +++ b/newlib/libc/string/stpncpy.c @@ -35,31 +35,11 @@ QUICKREF #include #include +#include "local.h" /*SUPPRESS 560*/ /*SUPPRESS 530*/ -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - -#define TOO_SMALL(LEN) ((LEN) < sizeof (long)) - char * stpncpy (char *__restrict dst, const char *__restrict src, @@ -72,16 +52,16 @@ stpncpy (char *__restrict dst, const long *aligned_src; /* If SRC and DEST is aligned and count large enough, then copy words. */ - if (!UNALIGNED (src, dst) && !TOO_SMALL (count)) + if (!UNALIGNED_X_Y (src, dst) && !TOO_SMALL_LITTLE_BLOCK (count)) { aligned_dst = (long*)dst; aligned_src = (long*)src; - /* SRC and DEST are both "long int" aligned, try to do "long int" - sized copies. */ - while (count >= sizeof (long int) && !DETECTNULL(*aligned_src)) + /* SRC and DEST are both LITTLE_BLOCK_SIZE aligned, + try to do LITTLE_BLOCK_SIZE sized copies. */ + while (!TOO_SMALL_LITTLE_BLOCK (count) && !DETECT_NULL(*aligned_src)) { - count -= sizeof (long int); + count -= LITTLE_BLOCK_SIZE; *aligned_dst++ = *aligned_src++; } diff --git a/newlib/libc/string/strcat.c b/newlib/libc/string/strcat.c index 92313c492..71dd1db75 100644 --- a/newlib/libc/string/strcat.c +++ b/newlib/libc/string/strcat.c @@ -29,26 +29,7 @@ QUICKREF #include #include - -/* Nonzero if X is aligned on a "long" boundary. */ -#define ALIGNED(X) \ - (((long)X & (sizeof (long) - 1)) == 0) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - +#include "local.h" /*SUPPRESS 560*/ /*SUPPRESS 530*/ @@ -71,10 +52,10 @@ strcat (char *__restrict s1, /* Skip over the data in s1 as quickly as possible. */ - if (ALIGNED (s1)) + if (!UNALIGNED_X(s1)) { unsigned long *aligned_s1 = (unsigned long *)s1; - while (!DETECTNULL (*aligned_s1)) + while (!DETECT_NULL(*aligned_s1)) aligned_s1++; s1 = (char *)aligned_s1; diff --git a/newlib/libc/string/strchr.c b/newlib/libc/string/strchr.c index 96f30be04..66afefdb1 100644 --- a/newlib/libc/string/strchr.c +++ b/newlib/libc/string/strchr.c @@ -30,26 +30,6 @@ QUICKREF #include #include -/* Nonzero if X is not aligned on a "long" boundary. */ -#define UNALIGNED(X) ((long)X & (sizeof (long) - 1)) - -/* How many bytes are loaded each iteration of the word copy loop. */ -#define LBLOCKSIZE (sizeof (long)) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -/* DETECTCHAR returns nonzero if (long)X contains the byte used - to fill (long)MASK. */ -#define DETECTCHAR(X,MASK) (DETECTNULL(X ^ MASK)) char * strchr (const char *s1, @@ -65,7 +45,7 @@ strchr (const char *s1, /* Special case for finding 0. */ if (!c) { - while (UNALIGNED (s)) + while (UNALIGNED_X(s)) { if (!*s) return (char *) s; @@ -73,7 +53,7 @@ strchr (const char *s1, } /* Operate a word at a time. */ aligned_addr = (unsigned long *) s; - while (!DETECTNULL (*aligned_addr)) + while (!DETECT_NULL(*aligned_addr)) aligned_addr++; /* Found the end of string. */ s = (const unsigned char *) aligned_addr; @@ -83,7 +63,7 @@ strchr (const char *s1, } /* All other bytes. Align the pointer, then search a long at a time. */ - while (UNALIGNED (s)) + while (UNALIGNED_X(s)) { if (!*s) return NULL; @@ -93,11 +73,11 @@ strchr (const char *s1, } mask = c; - for (j = 8; j < LBLOCKSIZE * 8; j <<= 1) + for (j = 8; j < sizeof(mask) * 8; j <<= 1) mask = (mask << j) | mask; aligned_addr = (unsigned long *) s; - while (!DETECTNULL (*aligned_addr) && !DETECTCHAR (*aligned_addr, mask)) + while (!DETECT_NULL(*aligned_addr) && !DETECT_CHAR(*aligned_addr, mask)) aligned_addr++; /* The block of bytes currently pointed to by aligned_addr diff --git a/newlib/libc/string/strcmp.c b/newlib/libc/string/strcmp.c index 894424a69..1cd2ec1c1 100644 --- a/newlib/libc/string/strcmp.c +++ b/newlib/libc/string/strcmp.c @@ -32,25 +32,6 @@ QUICKREF #include #include -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -/* DETECTNULL returns nonzero if (long)X contains a NULL byte. */ -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - int strcmp (const char *s1, const char *s2) @@ -68,7 +49,7 @@ strcmp (const char *s1, unsigned long *a2; /* If s1 or s2 are unaligned, then compare bytes. */ - if (!UNALIGNED (s1, s2)) + if (!UNALIGNED_X_Y(s1, s2)) { /* If s1 and s2 are word-aligned, compare them a word at a time. */ a1 = (unsigned long*)s1; @@ -77,7 +58,7 @@ strcmp (const char *s1, { /* To get here, *a1 == *a2, thus if we find a null in *a1, then the strings must be equal, so return zero. */ - if (DETECTNULL (*a1)) + if (DETECT_NULL(*a1)) return 0; a1++; diff --git a/newlib/libc/string/strcpy.c b/newlib/libc/string/strcpy.c index 94e16b512..f79651e75 100644 --- a/newlib/libc/string/strcpy.c +++ b/newlib/libc/string/strcpy.c @@ -32,25 +32,6 @@ QUICKREF /*SUPPRESS 560*/ /*SUPPRESS 530*/ -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - char* strcpy (char *dst0, const char *src0) @@ -69,14 +50,14 @@ strcpy (char *dst0, const long *aligned_src; /* If SRC or DEST is unaligned, then copy bytes. */ - if (!UNALIGNED (src, dst)) + if (!UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; /* SRC and DEST are both "long int" aligned, try to do "long int" sized copies. */ - while (!DETECTNULL(*aligned_src)) + while (!DETECT_NULL(*aligned_src)) { *aligned_dst++ = *aligned_src++; } diff --git a/newlib/libc/string/strlen.c b/newlib/libc/string/strlen.c index acffa49e1..f48d6d400 100644 --- a/newlib/libc/string/strlen.c +++ b/newlib/libc/string/strlen.c @@ -29,24 +29,7 @@ QUICKREF #include <_ansi.h> #include #include - -#define LBLOCKSIZE (sizeof (long)) -#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif +#include "local.h" size_t strlen (const char *str) @@ -57,7 +40,7 @@ strlen (const char *str) unsigned long *aligned_addr; /* Align the pointer, so we can search a word at a time. */ - while (UNALIGNED (str)) + while (UNALIGNED_X(str)) { if (!*str) return str - start; @@ -67,7 +50,7 @@ strlen (const char *str) /* If the string is word-aligned, we can check for the presence of a null in each word-sized block. */ aligned_addr = (unsigned long *)str; - while (!DETECTNULL (*aligned_addr)) + while (!DETECT_NULL(*aligned_addr)) aligned_addr++; /* Once a null is detected, we check each byte in that block for a diff --git a/newlib/libc/string/strncat.c b/newlib/libc/string/strncat.c index 7351913f9..01f20f681 100644 --- a/newlib/libc/string/strncat.c +++ b/newlib/libc/string/strncat.c @@ -37,25 +37,7 @@ QUICKREF #include #include - -/* Nonzero if X is aligned on a "long" boundary. */ -#define ALIGNED(X) \ - (((long)X & (sizeof (long) - 1)) == 0) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif +#include "local.h" char * strncat (char *__restrict s1, @@ -78,10 +60,10 @@ strncat (char *__restrict s1, char *s = s1; /* Skip over the data in s1 as quickly as possible. */ - if (ALIGNED (s1)) + if (!UNALIGNED_X(s1)) { unsigned long *aligned_s1 = (unsigned long *)s1; - while (!DETECTNULL (*aligned_s1)) + while (!DETECT_NULL(*aligned_s1)) aligned_s1++; s1 = (char *)aligned_s1; diff --git a/newlib/libc/string/strncmp.c b/newlib/libc/string/strncmp.c index 16f8a7729..d59a26364 100644 --- a/newlib/libc/string/strncmp.c +++ b/newlib/libc/string/strncmp.c @@ -31,25 +31,7 @@ QUICKREF #include #include - -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -/* DETECTNULL returns nonzero if (long)X contains a NULL byte. */ -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif +#include "local.h" int strncmp (const char *s1, @@ -77,7 +59,7 @@ strncmp (const char *s1, return 0; /* If s1 or s2 are unaligned, then compare bytes. */ - if (!UNALIGNED (s1, s2)) + if (!UNALIGNED_X_Y(s1, s2)) { /* If s1 and s2 are word-aligned, compare them a word at a time. */ a1 = (unsigned long*)s1; @@ -88,7 +70,7 @@ strncmp (const char *s1, /* If we've run out of bytes or hit a null, return zero since we already know *a1 == *a2. */ - if (n == 0 || DETECTNULL (*a1)) + if (n == 0 || DETECT_NULL (*a1)) return 0; a1++; diff --git a/newlib/libc/string/strncpy.c b/newlib/libc/string/strncpy.c index e7eb34d72..98748a17d 100644 --- a/newlib/libc/string/strncpy.c +++ b/newlib/libc/string/strncpy.c @@ -33,31 +33,11 @@ QUICKREF #include #include +#include "local.h" /*SUPPRESS 560*/ /*SUPPRESS 530*/ -/* Nonzero if either X or Y is not aligned on a "long" boundary. */ -#define UNALIGNED(X, Y) \ - (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) - -#if LONG_MAX == 2147483647L -#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) -#else -#if LONG_MAX == 9223372036854775807L -/* Nonzero if X (a long int) contains a NULL byte. */ -#define DETECTNULL(X) (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080) -#else -#error long int is not a 32bit or 64bit type. -#endif -#endif - -#ifndef DETECTNULL -#error long int is not a 32bit or 64bit byte -#endif - -#define TOO_SMALL(LEN) ((LEN) < sizeof (long)) - char * strncpy (char *__restrict dst0, const char *__restrict src0, @@ -86,14 +66,14 @@ strncpy (char *__restrict dst0, const long *aligned_src; /* If SRC and DEST is aligned and count large enough, then copy words. */ - if (!UNALIGNED (src, dst) && !TOO_SMALL (count)) + if (!UNALIGNED_X_Y(src, dst) && !TOO_SMALL_LITTLE_BLOCK(count)) { aligned_dst = (long*)dst; aligned_src = (long*)src; /* SRC and DEST are both "long int" aligned, try to do "long int" sized copies. */ - while (count >= sizeof (long int) && !DETECTNULL(*aligned_src)) + while (!TOO_SMALL_LITTLE_BLOCK(count) && !DETECT_NULL(*aligned_src)) { count -= sizeof (long int); *aligned_dst++ = *aligned_src++; From patchwork Mon Jan 27 10:45:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Lapshin X-Patchwork-Id: 105432 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 954DE3857C7F for ; Mon, 27 Jan 2025 10:46:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 954DE3857C7F Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=espressifsystems.onmicrosoft.com header.i=@espressifsystems.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-espressifsystems-onmicrosoft-com header.b=Pljft7Fq X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01on2072f.outbound.protection.outlook.com [IPv6:2a01:111:f403:2011::72f]) by sourceware.org (Postfix) with ESMTPS id D2102385843D for ; Mon, 27 Jan 2025 10:45:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D2102385843D Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=espressif.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=espressif.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D2102385843D Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2011::72f ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974719; cv=pass; b=bWcrmln5PLZvtqYQyIG2e3WcUvkTjQuHYDq132dNz6PUQChjrrljjvJKGZAyENWzls7uZkSpGD1EEcySqE+TEaBEoGxVIt9wkYYNMfrF7NfRtxnnDjOWGT/qvannDkdfXpcc5oW9B4bKxGy8fK0dwgGOJHnDBf8i8VuD2RAnO8s= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974719; c=relaxed/simple; bh=wA/gys9U8bKr5a4qxde83YlGvL6phBoh8Ixvgd2sXGc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ePb75qwiQW2DIYmdatMJPvVunz7HsIfo8XtY8RBmp4AHgA/oWpdiV9qFffN7IWz1UH+h/k264JR3JUHkZ+mQOh6TLPZlZEH2yoxRLdr9VxLsheMHeekMQAmg3mZfs8NlEvIwW41Fu77JC4jWdtluTFACozxElxpvn5nUKehYfvg= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D2102385843D ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MJIms0CDXOVo6iKSwC8OHlCwA0Jpl8UoWnqUKvKmxumOtboYhcj87x1UKmriua23d3BjK1FZ9cH51C7wF4zffbYtQyblob+xUqwh7J8bfaxGZarqLBws5jHOpoepHYCimJAf/SuD5Baa5J+313gdv3JHDd1VgAxwcOXoR4ZkvP3k7TJMqv6rm9TfFsW38K4QrraP7WyGFN2jjCzd6au/RNuiZ1YXvMrvWHyeqoQMQtSAT977xiNiekWmu7Zt3hhAMqVXQx3dfSjioGX2zff7wKfqwtnYwWRJjt5TswkNJc7CafiiQIAu/kmnenNRNTI8xXgddkYP/vlRxnPgN3VVmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wA/gys9U8bKr5a4qxde83YlGvL6phBoh8Ixvgd2sXGc=; b=Ts4174AkpoCTXtYi5SFkuR1t7I4i8YGfAPbmZ+V5M8ShYafFeaR4+H7WXoBYF4csdcSk+xi3T65OoWZSzpiR5Up3PKNKTogVM0P0LYu2pRlomBpXiwQLMddvRohCDtWcXJhWH76MQ0pRiSck8vB95+qC/x75R1X6VVKBGbsKQ1f0Zxgr5wedf8nmeO+UA7fQ2pYkCwe8ZxrG6jNW44GkTg4mMk49c0fBGaw9gM1629nTUOMEFSTGbUVa5+JndxJ0p47Axb1K6WSPH9iGhAS0nnU2wpz2Nqr6kMSFkOr6WfbT7+zZKY5mypK+eLZny9y8/x3a1YeZlvpMPYrz4D1ssw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=espressif.com; dmarc=pass action=none header.from=espressif.com; dkim=pass header.d=espressif.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=espressifsystems.onmicrosoft.com; s=selector1-espressifsystems-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wA/gys9U8bKr5a4qxde83YlGvL6phBoh8Ixvgd2sXGc=; b=Pljft7Fqq4uFN7bl7WJ1yQ9KZRvN9kU5Z41YoHd6s3yUc2zaf2KZ8Uy2SSIsTH9BVJ7Egmcr4HYqHAA4nHbHe0osxck+Rgy8C6j/Zr2cfGwrkSmMtqZXQ0f0FTWLk8ElEu6JXVdcUzuEndBcHq3ZVrnU/gS3UbL5WSmhsKeBi6Y= Received: from TYZPR04MB5736.apcprd04.prod.outlook.com (2603:1096:400:1fa::7) by PUZPR04MB6488.apcprd04.prod.outlook.com (2603:1096:301:f4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Mon, 27 Jan 2025 10:45:11 +0000 Received: from TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521]) by TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521%6]) with mapi id 15.20.8377.009; Mon, 27 Jan 2025 10:45:11 +0000 From: Alexey Lapshin To: "newlib@sourceware.org" CC: Alexey Gerenkov , Ivan Grokhotkov Subject: [PATCH 2/6] newlib: memccpy: unify mask filling with other memory functions Thread-Topic: [PATCH 2/6] newlib: memccpy: unify mask filling with other memory functions Thread-Index: AQHbcKiKtffC/puspkGOxMAkebh/cg== Date: Mon, 27 Jan 2025 10:45:11 +0000 Message-ID: <23531015089930bb0165eeb69a6b5e24d6c5a3f7.camel@espressif.com> References: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> In-Reply-To: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=espressif.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR04MB5736:EE_|PUZPR04MB6488:EE_ x-ms-office365-filtering-correlation-id: d5b807e6-f8fd-4b5e-e50c-08dd3ebfacd5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|376014|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?NjKv2FJFH/wq0DJORN2bMMLCyqQeXeq?= =?utf-8?q?VdlRoVSvOypuY/G8KoLqflT3kV7FiulUzZX/gLx1uLg2uS011rE8xqAnIrvswW6r3?= =?utf-8?q?hjzo+WQwHrqirqLPbcaG5guN7EOY6c07mlrm9mogLWnLU38E+CbSr9ev3pGMihjjS?= =?utf-8?q?gwOOZ0qvsSIbNv0vMYOqlcDkgdXIYG2Yjk/T/n8rfFkC7SLJHcnCWqmsBR9oVHNQo?= =?utf-8?q?P83z4gypt9gUmnadRSA9N2NsAdOhyBo9Tw5yRAWkdwvVC5QURlaj7fwccdpiIm0cE?= =?utf-8?q?xwE/EGS52FR7W6IF3iK2haB1g5x82dcr/DJRgCeK8vVvueZSrEzCQHuzm3tlouXOY?= =?utf-8?q?IBlHBUTBsX5cS6FPHNpFbkCI7K/K9jgiKu/Bc1972j7qN0D5zZ6gxHQKp6onvNk11?= =?utf-8?q?Xd8WxP5HyAXL1mZ8CIjGbFPAz8FtNXfjOaTw3C+b4AAvV0pk35bFSkqraFJLfBkeH?= =?utf-8?q?U7r21c0EpIDX90U2Ai2tFZnelD8HqbTt5y5XtGQiuSWvA/dH+yPqKevvlI0K2I3YG?= =?utf-8?q?+/Paz87NzIuu4yUA97UOjNWoiHxhE5K01niVARrDZjlNdfKLFkM5gCQRWPCj33DCH?= =?utf-8?q?ye431BR65YhEJN/pbRuLs1V8XRIdCoSPVgUS00A7E3hXFm5LPAeKbLBRswMSgcv7r?= =?utf-8?q?anxWu3RRN8pMj86y2XQPXop71/3mUy/5GJ4G1xK/15L+o5E9FumrkgNOEeA3G5ePH?= =?utf-8?q?Yxa9DEJ5JQZQSiGP40SUaIL7Wisykd4RCJAyndurGFCTRhEgVpYOX0dGJGrsdTtmo?= =?utf-8?q?Irnt3kQnOFg5Gk7eHTjXLRFLgymlfubCpwYO0P8NZIbG6z3X8zehCQftAgpA+Vdr1?= =?utf-8?q?cTGqhwzC7HCri13Joui2zKdTqPvOXJV6k8EAG2jgHVjtYAzPgW2QDuE6syk+VOo+2?= =?utf-8?q?/VaTpm59F1hE5LgdWCnq8kWkYZWk+bd/kdrTPc1ktGUyyiS++bEaj5ilXLTYeFuxt?= =?utf-8?q?ulE6+HZyEm93EgN0/JX/HS6CDUnl4F590dwB3c/4Bg2G/McVo/diyWZYS7rUYAMAH?= =?utf-8?q?sThL8jKpRa7yl7PMZWlMKccbfdkEVUUu+qRL3kkH86VvMjYAlPu41BSjh77Tt7q9b?= =?utf-8?q?aSFCMAsqtQlaU/S+AzLj+IWIHMl6LjqTIjgh2ooyc6dUKRpY+Z13ZR2rG9Ckecsn5?= =?utf-8?q?dxNrDZmK1qEXAcTQsgE0Ww+qMJiIfcB3b2qFz1tbrj1iZX9ePrGiH4hYufex0nYEY?= =?utf-8?q?j9bMImK9cTcUSmgRLKlpF7xJrcURQSIRmfyu0RiD1SPlq9Zzht5ofYVXp9UtZuihT?= =?utf-8?q?jTC4se2b+Q43n5S4QEMFnwIn+34d5Cqtb/SfIeviH+xSNVm00+g21zhQssWvNW9Zy?= =?utf-8?q?+/nhfYCnVDgKH10YiLG2tyjLMh/w9zq9zo92pdYV3RCkn0o+LKEfk1d9GmWJVBW6y?= =?utf-8?q?pY4ix/MjTFE?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR04MB5736.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?23rGdLfYuO4951Pz9J9HGfHnwjMx?= =?utf-8?q?eFemdWqfOpu9ZZUVCUiwr45otB0JxiG+wcrg4ZWHvaWEmrv/kW91lBR0Z3s0GWxwi?= =?utf-8?q?CupDADLnOnHrYamRfuQrl1r8nKHt3K7gogapctc+GDtNZbfEbOGZqG+YwZcdIGDvp?= =?utf-8?q?3m1hrWp9VJ/2a63E027eWoLztcvr2L6o8BNE3zS6ynI8B1OjabHLpyCqOnzB+2a+8?= =?utf-8?q?VTbv1pv53/eVKxaiCp8VdW13gnQGY/7HDz3X15liiXgCXiR6rgTkltulDd34/PmJm?= =?utf-8?q?EcRn8F2L3Lldq68z8N9DI4ZOdEu8lIqAj0Gp+gZiHbGIXGNuIewKKnt1Hib7lL2dM?= =?utf-8?q?zGVCoZ20VignjDsxBhXwSL1R7ICN4mAqDlQjdJmvyUWGJI8ZvWyI07ZON4XtmQeif?= =?utf-8?q?/aCwCg+sjO2OR58DTVfFvqdtj69f1bkN3tbm1rDtVEdlhfQ9yLJrhRI+/21f3NYUI?= =?utf-8?q?lWONCxKcmBmA03FQmm7K613PnLOIn63HFDbdKk0Ofpsf0CZnIDXEodnsPhsC3HWPL?= =?utf-8?q?SXmUbQY6gQCdujtm496hYoSykvg1GXX+GsRs+noraAp1hycyKJ9FOWKeI6n671mt4?= =?utf-8?q?Z8x4UWdJE3AzqZpP5LufZcY1FT+gsBhn8F+NoNtLgtLQPIRxrQVlXgSdO5EfwTAbF?= =?utf-8?q?xc8pv7hfN2a3kxXxNJrfVlIF5R+Hi2mpoO1xxLVgh5gOReyt0JyIaiM0dBhm8mzHy?= =?utf-8?q?Q/4y8SWPNhNOJDZrx1BX1NCZiUkRWm2h5qtrq+72rkuoFIPmHmDeVST7vTvj3DzGU?= =?utf-8?q?vpnShtMM6SBAemdEOIyfIuwMnPC5g8FgLz+QW5hEjfjGe3pOy2ixlX7skvegD2woy?= =?utf-8?q?fp/+hUtx8WM0up5Glzs9nyz2XI2DUAjZzO91YEEGXRH0qcSokGA+RTZnSgiHHrDMU?= =?utf-8?q?9FP2KurnanHpn0W1aZ4x9gq6zHE0E9/A+Jz8gFQssKaLJCOnmtv0KJ/vVjPLBP+yK?= =?utf-8?q?lCZgBgcOz2r8znCYosDZl+6yje1gdhLkN4l/W6xTtwdW47c/PequwU5J83Zq8RVus?= =?utf-8?q?/kX8RiKsKb7yi8orDEp9gKDF8lIxzsL+uaUms6Az+/0mLM+zVAstPvEdOWlgg1AUy?= =?utf-8?q?WGUoLndFLyOky32BApc+2AaaKjOJPs4QnkCN0MeqdZbUXBCf4An0RmdZCTXwNT/B5?= =?utf-8?q?az19m6fZ55VLDXk/pO/pY1rrr3671/rgS7uY+axVglHxAgDlcWOQ7TqjZ58T5Rhte?= =?utf-8?q?2Bhe4Gl+qGmBFFBPxDwm7rw4BrNf2Q3K6XC9ozXNvTDvAnE/uA2mXeoQ3jhmFap+M?= =?utf-8?q?97PURyDwnWabPIAUQoKIiJaClapkKXCJnM10BOB5EJrDx5+yz65PzC60jxpij4Ruk?= =?utf-8?q?8AG9NkfuWpmlS/HJrF9tY2hHr6BrVVujWFmPC0B4k2rQWvGc1IdpWl/kwyZaPhUIV?= =?utf-8?q?WjA7pMLxxbblLnGyW3x8lTA6dldeqOYm5KeDIiJ1mku9A2UhqGkpFPDP/4EvyvF1y?= =?utf-8?q?SNf43esRzDSRsXV73kfnQi9o5sfXVs3E9pFtCiPqUdLmh6l+tOB1eEGVeTZ9L63AZ?= =?utf-8?q?Nzm7t3xZvW0ivj62IbjbKzreB5iI0jdjL0yRdLcYMqc+VDm21eKHhpk=3D?= Content-ID: <90988E671392F546A5AD7F1A39C7D51B@apcprd04.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: espressif.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB5736.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d5b807e6-f8fd-4b5e-e50c-08dd3ebfacd5 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jan 2025 10:45:11.5752 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5faf27fd-3557-4294-9545-8ea74a409f39 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: wk+0o/+ti/RB+2HB18UUTucopU7htkaxcUXeoxdQIlTtHrwiZgtFXoehZK+eIxmYuQ3spo23A6QE/uDClCnFMZVew/+tHhuRyCxLuMjWjDg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR04MB6488 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org This change made just to have memccpy like others mem-functions --- newlib/libc/string/memccpy.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) -- 2.43.0 diff --git a/newlib/libc/string/memccpy.c b/newlib/libc/string/memccpy.c index 332332489..802723a2e 100644 --- a/newlib/libc/string/memccpy.c +++ b/newlib/libc/string/memccpy.c @@ -69,7 +69,7 @@ memccpy (void *__restrict dst0, if (!TOO_SMALL_LITTLE_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) { unsigned int i; - unsigned long mask = 0; + unsigned long mask; aligned_dst = (long*)dst; aligned_src = (long*)src; @@ -80,9 +80,10 @@ memccpy (void *__restrict dst0, the word-sized segment with a word-sized block of the search character and then detecting for the presence of NULL in the result. */ - for (i = 0; i < sizeof(mask); i++) - mask = (mask << 8) + endchar; - + mask = endchar << 8 | endchar; + mask = mask << 16 | mask; + for (i = 32; i < sizeof(mask) * 8; i <<= 1) + mask = (mask << i) | endchar; /* Copy one long word at a time if possible. */ while (!TOO_SMALL_LITTLE_BLOCK(len0)) From patchwork Mon Jan 27 10:45:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Lapshin X-Patchwork-Id: 105436 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C0496385829B for ; Mon, 27 Jan 2025 10:48:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C0496385829B Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=espressifsystems.onmicrosoft.com header.i=@espressifsystems.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-espressifsystems-onmicrosoft-com header.b=fXBVF5/W X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sg2apc01on20726.outbound.protection.outlook.com [IPv6:2a01:111:f403:200f::726]) by sourceware.org (Postfix) with ESMTPS id 812793858282 for ; Mon, 27 Jan 2025 10:46:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 812793858282 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=espressif.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=espressif.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 812793858282 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:200f::726 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974762; cv=pass; b=uwdkPq1Vfe+UYDEtcK6GpYHKvmmTSqtF6a55vgmMM3HCfwuJ7LRTdgbf/DfiELv2m0bmVDVOqmFS0nqrwLtDHYQ7m7mGR73zfwZnBacJMzrE4AQkDoA+wNioCr/O4ibb4P81P4ycRC0QSWtYuI3N16SCh8aZi2JlWcGOwctz4Xc= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974762; c=relaxed/simple; bh=XfJ31yDjuWOBP91sxQNgoc9X+y3ssesmEdiHgP58fCc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ONRVzMkLMPeV8UjzHjY5VZ2oPpod0pqysdYAyhn97uoG5ag7w+lv2m3oDRWZBxHww1qYbxZcF437EHemFgFC50MyY07UXhrcJuWktM2ldGig7G6gBmqZfeo27uiQMUVf1fyvCUdrP/8yuQka1ab2qeIVQHIv6/Yg0xVKts0pAMk= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 812793858282 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LBLUIrMOhYhviMlNQCPDiv6eFLHpHMYEK9IP8tmhHfmLfQ2escJnOVKIUOd13ecXQ0AuqAEobUEL7Ljm58pLLOXjQo84J7Iy+YJkhR0CuHn/eMLodBkYqp3RR4DG53AYlv+pPyG7j2T++9eUhBgrCweVIdYx0W1rDyDhMymX1XyugYXivtXZyDCvVb9RkVqEC4GK1ALD1tNI+ib3yDNgLzqscRuiiiQVXAyu+DoHiN1bT2a/QGQwWFrnXATNF8YMv879cmbZNJNS7pgVoLcZm8siTy+Zs9Pehe+wcQ8gYv7YSlVFY7lW+VjMH36kEres1MxOQAx9WQ4hr1/ASHi0FQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XfJ31yDjuWOBP91sxQNgoc9X+y3ssesmEdiHgP58fCc=; b=ykJSCYWOdmEituTxysZI8wzSJPOzKIW5YqGf44juvl9O3/W2i9Yp3ZLTpBfxdfn5YjrBQrAVHqAm6f1rXWO/wXuI4akD94dGaQUjPGaoFC87qxO6Jdlea4N2abqpd66pI/4d645nModemVL4qQ8iZ+uYZwm3AHDzfP0oHKHzxBd4wwbbqolZ32wOb/LfTFDuuiFAwB/dOOFOfRcsjwR/mUmHCgKaD8ZgUYY8v0b1rmAW4wRBAC9E7MlZ4ddpMy2ZdH8n2lUVX1HU0z/fF3HYVStJsR6PaRuolUOvq4f8Swuh33jJLn589ydOicN7toeOKTglMVjUQlMgbcWlw4dyuw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=espressif.com; dmarc=pass action=none header.from=espressif.com; dkim=pass header.d=espressif.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=espressifsystems.onmicrosoft.com; s=selector1-espressifsystems-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XfJ31yDjuWOBP91sxQNgoc9X+y3ssesmEdiHgP58fCc=; b=fXBVF5/W+e8jrM+IINWBr9kqcwN27ARpV1ZkXi5U2iFuWCDai//YSecq0ugxlw1unRs/ebzqhBjQkK2yKyTUrOoRXbc/pUsR7lG0m1UPJ1mImTVcUUb9XV0JXc1zMeR15+CCUPYpo0vQp+ZEuW6vz0hVZOndVkWKyK5emHK1zlo= Received: from TYZPR04MB5736.apcprd04.prod.outlook.com (2603:1096:400:1fa::7) by TYSPR04MB8166.apcprd04.prod.outlook.com (2603:1096:405:9a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.17; Mon, 27 Jan 2025 10:45:55 +0000 Received: from TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521]) by TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521%6]) with mapi id 15.20.8377.009; Mon, 27 Jan 2025 10:45:55 +0000 From: Alexey Lapshin To: "newlib@sourceware.org" CC: Alexey Gerenkov , Ivan Grokhotkov Subject: [PATCH 3/6] newlib: mem[p]cpy/memmove improve performance for optimized versions Thread-Topic: [PATCH 3/6] newlib: mem[p]cpy/memmove improve performance for optimized versions Thread-Index: AQHbcKikkEKa8DOoxU2aiZId7ut1Gg== Date: Mon, 27 Jan 2025 10:45:55 +0000 Message-ID: <085f3ec3cbe41e0a377b1d26089a871f04ffd5d6.camel@espressif.com> References: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> In-Reply-To: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=espressif.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR04MB5736:EE_|TYSPR04MB8166:EE_ x-ms-office365-filtering-correlation-id: 459cfd03-9ed1-4581-3778-08dd3ebfc6e0 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?V1lS7IKkVWWDtDbHtsGEyIbkZvO3EJa?= =?utf-8?q?wTmAamSgIxLUEHWz188/noqOf+fqJvXVFRgl1fWlFnOidPdXvxs+/xj4rTz5+3r32?= =?utf-8?q?9Ly638bsEKAd2lcWCuKVI2kKHiHp3r+Bsu35pxEQutY67YPuN1iGFZX30Ck3+hGRi?= =?utf-8?q?eW6R+N3+zNpRo5W7ygRznSxOPwXxjpTYZZnBhwNehzb1Sud0e1ahIE0/V9g5ntOm2?= =?utf-8?q?YVWJv+9b3RUchc8hrysxXq2k+s81EexjSdJe4QRuT6uBTwu8Me7kI1E/1ErcrEOTK?= =?utf-8?q?3vo+uqsn6erUdbIArpz9rstW2V4ZuNTXRnR+bu7LftVEKpmJnezjVYwCH3Q+hMTW0?= =?utf-8?q?dsZIRg5sPTaLUt2IupNGz+SS47ZvL9bG1JpoQWbtO/1Vp9spURTVNrsuc+AgLk1Gn?= =?utf-8?q?QjEc4Ia2lbfoCFTbt3o2e+yLVvPDUxNHAH0bSQFu/ik7EkaloRXJGTElLuItB5rce?= =?utf-8?q?UbT6FiKWPL+dGtTXiEVq82MqlfyV8bCdNTge4EXtdwhXpSGqWiEDJTYb/zs1d56pR?= =?utf-8?q?PAl3Fe4Xwm6kOyjo4CsUkeAGYAmaHOmrXIBJMKSAk6riMheMMofDqvMNR0SY5f8VW?= =?utf-8?q?FNW2r582ZGq08z3YgT8txFldMRvn0afW8Edj7Tqf1keX146YXRC0QXgdF0x0bu5OQ?= =?utf-8?q?a7BMIqf9dyKqMsQMPqaqdRTVeWeDp5BLV0y02ryp56oAJKfgSnxvedMprT5L4zxfA?= =?utf-8?q?JRgKPOpcbigYbODxL03eeTiXYaECtVdWfWn0SZinNmO3/8zkpjnh5WjZJac6apFoT?= =?utf-8?q?6STjo1AZx2KkTSbPIwGvm5uNWsNmkN+6Rgo+Iav8SxC3eV+PqtUU/71PZeMTLmwr0?= =?utf-8?q?7DtUCkDTgrSdSEKGb7YH3E7DYIqqeXlvTuJ0LcfA7SazSZJLU3qITVaPB+IpqntQO?= =?utf-8?q?8k6hiqPE4NEkrpDSf6TH+lxDwQIO+yLS9XTC221cb6WD4KQw+jzv4AaZwcg1+/HLk?= =?utf-8?q?AxIuKMmj9VkdmMVMabgTs3TeBg/xS7jMTuCHDm0gyD0qU9xn6z/utJWXZYBHKDkWA?= =?utf-8?q?6485WX04JAe/jKcNozjTsGjbFdrEX2Uo/oglS+GHaB561IcL7vAWAmecjpMtexH25?= =?utf-8?q?QD4cY+GIHzZxwVtcdzZDtInLPfndC3tQPv0eWtKvWiVbwA5QNxQvOrPOE3zGBSH3z?= =?utf-8?q?2mq0PH3nu7iWJE1Wh/YlOSvrpZ6hNffcIaSz4WmzKtpTsh9rL7KHqB8lmarN4R6bk?= =?utf-8?q?EekXxTjheewXm5HM1OwUgx69s9SqyXRtzeHVi1d6mJm0KogQAoNLUZmQj2E2B+TpU?= =?utf-8?q?x3qr7UOf9PbO9n2b+F0nvW+p+aQBm3mP98h7krzy7CLV2sVR1xKNCY+sjCdETvO4k?= =?utf-8?q?2tix5r3+E9kVxfRY9/jX5bzVQh/LA4IiGCB/4mH1A4RiOY5vhMWzimm7r/kOij30D?= =?utf-8?q?hbnr8Hr4V41?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR04MB5736.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?vqpejnJegcY2hwkmLywnnsa1E48w?= =?utf-8?q?DRuHFTL9g/oIv2C1pk3SqzE7MHpZBRGgVjdWTp1vK8jKZl4XUmBpnHxetUVxojeRJ?= =?utf-8?q?vgKccAN51KidCcHtgVGZstkVcpVUjOqVct6wE0xujxCqRlXB7uo6TBqqy/VSQtChA?= =?utf-8?q?SUm3OWFyZq2D2Cp9WMv1E+11/FMepdf4fWVbppl4fY3kAY85peEfwL9KN2kGZIUYc?= =?utf-8?q?xMSFtk0GaowbG//bXyW9yp9Lw9RbatKu1by97L258P1F0NLv9WTyAiMRrWOR/Q8Wr?= =?utf-8?q?0Mxq6dLv4gQoM2UPjWt2dpMgGn8zIP2BFk01n2ud61peEQwGyEe5YTxcueLH3GFQK?= =?utf-8?q?L0VUOdB8MZ2U5LA9vd79f6vSelONVzQ45zSLVDZ5gkvHpMCuIoBWYnh/9ei60CDmO?= =?utf-8?q?ItQw82D1s+SY60DW9aIN2HfGdA27Wka7hMfLacLdBt25Mgmzw6VycEShYKTOZ0HHC?= =?utf-8?q?mvD7Jh+dVcMDyjyANSK8bGWwpRULoOZFJx3b6MmIJ/vNzcMFHiHftNVM20j+0Gduf?= =?utf-8?q?SEFrMZDcISao7cPp3EeXVhrpROpVZUlsuTSN1JKOp3YnjNvaJrMFeB50vBm3E5cYl?= =?utf-8?q?OJ3VOziloeUMqJEAWwX/4lsmqylxkUchAfWXnw7hDKHxhFWxUn/KKk9N1yWH/P54r?= =?utf-8?q?lBS8+1CPET+I9bAMhMUqa14KkTLD4N/9dLZYS0tQCJKODf9IqvpnILwGTr8yPk80a?= =?utf-8?q?eR+ng9UaWuG8SjRDaV88Sxr6s30zheX+IEAMvW5G0Js3elmCoET53au5QoGtX3M/e?= =?utf-8?q?LirYzMJNdp8MS7cK7E830fnB+GD9v4S7SKRSHKrsMgBzWDs5JS10eJ34MHFPkgH3B?= =?utf-8?q?EJlU2ML3ygvU1OKS/pUlwf0d+YFK10wSdLCvdbgYV4HiN/V6hMNHEApNLpRgG8FJp?= =?utf-8?q?eVbhSaXhwj+XSP2hbeYWGpzmI+JOrddjix6tACknLJvJVZG3OM7ZlldSmKm7i3oOV?= =?utf-8?q?25LsfE0pC4ZKGq13+nINYT35dJZwidLiXrq/PXAbU+6IezFOEaNdLZpbpWbxzTqFn?= =?utf-8?q?zzBvtxayM8BMQOsUn9EMDSs68Vo1S6qZ6hnbWDOf+a/dH/ja0WvDSscAg0hv8GmeW?= =?utf-8?q?TuG/XH/2UV6fQHeILzQdya5FrNnXr6tLt3xNAXvx8vFbmUPIfkFzZsrUp2KvMyo9V?= =?utf-8?q?/u/0TaUomBYYj7FwXyyYdZxpoFfgu8CNyhMKsmlwU4s+dZuzLd87yesUi7IBzMv5d?= =?utf-8?q?qgS8IyogV5LJJkK1aiMrO5ADp+k5XBSpuRmIz0j8mViUavMX74+KAk/J6lNFlMWcc?= =?utf-8?q?CcDNGegiAkRGNwFs36VWXdIVwRb48TOFypvGUd1mBJdz8Dtx4ilBlea+WRPlBW5rS?= =?utf-8?q?lhjMYxCemdK6yWW363T4Cgi1MKVJ/NCFd1taruT1zDild9Q6uBmPglKuyuq07un7w?= =?utf-8?q?tV04W5hrbY2cgzeVuC1Tf+XvrRmiWSrE/Q4HMl00fYU3r/0GEOdqZgCWnWk8zIhTO?= =?utf-8?q?PvhTrU5pJUcdLsY9vxw2cemg8QyYJ8nbEow1tVxdzU/qs4J0/8LJl181nbdaBkXb7?= =?utf-8?q?eW83PJ61v3tYaJa2mQqYSrTEuLRFuMfWkAO/15+/4TqPbBmY3PJBxck=3D?= Content-ID: MIME-Version: 1.0 X-OriginatorOrg: espressif.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB5736.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 459cfd03-9ed1-4581-3778-08dd3ebfc6e0 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jan 2025 10:45:55.2463 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5faf27fd-3557-4294-9545-8ea74a409f39 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eZd1DG6B+YMAjU/urDiJaxXBygl8FRYy5bsLE+oi9St1PtMzwMmd4iyORh0f8y8XL9hCSYkGbBrBqc5LXzKcbi/6VzYLDvhW+YilZ3hDYxA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYSPR04MB8166 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org This change improves performance on memory blocks with sizes in range [4..15]. Performance measurements made for RISCV machine (memset): size 4, CPU cycles change: 50 -> 37 size 5, CPU cycles change: 57 -> 40 size 6, CPU cycles change: 64 -> 47 size 7, CPU cycles change: 71 -> 54 size 8, CPU cycles change: 78 -> 44 size 9, CPU cycles change: 85 -> 47 size 10, CPU cycles change: 92 -> 54 size 11, CPU cycles change: 99 -> 61 size 12, CPU cycles change: 106 -> 51 size 13, CPU cycles change: 113 -> 54 size 14, CPU cycles change: 120 -> 61 size 15, CPU cycles change: 127 -> 68 --- newlib/libc/string/memcpy.c | 2 +- newlib/libc/string/memmove.c | 2 +- newlib/libc/string/mempcpy.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) -- 2.43.0 diff --git a/newlib/libc/string/memcpy.c b/newlib/libc/string/memcpy.c index 1bbd4e0bf..e680c444d 100644 --- a/newlib/libc/string/memcpy.c +++ b/newlib/libc/string/memcpy.c @@ -57,7 +57,7 @@ memcpy (void *__restrict dst0, /* If the size is small, or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ - if (!TOO_SMALL_BIG_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) + if (!TOO_SMALL_LITTLE_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; diff --git a/newlib/libc/string/memmove.c b/newlib/libc/string/memmove.c index a82744c7d..4c5ec6f83 100644 --- a/newlib/libc/string/memmove.c +++ b/newlib/libc/string/memmove.c @@ -85,7 +85,7 @@ memmove (void *dst_void, /* Use optimizing algorithm for a non-destructive copy to closely match memcpy. If the size is small or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ - if (!TOO_SMALL_BIG_BLOCK(length) && !UNALIGNED_X_Y(src, dst)) + if (!TOO_SMALL_LITTLE_BLOCK(length) && !UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; diff --git a/newlib/libc/string/mempcpy.c b/newlib/libc/string/mempcpy.c index 06e97de85..561892199 100644 --- a/newlib/libc/string/mempcpy.c +++ b/newlib/libc/string/mempcpy.c @@ -53,7 +53,7 @@ mempcpy (void *dst0, /* If the size is small, or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ - if (!TOO_SMALL_BIG_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) + if (!TOO_SMALL_LITTLE_BLOCK(len0) && !UNALIGNED_X_Y(src, dst)) { aligned_dst = (long*)dst; aligned_src = (long*)src; From patchwork Mon Jan 27 10:46:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Lapshin X-Patchwork-Id: 105445 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 72C843858019 for ; Mon, 27 Jan 2025 10:53:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 72C843858019 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=espressifsystems.onmicrosoft.com header.i=@espressifsystems.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-espressifsystems-onmicrosoft-com header.b=39Ftxrj/ X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sg2apc01on2071e.outbound.protection.outlook.com [IPv6:2a01:111:f403:200f::71e]) by sourceware.org (Postfix) with ESMTPS id 60714385829B for ; Mon, 27 Jan 2025 10:47:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 60714385829B Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=espressif.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=espressif.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 60714385829B Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:200f::71e ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974825; cv=pass; b=Hk0qooW7pY4ZxLm4lR3gJ0p+179PxI2TjherGYVpoeliSOO2ZjQ3aISuYAWdnd7dFRvmlXMKcvSFUAmYZXE5Iv+mChdUsbN+tNPOqS81mDjWwWgv+3T8vzo3xcTJthv5/ByvVYoGAshRw89wgpnus9SD+uucvFj00Ys2LPLJGX4= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737974825; c=relaxed/simple; bh=KtXu1gqM8rj86RHCkG5Z6E/o/H9yMziWx1SQyXjeiqQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=PktBXLVrYXsCe/UP5L8aQysmj5f7hsOK2i5KH7aZBT0gtmlFGC99K6zcE35SRUhYiwTRYa/FHI+xLEeGfBCGyQO/bEJvqvLBBZJFHnq4Xx1ChJ/K9s4keuEOzMXdbFTU4tDZsNcSLCI+ItXxBfUPSyUEjB0Uf5Apz1l8u/YQYr8= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 60714385829B ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VFE6ZrrkZT8mADHV2refWmTEZRKftSD3YOLq061Q1fz0kz8+WX7qktLiMEoxACpyBiqE6IVEDZvsK5JEyh5nHs/DTI9gQjkG98t3kzF42TDA+M21Kc83lUZDGpqHRsN4+hCAnv7g4nr4kvWQSxbcNS2Nkq47g4Uadz9zV183PnoiDZmyvl+bGWDU5Ymf7Wr94wSHaE/r08eNjOEzvIrV4rHLmV1t+8pyEz/T2iZ75meEGebagySssyQhycbjUgybPPhVeuWq442pK/aApU54rS0NZItS6QGkipj2A53MWKLYP4jTGMKZEu3seie0pbu59h1j88tkgXApo/t576DN9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KtXu1gqM8rj86RHCkG5Z6E/o/H9yMziWx1SQyXjeiqQ=; b=e50RQLe+wezpzFSNe9Sio/tQ+fX1GPJKf9AORXmHY22HU3ux7o79705PEnf7beAd/pcmYwg7JpReIKiNw0GQ2NUWcNVoPIUJBRCyOrci3xZssZWc5XZX07BNQP2pmIk3P8w95p9wqVH+fVZ4EBaflRUuyt1XbhO+jJbbr8tMqAYaxqf6m1lMj9Mzc9czOohriW2RYqWVL7zMQGslcHOt33JMRWQoSInF3N8OvR8a4qstMzVZdklscvGg/77gzCDXUxcTgljXQEyS8x8E0yjlm5lCZyAYHTYAko8w8jENo9eeD7YnLmUO7Mh4aVkyj5xyFD20ewfKDoVPQtU9qpPQMg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=espressif.com; dmarc=pass action=none header.from=espressif.com; dkim=pass header.d=espressif.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=espressifsystems.onmicrosoft.com; s=selector1-espressifsystems-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KtXu1gqM8rj86RHCkG5Z6E/o/H9yMziWx1SQyXjeiqQ=; b=39Ftxrj/fg1ESxSze+bEaZKPA+4n5gRQ4H7a4L6GhI1ZKdJ8TAhstCUxRofoleSJElkO3/lAc1B20ldW3kA8RjKFT+6csnU1AdSsyg+yY5biPhwMvFmNvzugwzu4kSWXhFoF3nx2+eahN9XTq67sN3IyrcpemlQ5KwCGG64e2us= Received: from TYZPR04MB5736.apcprd04.prod.outlook.com (2603:1096:400:1fa::7) by PUZPR04MB6488.apcprd04.prod.outlook.com (2603:1096:301:f4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Mon, 27 Jan 2025 10:46:59 +0000 Received: from TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521]) by TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521%6]) with mapi id 15.20.8377.009; Mon, 27 Jan 2025 10:46:58 +0000 From: Alexey Lapshin To: "newlib@sourceware.org" CC: Alexey Gerenkov , Ivan Grokhotkov Subject: [PATCH 4/6] newlib: memmove: improve performance for overlapping buffers Thread-Topic: [PATCH 4/6] newlib: memmove: improve performance for overlapping buffers Thread-Index: AQHbcKjKmvv3FreN8EixJLhR84ZI7Q== Date: Mon, 27 Jan 2025 10:46:58 +0000 Message-ID: <0a7430ca97cc851c5a7d597977ce6879115783ac.camel@espressif.com> References: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> In-Reply-To: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=espressif.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR04MB5736:EE_|PUZPR04MB6488:EE_ x-ms-office365-filtering-correlation-id: 8166f0c3-fdc3-4872-40f7-08dd3ebfeccf x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|376014|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?MbsuqZDFze7G4p4wqBLx6OADax1i129?= =?utf-8?q?tk0yUYOfOOGLGOiy0aawhEQdm1M0R1fSOGpEld6B1ZOs6rGkyUPQoF+ueLCf9T9Cc?= =?utf-8?q?2y6jbqxbQLpu1aZLUCLE2+VQ4dJygTURkAolWBqUeE0HJR33/z/NqSdSK05sI4+EJ?= =?utf-8?q?CoTpvXnfszXwGi44ff8BDGyCVnFrAeP96GmYKnMQTJmxrsctcMlYAYreEXZ7bg2ZZ?= =?utf-8?q?r/PCOIChBz11nZZNA6Y9MgKgHoYqqwcDpV6u6OZhlq0iSoBxjeE4kJjFThllG7/cL?= =?utf-8?q?yQlV9Ceg8C43tHr0CkDSafUAngFRTDdPDkLxDc3mkgcqK2hs41dXawKzQ3GH80KhB?= =?utf-8?q?dtXZKC3LT0RLvuU0Zpx/mrM+6zYsRrfXIShZ4I8A/M4JjOZDl3csY3d0vcOmeVlsN?= =?utf-8?q?i+UfVut2SYuoWdZz2qv7gJjypBtYWz1KPhENe7C3wmXk35/QxN3e9SqKQ2ajv+drT?= =?utf-8?q?h/FCAByJJZnJtqRF6LJs73jfGic/enh32MNNU4FqCHoCScorDDQTaGnMBWr5nlj9h?= =?utf-8?q?aTMINBqRSynlDiwr0uUncrxNTECGMXnuUS66QVDkw/3iZYPfFvsqbfejFN4IlXF5c?= =?utf-8?q?KPQJ5BLU/7tXrEIPssUsd4Md0nWk7GiXSdmPp1JtYLwlgNKw9L/NSMCZZdxGF25RN?= =?utf-8?q?iTPvCIm0kDsufj/N36+BP2exa+vXpEPnGBTlugGTAte4JPdPxA/U4CBebS+mC5WbU?= =?utf-8?q?635zpPEeYe46EYBWTLEAe3pfdMi4ASppyGB+W8J0egzsRcOluL1+Y99IdQcyazgvN?= =?utf-8?q?3zXoyg5fIsVAtzVTfQ1M5YRFpPwRtLOi/BYTxt32YwSIvQjVW50glBV3FLMk6p026?= =?utf-8?q?RhLHpLuvQ2bd8cZ94hPBEP9FVRv6W05rVUv/aQyxm6duIvMjPsAG3Hgn0p9Cr1sz3?= =?utf-8?q?xryr98zTdydsbS62TZQEqPY32TyqOSF0lGhUiVtCp+no+T8DFL+0fADfcmflPu/vo?= =?utf-8?q?A90ut9Eqjn5WAUyBw/eJVo/1oSkI1dXX+AdFMPK/B3N3m1zOwLbPL7HDwZtc8CyM+?= =?utf-8?q?NRukoHsuT82Q2wtQglB1MaWsth+R3Sl1fSXuDCbDIKhMByNGy+0j/LPdS2my2VlFy?= =?utf-8?q?dIpswOGZ59IYeDJCx791nt2dYOE2wyrIqSM5iKngzYckrSiHXghY5iNFyo1P1k0Dw?= =?utf-8?q?LDQ/qt+ljNLo1yQZ+01b5264HY+C5iZFopURGgG62rRL58unZ39TNfelnPy4beZXh?= =?utf-8?q?2pCbuEmiG5vvcRszmEE9yE0Cq7vD8KE02ByGil6XztpSttuWolnLi6g2Nx9po6uhT?= =?utf-8?q?yd3DRSCFrgnGl7qthgTn9Ub0hqxcp3eFjxqa8UDYaaDdA/35sAfcYs5klrtbLDofz?= =?utf-8?q?xoOZMwXwb+Vs1ntrrE3YKHZljWjesHyt6TT6qX1mbhBHkVohCmoWriQiVkUDEFmoI?= =?utf-8?q?90PtzMltyuA?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR04MB5736.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?VmDpin9n2oqFNB8D3Y1Vdokw6YZr?= =?utf-8?q?IVtFIXFWx3yFU/cHLhJE/OWI3qpyarb/1zOaHeqC15vizF6UZJlRU2+mAL+SbCB15?= =?utf-8?q?COtnGgQ2e1q76CJ35B/4n+KHpJOucylJpBNXG/B5kE4wB/fekpAoW83lguTkPbLuk?= =?utf-8?q?MSTUksCOsgfrRbJsEFtSSPwjrmeecZvBNuCCStm1EAzgeDrOCjRIWmjAFgg5467RV?= =?utf-8?q?2EEQ3O7aT1F2hCpSj1GMwQap/hcjzQbcQu6Sg4Uqi1cmiAjUR1YdWzIae+hyO1NiM?= =?utf-8?q?PC1+q0znl6KobXDvu9zYzMsoUf41jd8NRqfdh5FjW7i7X79eN+6n5vh5eanxLbz5j?= =?utf-8?q?U3nCsFUdSsKDKh8LEy87/Yoxhhk6IsqV6Areiqh+Dg2gi8auwMyhAJEIT0x4+LHxB?= =?utf-8?q?fbY6PI8DajIALqn4iUfvbz3hUPVuV1VzEcyoN/RXme6OPsR4tjTfX78oxeAWe8vLp?= =?utf-8?q?RttFvAMdpakdFlx5RP2GLQzlZQc/1DfSdbwdz7gjr+J7NYjbnZYALMwjb1WIJ4Vf2?= =?utf-8?q?8Z367VangezNmNCpDr1oR01BWoU9YyRtx0fL9FQGdeEv2iy8RU+7VbTrDG4oNdKrU?= =?utf-8?q?n6lk17jL/BuK34/Nbf3+KYs93WMnVNTndLs0YIQcu+FQ9niqCFSXDDCnRf4LBAL+L?= =?utf-8?q?g4dBTbLO+ToKsyijhZwNfFQ6M+tgO87ogdZFUi+xZIf0meDiuewiDCVkGNlleRvtt?= =?utf-8?q?U3VqZJ8iEj2LGhwBviAZH9dnRNfDmIa6b1CobrW2N8yYWx8viYLsHUYm+tOmomjqb?= =?utf-8?q?xJqnha+E9qDfRN8+jbn88OIK5qeBSz5hoQJ9LkHFZ4hXLQSlt93FVKEewffsUZC7+?= =?utf-8?q?ZYNbtmnBl0rcfAmkYyZPKUJoU79C5zttWuShhYHuGE73rr1RJYLPSa+INpUIsvZn+?= =?utf-8?q?D5SMJVl3G8TdnwNHd1fBsKufCOsBHr9HTe83u308gJpEw+V4/B/vrX5rb3JysBbHB?= =?utf-8?q?XfKzpiflJ0b4s+w/8R4gvcD8Hlw35XDv+oO3PYoi11i/3rtid/rsi8xvRkmvUCMMO?= =?utf-8?q?JgFkk3SlBsv7WXBHFtWD6y4XBCeTKikrji0nC/7cAwg+KcW2gc88iyqdowtW/SAFv?= =?utf-8?q?rRgDmUBW+oQzeqaSI5BX6f3lH75TCT70Oso5o4VlqzbyIh8a+MMcjxOwQQwl9BWct?= =?utf-8?q?wKDAKHPWiLKyBHQ6lFSeNWB/Kl5YrGY8W5cyyfbdPP6vdVWpLYMHDhjUaFDnPIq62?= =?utf-8?q?tjW4bOALLRRqmRIpqu0gRtZJqOA7rigYUfkn/AQrCkMs74zGeFWPnGfdyi2B/ZM3Y?= =?utf-8?q?XPH4bJsE7pJkWLe+t6Ro+5r9xYkCmu8HhS182nRWvNVxt2o9vZ7ai4zgeQzUsFxkj?= =?utf-8?q?At6UIAY5iGR8zaaWEezzJYLblX1TuItfUxsp4jv0+dLMmm5Nd0M61dvjOAMDqhicR?= =?utf-8?q?LXNrsq7OTbrgWUIVNvkUAITDBAU7l8O9dRVpLYu0867tuZuPjgdxXd0MIkbmQotUw?= =?utf-8?q?vIkMBRn3mmPXtXFUR0LSL6qkZF9s5wnLJAON2pnrY7OvFu4RfywnX6q2uWpQQFdzC?= =?utf-8?q?yO39Tvx3Jcr0KxLtcKySdOHBVcHPF5VLzqpVKo1b6yv86wnAdD/413M=3D?= Content-ID: <17C1C407BEF014489D76F732E0B2837F@apcprd04.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: espressif.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB5736.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8166f0c3-fdc3-4872-40f7-08dd3ebfeccf X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jan 2025 10:46:58.9012 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5faf27fd-3557-4294-9545-8ea74a409f39 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: C/R1qfRW0GhA5gq7Uo84tIMcSY/H9z3LraLTFganNfPJqyU455ugQmh4lu8b+nkou3vPC4MzSzL5KQMNXqedk9NnRfKYt8YQtPTQijxmg1s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR04MB6488 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org This change provides word-sized copy for overlapping buffers, that could increase performance significantly. Performance measurement for RISCV: uint8_t buf[1024]; memmove (buf + 4, buf, sizeof(buf) - 4); CPU cycles: 12255 -> 2076 --- newlib/libc/string/memmove.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) -- 2.43.0 diff --git a/newlib/libc/string/memmove.c b/newlib/libc/string/memmove.c index 4c5ec6f83..343210680 100644 --- a/newlib/libc/string/memmove.c +++ b/newlib/libc/string/memmove.c @@ -75,10 +75,28 @@ memmove (void *dst_void, /* Destructive overlap...have to copy backwards */ src += length; dst += length; + + if (!TOO_SMALL_LITTLE_BLOCK(length) && !UNALIGNED_X_Y(src, dst)) + { + aligned_dst = (long*)dst; + aligned_src = (long*)src; + + /* Copy one long word at a time if possible. */ + while (!TOO_SMALL_LITTLE_BLOCK(length)) + { + *--aligned_dst = *--aligned_src; + length -= LITTLE_BLOCK_SIZE; + } + + /* Pick up any residual with a byte copier. */ + dst = (char*)aligned_dst; + src = (char*)aligned_src; + } + while (length--) - { - *--dst = *--src; - } + { + *--dst = *--src; + } } else { From patchwork Mon Jan 27 10:50:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Lapshin X-Patchwork-Id: 105442 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4E8743858039 for ; Mon, 27 Jan 2025 10:51:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4E8743858039 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=espressifsystems.onmicrosoft.com header.i=@espressifsystems.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-espressifsystems-onmicrosoft-com header.b=r5eKyFcJ X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sg2apc01on20717.outbound.protection.outlook.com [IPv6:2a01:111:f403:200f::717]) by sourceware.org (Postfix) with ESMTPS id EB19A3858430 for ; Mon, 27 Jan 2025 10:50:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EB19A3858430 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=espressif.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=espressif.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EB19A3858430 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:200f::717 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737975042; cv=pass; b=M0Gv0dQOJb3HGhdrSTIbqj7eUXE/TOZACwRu4vGlznGPICcv0CWnUEQpvU7SpctP99amEKLPhLbTOUeibRCbem89Eh+gRs4TKNSqclN9/83mW22N6WQu5T88b52qI/rE7dDaL+kYA9OT2lx0TnFKx2f+1ZceMRoeiOOq48VuxuQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737975042; c=relaxed/simple; bh=IkSEllm0kdMpwsbSKqFHiioUz2b7E+HJ1zVKyZzHUVg=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ldinGqIFA3F8D6CXqJIYKFxmOb1Mr9Te43HobqWgXDQqkQehl781lbsKoSc3AYFYTQCfoncmJs0ypUj6ezOvxZeEzuy010NpfCepwqA0Zagh375s3c9NNwUnGqWxpDQ3lkRWaGxWEsTg9kERMPg4qlMeg4gKUF7KiQrZXR7S6Sc= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EB19A3858430 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JCYGiDBT3F7f0t1oLBD4cg0wD248tPbkAGqnJsdDQ30ed93IjTEZvNNspXH+Mp+xrTioJCMAUaq026DLeUBt+a5mpstJuHnsfTLPJGTKc2+a1l+RqKghmXFEBZFWCAMN7CTUThpsSPWYigpo6Hms/NF0yB3v5UtFb5VS0IAEp/PiNOJcOiLgsDVRGFZSicGJtdAYBPV1MlH+oIl+rl2s9yYx5E4Wr0VWTiClepWzBqMZ7GjTCjSW6kIzlRnipZVYxIuqBSwBGmN54Ganmodtj3+WH7D4qtyrGCwZfSxrJzwWDhul5xQ6Amv6qZAoWCPsA86Lisx9jVDIUxJzORLyAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IkSEllm0kdMpwsbSKqFHiioUz2b7E+HJ1zVKyZzHUVg=; b=eEH3mh8o36/2vQdeCYql7hkSFYpgcrdsRyCbG9RpmKaP3wI72deZPLQGsyBbRWJ6FZ1m4cETTRRTM5pdHeadzwlx7aU9MlS2a5K7oSp5t+KwWB2b+OTUJkRls7CBDG5GhZD0p4D9vrc2pto1TRruBwmNMh1ZV44dWsC9ogDrjXSYmqFyfYfSHny/c7bDQspCJhyVQKaC6vsoSc2h0bB9ThdNzwXfWhmYuBmLPTc5G1OKtqeOCDcLNzQ0tHegTGujL5axKlm+qWon9F7gH8p/VPbTSJFJV9n9LzWdpFzNaKpQhMaq2bluP20QMMz1W0ebi1YaPdthkyvzka+jbKmAVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=espressif.com; dmarc=pass action=none header.from=espressif.com; dkim=pass header.d=espressif.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=espressifsystems.onmicrosoft.com; s=selector1-espressifsystems-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IkSEllm0kdMpwsbSKqFHiioUz2b7E+HJ1zVKyZzHUVg=; b=r5eKyFcJ15hFiaT4lz9uMLrRxXIGMHoeieo161MECUcS2mjKrAphnYukT8Sfxm36XHcibvNE6teuvfcuavybZkukTUvXuWgSKvUdDOzopsLT2C4oL/x5h2PEn4h6/NCWWG8/UeVnnsGKGEaole5Skh1utthdUzWFnGo7HZ6GAVo= Received: from TYZPR04MB5736.apcprd04.prod.outlook.com (2603:1096:400:1fa::7) by PUZPR04MB6488.apcprd04.prod.outlook.com (2603:1096:301:f4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Mon, 27 Jan 2025 10:50:36 +0000 Received: from TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521]) by TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521%6]) with mapi id 15.20.8377.009; Mon, 27 Jan 2025 10:50:36 +0000 From: Alexey Lapshin To: "newlib@sourceware.org" CC: Alexey Gerenkov , Ivan Grokhotkov Subject: [PATCH 5/6] newlib: str[n]cat: optimize skipping of the destination string Thread-Topic: [PATCH 5/6] newlib: str[n]cat: optimize skipping of the destination string Thread-Index: AQHbcKlL9mP7caZ4S0ihqOHWGy4lWg== Date: Mon, 27 Jan 2025 10:50:36 +0000 Message-ID: <9aa0aff1000a34fa08d8ee210cc7a49de66a5ea0.camel@espressif.com> References: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> In-Reply-To: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=espressif.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR04MB5736:EE_|PUZPR04MB6488:EE_ x-ms-office365-filtering-correlation-id: dfb21031-a023-48de-9f43-08dd3ec06e73 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?/+ADKXmenGJxex1NNW26lnKDBIhB66f?= =?utf-8?q?Vpzj9G5cgNsOxLbHxdpryOTBzL05wubYwhlHvYhrz11NbJlOvQJzrrrEZterCqIZJ?= =?utf-8?q?hXQvGyP7LCuRxcBavlFoL9h6nnPl3LynNVIZlD9HmocqeNiuCwcGuJXuOnYQx5Q2T?= =?utf-8?q?2Ar0K7rFK/SKx7Ppz4he1xROfro5rcSPPoa8uhDkwNkHLAcjdhkAouaEiU4/NCQ0V?= =?utf-8?q?yQScvDtElr6RClVdMB+/I2ku81LHfoOLLMmCgMac+9FQjPnj2l7boIq1urlATQV3B?= =?utf-8?q?RDBeXrGc127XUo3dTJXB81Enb80RfxjCzs6xAB0+vX9xeMt91qlfjl0t1JoZMS6YR?= =?utf-8?q?U8j6r/3B6I1tIUVlzb79y+/exGZ/Wp52uw3q/A0p2dHI17UvcjJr5Zd+k3E0WHpBQ?= =?utf-8?q?/5VGRvc9olFF7kmd0tH4bKwEB5EYVdeqmhhuS3ugKVCWub4kA+3hs/6Fs3csCykxa?= =?utf-8?q?iiNy6avV5vzrE/t5UiTa+pE0LZWJwcupBAumdX0itXnKDfJpEM/ETPWlqNj5GBHaa?= =?utf-8?q?Fz6zcSz+v1pQHLihTQyaWLz1hyYICq4vptkpWopJlcOKIslqwsSbXYGvys+Kf6frK?= =?utf-8?q?lYjjyXguaMiQXT6CJrRI6UwIgtGBzSIVmEsa/Hjqng+yE2hfFjv48p1dvbFgC0afJ?= =?utf-8?q?YHxKZk9vR9l4YX81rcfRAZegjc5RClRHXzq83mkadeDk38KHyB5W2Y7iscyyIKFOC?= =?utf-8?q?06bK1v78HguV/EvunK3gtU+EoZ25i6/fRcUvLkzocGtzzG9nhXdxqmpQuuRk84dyg?= =?utf-8?q?yknPk9yrvcDlfdvscw5Ujln2r73LVhoU9w2lxtbOZTDh1aa6M7dVuagni7cGfYrgx?= =?utf-8?q?BSvuHN8qS3/J49tSqzLXPtfwr4PyKHO+u9ZRrIt7RjxI09Y9Gu0g2K7t76Tw0x3kr?= =?utf-8?q?usMoTI4ybPoWTGeKxic5TeIst1crGBjSEbKtAvzFRdVJt9R6G2lIPQ8wEIkW4U/iE?= =?utf-8?q?pOtqCQUAQjyjFfrNcg2JzE7Ycr7qCjOuUaZZNH8x4yH9aCggey9FEQni1GHrZzBvp?= =?utf-8?q?n2viVFC1cxyftPirRjJur0vRTZsqicQMAlz9uqMREpy95jXcTN1dJKJYfOeGDUoAD?= =?utf-8?q?JI1oZw2pwaJStwYi7MfJUzZZ6GBMrrKYnq9dmaQLeGdxJjITroBIjtK/X/0eYtav8?= =?utf-8?q?if8FRbBXSPbbU3KCmEr73OGXhu6HnOElxeuTKfff2UwThF3cGcNrZ30JuW0DRcQpv?= =?utf-8?q?nbdjM/rRzOt+xnrfJpD+kT6/WwD++nkfG8fbrtUfudIskIbsRaFzAVP/hKctIactv?= =?utf-8?q?vD9pdA7IZItkrox8jFn468SVt+7Rl0w0h/evtUUnL7H6JeaBUdqJ/xydtXq0XOX1B?= =?utf-8?q?3NhMvzpkcYY4bYhQhowZ4QsYu+AIYOXeUV0E+Ik5XqO+QbgbjbwRiH4yvsbyInUUw?= =?utf-8?q?m9oyBRxa6rI?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR04MB5736.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?19d/rBc1phY9GFg6gQRUTNjR3KdA?= =?utf-8?q?DStgmzRDYpbnLNjA2dCdNt/+2NCiQvSZpFQIkNuJEQ9ssCxU9SZfAjW9rFjHfXqVU?= =?utf-8?q?N68k28yqYLVdlGn++McXLnoW2yxNl5EbmOW4wK/MTpqlhPzTrL4ev/vFvza6w/ISl?= =?utf-8?q?IefpaBDh16idgsNTB2g1MKyRZV8rlEwmfCPLF+fQJ+eyHdnptTy1bERt3XoXeu+6L?= =?utf-8?q?JTBJfkLLUedPOnnN0Z7AroUbGawEbQRD8h5Lk8Tw7xFDB2myenQEmuZvbWgLVc7q9?= =?utf-8?q?CmMH1zF0Z0f+qv19K1oiq48wp53nIm1vUHt/dyKWPniJ6Sj9GJ2nptoNa7nI0Bcfk?= =?utf-8?q?d9tolftVZA+RDxDnN+M9vnhP4FsoY4tKLzBYdbZI+q4Kl1OByGA0R3b74lvwwKnK2?= =?utf-8?q?uewjaeQu8ijQUcl94u00TzollBh2iq0W4KXLjS7iwEHDdNZfjoAeovsGXb2n+Z0fF?= =?utf-8?q?JM9xJMUbO0kVmulzkvXrZclFTC9T6dlfjaeHihXv9iqvChgM0bvWeYZ5Am4qUlsEI?= =?utf-8?q?UCDvMmfZwbm4HsrsLzqOiHyV4tWa4mTU3fg/SJpQk8+YjNGl2iqZD3QVeAjXQgY8/?= =?utf-8?q?C3hehr6gNRQqKHq5lyHNjnKPWP/kQOAYV0oWe6Ou65eJSaSwP/yRe0rvdbYcWnVGT?= =?utf-8?q?C5DWuhav2Z/FX/ldcW1Tj1YWsh6HnxARbfTsUQKIv7bAMljKrH80ggfFlMEI9ll+q?= =?utf-8?q?kDi0WFSr2Wr50tJMc2TII7Hs9eaiqXdkSFkq6LPVCFVbRUuesDGhzjO3UKrGQQFxd?= =?utf-8?q?GmBzEa207rRwBj0uYgxtJQjcwubvZT8Ar291M7zWnF3aVYHM32LKCepGDwk1dpagk?= =?utf-8?q?ctBbhXj0vVebK6veFQBL+ZqfZSm31zZoeTDsyXijni0uyhdWV/osYxNX+uQfTqDsH?= =?utf-8?q?NnHV4Dyu1ctjd5+gJnSLQst0AKjRAUDIS8D48JAWkJoh6QMOQVmGkTV1e7CAhG3x2?= =?utf-8?q?dHBjKLEJxBuqBC+Foq8ASCok/0yH8DRQiTMy9iEUvtDusoIvguowyaBfgQc2MWtmr?= =?utf-8?q?B6PTOmIPizWxrraKITVZTBe/VJb+jcUH6aYpVz9sl/gAh4hVhrxsfMFHMahrEtaZt?= =?utf-8?q?5jVaZgZ7+p2LJKpY+/DZbRc+IizDZYb7IOtpd4qW4gdfPupZ4bOgdBVXojSLUkATA?= =?utf-8?q?nCiLrNNUiu5sf9PFx2RjgTcP/sqSSDLEAPyL6ibaU25Osgyp9TIwf8SKzuPJ5hUAN?= =?utf-8?q?OIcDnUYOpaxI5bPmj+l82kmt6kCp1q8YvXhj0rHuVq351qstbJXAf3Pg3BbsZjPrP?= =?utf-8?q?nQq335WBugO7CBLKRxgg7LdBAinWZsO08I9IqaD6Xvb4fnr7qi75/GgqZkKl49G3G?= =?utf-8?q?xIpQrkCy+/pQcTtqFBwGpimK1qviJHqz3Qw77mNwEwJxEGjHblDHGQ2JLn3ud8AaL?= =?utf-8?q?7T9A61LdZLTqVgI0Yte44r9DYQzgroXhgrG5kLZDfg2LUuiGXnHh0BnTzWBGICeGk?= =?utf-8?q?ZHHyGHjnrcG4nYnlm4MoT1GBB6k5cF7INO1d1wqQiBpU9G8Fn4GueQLeUbwvGEvI3?= =?utf-8?q?co1AfX5uTBg+4wsN2o8TIosMLxq05oR6q6q0qIgG4Tj72rD1uoPG3/s=3D?= Content-ID: <3D8BC0E2F2255346BE8C3C5391D6A282@apcprd04.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: espressif.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB5736.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dfb21031-a023-48de-9f43-08dd3ec06e73 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jan 2025 10:50:36.4093 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5faf27fd-3557-4294-9545-8ea74a409f39 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xi+55rDwzCCjEup6vqG1xteu1/gTVFJjpSZd2YRAcGgd1unKpvMwOSgrvDKOaiAQi+8dBRP9zyQE4jtE7hVzuaKqWYN963XqDcF89fliQUo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR04MB6488 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org Prepare pointer to be aligned and than use word-size iterator on aligned memory. --- newlib/libc/string/strcat.c | 18 +++++++++--------- newlib/libc/string/strncat.c | 17 +++++++++-------- 2 files changed, 18 insertions(+), 17 deletions(-) -- 2.43.0 diff --git a/newlib/libc/string/strcat.c b/newlib/libc/string/strcat.c index 71dd1db75..47c53a5d2 100644 --- a/newlib/libc/string/strcat.c +++ b/newlib/libc/string/strcat.c @@ -50,17 +50,17 @@ strcat (char *__restrict s1, #else char *s = s1; + /* Skip unaligned memory in s1. */ + while (UNALIGNED_X(s1) && *s1) + s1++; - /* Skip over the data in s1 as quickly as possible. */ - if (!UNALIGNED_X(s1)) - { - unsigned long *aligned_s1 = (unsigned long *)s1; - while (!DETECT_NULL(*aligned_s1)) - aligned_s1++; - - s1 = (char *)aligned_s1; - } + /* Skip over the aligned data in s1 as quickly as possible. */ + unsigned long *aligned_s1 = (unsigned long *)s1; + while (!DETECT_NULL(*aligned_s1)) + aligned_s1++; + s1 = (char *)aligned_s1; + /* Find string terminator. */ while (*s1) s1++; diff --git a/newlib/libc/string/strncat.c b/newlib/libc/string/strncat.c index 01f20f681..fc9fe5b1c 100644 --- a/newlib/libc/string/strncat.c +++ b/newlib/libc/string/strncat.c @@ -59,16 +59,17 @@ strncat (char *__restrict s1, #else char *s = s1; - /* Skip over the data in s1 as quickly as possible. */ - if (!UNALIGNED_X(s1)) - { - unsigned long *aligned_s1 = (unsigned long *)s1; - while (!DETECT_NULL(*aligned_s1)) - aligned_s1++; + /* Skip unaligned memory in s1. */ + while (UNALIGNED_X(s1) && *s1) + s1++; - s1 = (char *)aligned_s1; - } + /* Skip over the aligned data in s1 as quickly as possible. */ + unsigned long *aligned_s1 = (unsigned long *)s1; + while (!DETECT_NULL(*aligned_s1)) + aligned_s1++; + s1 = (char *)aligned_s1; + /* Find string terminator. */ while (*s1) s1++; From patchwork Mon Jan 27 10:51:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Lapshin X-Patchwork-Id: 105444 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A51A33858289 for ; Mon, 27 Jan 2025 10:52:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A51A33858289 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=espressifsystems.onmicrosoft.com header.i=@espressifsystems.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-espressifsystems-onmicrosoft-com header.b=LR3e4hbC X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from HK2PR02CU002.outbound.protection.outlook.com (mail-eastasiaazlp170100000.outbound.protection.outlook.com [IPv6:2a01:111:f403:c400::]) by sourceware.org (Postfix) with ESMTPS id 63A643857C63 for ; Mon, 27 Jan 2025 10:51:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 63A643857C63 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=espressif.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=espressif.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 63A643857C63 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c400:: ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737975102; cv=pass; b=Hn8xy0K0+QdoDGg/toxZmSf26ypQuVOi0/Sq7p53tCky8yN1KSp8ihNW0oakMfZR7kux5nk5vJuf3xwTl7XWbGeHKucw3LxNgRFDSZ7osblmeKcdzsewQim8s+2SWcT3ZEKoILUPXXayDxBsm/LH1xC8lRIU6zchjeStrvrwGfQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1737975102; c=relaxed/simple; bh=0hFpmRrePmVGfc0Dzihc7IH5c8s/hfF7kS1/QAnlRz0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=pbdABmGSCb0GHdyiFbkXcCefcdZYvr/4fOb1r8YIp9rGfCznypBAK6OWvCKiN/NzDN23WgNmm74kS/dXMQtIA3OSVAfXuuOkayL0wM3fUgtNUwUZyoJ20twCulYWscSFJQ3A8IfdHwaZ9MGpOULgNQeXFQZeB82mEP14wF17Ykw= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 63A643857C63 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xAYrQSIjwhowlVP3FfnGPfP5JzvJm2WzXnSzfbgfZgVwglYTWpvAAcPTpdXZ2uHRCr5bJLuO8utlFSi5KMpP0MF/b6/7BLm6x/zh2TcW/Qww2yZhQs7O1f6ZKPKIzOPPluWUrc/xR9iCC+EFx25uPQP4dr5SMT/4GUJBZDFepVH/DMpuf2HE8l8zKqB41I/YLSE39hWpsfsCrQj5qujEz11D3vnPLZSPmZkuxGLLTqnjJiJ/E3ypxBqopJ5iMWt3jC6qwrQjs8OxXJGzy/SBpdfBGu6ZzzxE0i1kkVgr9qxB3Omtacf/JCcA7RomNI16r3l+U+TRY58YED5uUYX+1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0hFpmRrePmVGfc0Dzihc7IH5c8s/hfF7kS1/QAnlRz0=; b=OX3W/NO+Lm9/a6fjWpruMOaKIv8AR/m1OOC5uxtrX9pl1tC8prsggRJOtJ/P4kLEojxgCllTLulLxSwu9EPY+JPClU0RjTJV7gtuyUp0xPCqPc782g6ZNTTLqkomRkn3fu6lhg5do0CEdHGS6WSOqf1yGKjHOd5gv/TEoRx7LyE5HQXGOGzrG9GhPojXt3qg2a1L9mIzbj5jBnRxARSdh57xi+GhKz0N4RZfIgpEo9MRGGERH31d09UW3scCS77dH7Y0BgJjcPNlaWuL4NwIIKxUDK93SFBLAUX+6Zcq58scwt3NnCEYM9qu3d/8CmxFHpI29NXcA9NcaBwP9WAG2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=espressif.com; dmarc=pass action=none header.from=espressif.com; dkim=pass header.d=espressif.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=espressifsystems.onmicrosoft.com; s=selector1-espressifsystems-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0hFpmRrePmVGfc0Dzihc7IH5c8s/hfF7kS1/QAnlRz0=; b=LR3e4hbCeeCx4DigajO9qMOBgXLPGfE153OG1HQkVZRGSflXeTtQHxu9EVlW8dTUKFBmb2u+d2C6/NysbZXerBxEIhs7ghv9Ig1w+RNNILHlcWFcaR+qqNiP08KpGQaAlC8JX3Q9Yf3DzbOJCwwQRpB4OxMKuk+Wj88/cXROyMc= Received: from TYZPR04MB5736.apcprd04.prod.outlook.com (2603:1096:400:1fa::7) by PUZPR04MB6351.apcprd04.prod.outlook.com (2603:1096:301:eb::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Mon, 27 Jan 2025 10:51:35 +0000 Received: from TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521]) by TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::6d6:9923:c880:a521%6]) with mapi id 15.20.8377.009; Mon, 27 Jan 2025 10:51:35 +0000 From: Alexey Lapshin To: "newlib@sourceware.org" CC: Alexey Gerenkov , Ivan Grokhotkov Subject: [PATCH 6/6] newlib: introduce HAVE_HW_UNALIGNED_ACCESS option Thread-Topic: [PATCH 6/6] newlib: introduce HAVE_HW_UNALIGNED_ACCESS option Thread-Index: AQHbcKlvYvmjqykxxk2xpFWwlu1OaQ== Date: Mon, 27 Jan 2025 10:51:35 +0000 Message-ID: References: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> In-Reply-To: <4ca70bc28f5edbc5a23c747313151ac5d290f54b.camel@espressif.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=espressif.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR04MB5736:EE_|PUZPR04MB6351:EE_ x-ms-office365-filtering-correlation-id: 430bb7cb-02d9-4839-721f-08dd3ec09199 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?BADCiRYsuXJ0x9e+KLPhy6UuPEziEzK?= =?utf-8?q?JCOzW49t/wfuXeQkXfcDeJkjhs6tYLhQZWhbrGwebDNjVJSIv2c9IrW+7Gc3i6Qpc?= =?utf-8?q?3tgFpzcyjjwMpwjwSbIgxkCPvzOErOHN7+/JNd/iGAJiSOxNfhN5HpgI8Ym8xseMb?= =?utf-8?q?MQg9l5r/3lnihFAcSwfRpbs/tCwKUN98SFDP0dQm3MfCjdrQeIm/GBDlVZz/P9XFQ?= =?utf-8?q?XvTxdQpsWf3wO6br/fiVc4501JjUU/e9muouEWErFoV+xozB1blGNNZ0CUTD/yKxO?= =?utf-8?q?NcyDZcgr+1LLcCjVE5Q6TZmwLgN0l1SvHfXvpFOz2kyMJjsb6FKih878zuVlMTTU/?= =?utf-8?q?pFEWlbzzzPS3YfjlwbZfRru5IClJxl2JIDeN1IfuGc30ziIpMn3Hz5ar9uHCAj4qC?= =?utf-8?q?rwgZkmbChL3+aRkawt+iu1X5+IKWtivlZO+luDvpw62JlMfqinrGIchl1O0z3exiM?= =?utf-8?q?AtIhlE20+qQiROkNqOBfqsI3e8f9Km6LVedG2AmZ7SK6b4L0+BtXqZANviot7bnNI?= =?utf-8?q?XDZOfiW8Y0k0tsY0Z7qoD7IAImjjqlrWlgUxu1+hRlTXK1fnKxpiIm2NOArBw096U?= =?utf-8?q?fF130//zf23W9dXpndKpPPF7KU42xvNVfZJmfvQsk6wqRU94wL1079vV2d63AeKmt?= =?utf-8?q?YX/2TLgLyW4IJs1aSFKAzQvcq8yPGueGHi2RFgR5W2ePKjr+BukbIpqxnUKdPpCqN?= =?utf-8?q?5qmFbnz23iLKMXBf/GSAS1NuVz23Lbx0Gy6eCxwxcGMdCYmFsyLQbQDuCwtt9eqRu?= =?utf-8?q?YdS/OUlunbUdFOYs67hOaDGeWMwEJZ58ZjpCR/OLgJE9SkCFjHc7lZj0V+CSDTGsp?= =?utf-8?q?rlHOOzvLGhBpxfAJEvBCbt0EQ8LEiOGYlz7bEC78Ld1Enp8ESmu60QSWr50DCvotp?= =?utf-8?q?OnvlP9nU/3RlfCPBKrSzm5IzZKX0M5dGg3fr3feA/XoYoBLHZxq+0x6Ecz1uEhfrq?= =?utf-8?q?aq9A9YNQrLK74XQVvSDcmSpnP1fguwQbwJhp2qnuD5We/gmRsxOBrcCV1YyDjLx7e?= =?utf-8?q?KVz219VhitYIXRTwjN7LasCmSmPG8/SNeY4zpo+C4WLnEsbcNMPFAzykLGRK4rv1t?= =?utf-8?q?PK89vVhc7yT8eJTRTtNa5kR9WtAimD/iKOkgg7LpbKPEPCKSXXWdsrxvFFLlsfhqN?= =?utf-8?q?x30uYX67AtXMVv9qbqnvfv7vFICiVghI/a2ugQx8+gb8Tvisi0eKijb1QZjSQ+0PX?= =?utf-8?q?doxy+tM9W/fq4o8WiNw0XAPQiGK2uaV8+c1fFw616aEVPy2QwPPHrfK+I/Ma1oaio?= =?utf-8?q?e5aiIITDbshQ+bo8Fvfp8HLYkAsTgHbGq5QHAqZJk2TK8GVitXWs5q1k7csZ4Se7+?= =?utf-8?q?MuJcDcZfo0UHOvjREv+YDIAr4FEuOGGq4ZjnYSwxjPAvRT7V6TGpTxeRS4INkWt+K?= =?utf-8?q?KN1mH7aSKQp?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR04MB5736.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?nHTa7UYRPf9ltl4DPZIELP9KNFq5?= =?utf-8?q?grh7aC+Ajy/NRQ2uIzr0ebXum+OfCXFUVguVzB17/u0SA6rtkHTg5Fd9HTIh8zQMv?= =?utf-8?q?S66HdrZzy3H2Ijk3GIE8tfMHDOdMqlqyYlDuZpuuZP6IfhHujWBrzzDa75dju88qW?= =?utf-8?q?1F9svEeGaBoXvklZOfAuMeDOPGrKP+MkIRwz0/dXH83KIs/m+wZUL7qKsJ8o5S27Q?= =?utf-8?q?KcJZpOqaasVEuqR0HHNCrGCZJ1zxA1oCo1ApWSJ9Mm2CQ8pYhAe2FHWA8YuHenUdF?= =?utf-8?q?6PX+sfOvbI49eH92JzzT1R5Gh1bnEvfBIg7gsEnWKQMJEzzfa5DenFhkAGFrcT7bP?= =?utf-8?q?g5YgBbu2yie32AfQeAIDK4cE0FmWrSH7IjkO9AiucjS+7jOmyvxNPv/o1xVqV95lt?= =?utf-8?q?GU3IckMi81HUts5bxPdHiu3v1Yv9JerRgUCzC+pT4d2FPF8WSAsc/lwO40jahQhEk?= =?utf-8?q?0cbxKDPbV4Zu+ust/HS1pIMKPp3kJ/UCetyJXYejNXbEbjo9sjwwARV9ApOR3Mf39?= =?utf-8?q?Dt0kc9K4EQzzhsllcaoDvLCMEvb5HoJfbM/nMe6ux3Mj7voLbEoyIjJFlyB8X4sj7?= =?utf-8?q?/e71L9h35icX0fixeRSMK6rxecSyk279BoOlhRRKA2tNdnKJGOwQWcDVJXbVfizNw?= =?utf-8?q?eM+eURZWBkr42CgAVbjMyOTfTpFg8GOZweJXobacpApjQOe8hAfukuNcPRwNyyqFm?= =?utf-8?q?IMoNQ+ZEafbbBF7Q4FCL/9NyGhVmmr6QXFX2Lw2ruPSqO6PQI9G/xnmLcvDJwlHnS?= =?utf-8?q?iLuYo9iL4L17u7Ydyn1aCs3kP3kj6/W9yjYwfUKL+9a4e/twAQQq3F0/jaDGJC7Ug?= =?utf-8?q?NVMcNIcx1cDEnEsNJeCo7AB9DR2I2VHywrneFqjF/zo6OSmAl+RpGwInoTc4wEEMY?= =?utf-8?q?LbHdYFtGUxloOuZUsJacTE1oNbyuK6uyFplMpXU5GREwYfbx2UVgatuUfNjrafymM?= =?utf-8?q?8/dgURXJHnCq6c4Kwy4/kO6MGpXYlYk+u50ecIk+EvQlLvvg/4XleFWINSIkeox9u?= =?utf-8?q?OBG/nBM5B9b1UQEgfIfKUB7o+blsvzdjbjhPkDZQPDQprlfMd7VsjALSqnOXf4jRy?= =?utf-8?q?IzeZfTbxwTidGaM9yu1+bD8VBcY3QU7guBOKZ0VpinjgQGH7r0a/AXYqxpt4/r9af?= =?utf-8?q?EWUwzPj6za6FHxVlQsIvH05u0YjwldKL7t3XuoapoobVl1S6MpVGpyGQ7djClgqgA?= =?utf-8?q?TmaGMVnPuh7p6wjTRtM8LtrlexQPl3ZOImqF59Y+25w1o6YeHmE0soCtBuwXjwxFB?= =?utf-8?q?yHaXE5TrB+bJ52F2ZSaxaMggFWnsBiw/oTP2ZT91S+IKtOytxT2utISibV84+gCKf?= =?utf-8?q?se0ZKqEZmyX5gGw5TVKIiyWP7nI03goqoTpIV2PLTuWN4VzRNk8T2WuLmdjq5yvSs?= =?utf-8?q?0FQV91DO103Iay+adNlcIVmgoez/F8ifQgyd6vSoNrrBBHC6ZLpBk+qsq5ZGAq9ZS?= =?utf-8?q?KeGb6oCYJkBBTGxGZTqf02jcF1cjXBe0UTU8zjGiRYUmrveR2AQSkVo4e9ymqHjqf?= =?utf-8?q?OT9VQJsCWAHVzAblPZb++hB410+2tnO3SaY+Qzkn39ucLFZKwT37ZmA=3D?= Content-ID: <2DECE47FA5B64840835E006575041B70@apcprd04.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: espressif.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB5736.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 430bb7cb-02d9-4839-721f-08dd3ec09199 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jan 2025 10:51:35.3821 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5faf27fd-3557-4294-9545-8ea74a409f39 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: uH+DszqyK2+5zyaTwfVnSeX5gQ3ZwKwoZLWublK4kPrvItswSGXtNOeNqo5aFVzkkyacrYnoD9OveEpKFGA8Mz4XlsGzYT0WMcSnSwPFAhU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR04MB6351 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces~patchwork=sourceware.org@sourceware.org Some hardware may perform better when copying unaligned word-sized memory compared to byte-by-byte copying. --- newlib/configure.host | 6 ++++++ newlib/libc/machine/riscv/memcpy.c | 4 ++++ newlib/libc/machine/riscv/strcmp.S | 5 ++++- newlib/libc/machine/riscv/strcpy.c | 2 ++ newlib/libc/string/local.h | 11 ++++++++++- 5 files changed, 26 insertions(+), 2 deletions(-) -- 2.43.0 diff --git a/newlib/configure.host b/newlib/configure.host index ff2e51275..0adb1aced 100644 --- a/newlib/configure.host +++ b/newlib/configure.host @@ -454,6 +454,12 @@ case "${host}" in newlib_cflags="${newlib_cflags} -D_NO_GETPASS -D_NO_SIGSET -D_NO_WORDEXP -D_NO_POPEN -D_NO_POSIX_SPAWN" newlib_cflags="${newlib_cflags} -DHAVE_FCNTL -DHAVE_BLKSIZE -DHAVE_OPENDIR -DHAVE_RENAME" newlib_cflags="${newlib_cflags} -DGETREENT_PROVIDED -DSIGNAL_PROVIDED" + newlib_cflags="${newlib_cflags} -D__ESP__" + case "${host_cpu}" in + riscv*) + newlib_cflags="${newlib_cflags} -DHAVE_HW_UNALIGNED_ACCESS" + ;; + esac ;; a29k-*-*) sys_dir=a29khif diff --git a/newlib/libc/machine/riscv/memcpy.c b/newlib/libc/machine/riscv/memcpy.c index 4098f3ab1..f2d335b33 100644 --- a/newlib/libc/machine/riscv/memcpy.c +++ b/newlib/libc/machine/riscv/memcpy.c @@ -33,8 +33,12 @@ memcpy(void *__restrict aa, const void *__restrict bb, size_t n) const char *b = (const char *)bb; char *end = a + n; uintptr_t msk = sizeof (long) - 1; +#ifdef HAVE_HW_UNALIGNED_ACCESS + if (n < sizeof (long)) +#else if (unlikely ((((uintptr_t)a & msk) != ((uintptr_t)b & msk)) || n < sizeof (long))) +#endif // HAVE_HW_UNALIGNED_ACCESS { small: if (__builtin_expect (a < end, 1)) diff --git a/newlib/libc/machine/riscv/strcmp.S b/newlib/libc/machine/riscv/strcmp.S index 9af9ca1f3..bb0be9afd 100644 --- a/newlib/libc/machine/riscv/strcmp.S +++ b/newlib/libc/machine/riscv/strcmp.S @@ -30,10 +30,13 @@ strcmp: .size strcmp, .-strcmp #else - or a4, a0, a1 li t2, -1 + +#ifndef HAVE_HW_UNALIGNED_ACCESS + or a4, a0, a1 and a4, a4, SZREG-1 bnez a4, .Lmisaligned +#endif #if SZREG == 4 li a5, 0x7f7f7f7f diff --git a/newlib/libc/machine/riscv/strcpy.c b/newlib/libc/machine/riscv/strcpy.c index 6d802fa8e..7d7554615 100644 --- a/newlib/libc/machine/riscv/strcpy.c +++ b/newlib/libc/machine/riscv/strcpy.c @@ -17,8 +17,10 @@ char *strcpy(char *dst, const char *src) char *dst0 = dst; #if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) +#ifndef HAVE_HW_UNALIGNED_ACCESS int misaligned = ((uintptr_t)dst | (uintptr_t)src) & (sizeof (long) - 1); if (__builtin_expect(!misaligned, 1)) +#endif { long *ldst = (long *)dst; const long *lsrc = (const long *)src; diff --git a/newlib/libc/string/local.h b/newlib/libc/string/local.h index fb8e6c65c..5eb34319a 100644 --- a/newlib/libc/string/local.h +++ b/newlib/libc/string/local.h @@ -17,12 +17,21 @@ int __wcwidth (wint_t); # define __inhibit_loop_to_libcall #endif -/* Nonzero if X is not aligned on a "long" boundary. */ +/* Nonzero if X is not aligned on a "long" boundary. + * This macro is used to skip a few bytes to find an aligned pointer. + * It's better to keep it as is even if HAVE_HW_UNALIGNED_ACCESS is enabled, + * to avoid small performance penalties (if they are not zero). */ #define UNALIGNED_X(X) ((long)X & (sizeof (long) - 1)) +#ifdef HAVE_HW_UNALIGNED_ACCESS +/* Hardware performs unaligned operations with little + * to no penalty compared to byte-to-byte copy. */ +#define UNALIGNED_X_Y(X, Y) (0) +#else // HAVE_HW_UNALIGNED_ACCESS /* Nonzero if either X or Y is not aligned on a "long" boundary. */ #define UNALIGNED_X_Y(X, Y) \ (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) +#endif // HAVE_HW_UNALIGNED_ACCESS /* How many bytes are copied each iteration of the word copy loop. */ #define LITTLE_BLOCK_SIZE (sizeof (long))