From owner-freebsd-bugs@FreeBSD.ORG Wed Dec 16 14:20:02 2009 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EF3881065694 for ; Wed, 16 Dec 2009 14:20:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id B2FAB8FC2C for ; Wed, 16 Dec 2009 14:20:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id nBGEK1A6066839 for ; Wed, 16 Dec 2009 14:20:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id nBGEK1mG066838; Wed, 16 Dec 2009 14:20:01 GMT (envelope-from gnats) Resent-Date: Wed, 16 Dec 2009 14:20:01 GMT Resent-Message-Id: <200912161420.nBGEK1mG066838@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Maxim Zakharov Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 54FFA1065676 for ; Wed, 16 Dec 2009 14:19:54 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 4480D8FC24 for ; Wed, 16 Dec 2009 14:19:54 +0000 (UTC) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id nBGEJrsv029074 for ; Wed, 16 Dec 2009 14:19:53 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id nBGEJr7T029073; Wed, 16 Dec 2009 14:19:53 GMT (envelope-from nobody) Message-Id: <200912161419.nBGEJr7T029073@www.freebsd.org> Date: Wed, 16 Dec 2009 14:19:53 GMT From: Maxim Zakharov To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: misc/141682: Fester version of stncpy function X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Dec 2009 14:20:02 -0000 >Number: 141682 >Category: misc >Synopsis: Fester version of stncpy function >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Dec 16 14:20:01 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Maxim Zakharov >Release: 7.1-BETA2 >Organization: >Environment: FreeBSD max.maxime.net.ru 7.1-BETA2 FreeBSD 7.1-BETA2 #0: Mon Oct 13 04:23:28 UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 >Description: I would like to propose a faster version of strncpy function (/usr/src/lib/libc/string/strncpy.c). It's about 30% faster on aligned data, and about two times faster on unaligned data on modern pipelined processors (Intel Duo E8400 3MHz in particular). >How-To-Repeat: >Fix: void * dps_strncpy(char *dst0, char *src0, size_t length) { if (length) { register size_t n = (length + 7) / 8; register size_t r = (length % 8); register char *dst = dst0, *src = src0; if (r == 0) r = 8; if (!(dst[0] = src[0])) return dst0; if (r > 1) { if (!(dst[1] = src[1])) return dst0; if (r > 2) { if (!(dst[2] = src[2])) return dst0; if (r > 3) { if (!(dst[3] = src[3])) return dst0; if (r > 4) { if (!(dst[4] = src[4])) return dst0; if (r > 5) { if (!(dst[5] = src[5])) return dst0; if (r > 6) { if (!(dst[6] = src[6])) return dst0; if (r > 7) { if (!(dst[7] = src[7])) return dst0; }}}}}}} src += r; dst += r; while (--n > 0) { if (!(dst[0] = src[0])) break; if (!(dst[1] = src[1])) break; if (!(dst[2] = src[2])) break; if (!(dst[3] = src[3])) break; if (!(dst[4] = src[4])) break; if (!(dst[5] = src[5])) break; if (!(dst[6] = src[6])) break; if (!(dst[7] = src[7])) break; src += 8; dst += 8; } if (dst < dst0 + length) *dst = '\0'; } return dst0; } >Release-Note: >Audit-Trail: >Unformatted: