Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C08B5200B32 for ; Thu, 9 Jun 2016 04:02:07 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id BEFC6160A35; Thu, 9 Jun 2016 02:02:07 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id E516D160A2E for ; Thu, 9 Jun 2016 04:02:06 +0200 (CEST) Received: (qmail 2255 invoked by uid 500); 9 Jun 2016 02:02:05 -0000 Mailing-List: contact commits-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: Reply-To: dev@apr.apache.org List-Id: Delivered-To: mailing list commits@apr.apache.org Received: (qmail 2246 invoked by uid 99); 9 Jun 2016 02:02:05 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Jun 2016 02:02:05 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 6729E1A08DB for ; Thu, 9 Jun 2016 02:02:05 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.374 X-Spam-Level: X-Spam-Status: No, score=0.374 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id A3EpTLy1J4OT for ; Thu, 9 Jun 2016 02:02:03 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 1385E5FBA6 for ; Thu, 9 Jun 2016 02:02:03 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id F37BEE0316 for ; Thu, 9 Jun 2016 02:02:01 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id B8C6F3A0287 for ; Thu, 9 Jun 2016 02:02:01 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1747480 - in /apr/apr/branches/1.6.x/strings: ./ apr_cstr.c Date: Thu, 09 Jun 2016 02:02:01 -0000 To: commits@apr.apache.org From: wrowe@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20160609020201.B8C6F3A0287@svn01-us-west.apache.org> archived-at: Thu, 09 Jun 2016 02:02:07 -0000 Author: wrowe Date: Thu Jun 9 02:02:01 2016 New Revision: 1747480 URL: http://svn.apache.org/viewvc?rev=1747480&view=rev Log: Merge r1747424, 1747425, 1747460, 1747461 for performance optimizations on a generalized basis, appears to help significantly (40%+) on Intel architectures. Modified: apr/apr/branches/1.6.x/strings/ (props changed) apr/apr/branches/1.6.x/strings/apr_cstr.c Propchange: apr/apr/branches/1.6.x/strings/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Thu Jun 9 02:02:01 2016 @@ -0,0 +1,4 @@ +/apr/apr/branches/1.4.x/strings:1003369,1101301 +/apr/apr/trunk/strings:733052,739635,741862,741866-741867,741869,741871,745763-745764,746310,747990,748080,748361,748371,748565,748888,748902,748988,749810,760443,767895,775683,782838,783398,783958,784633,784773,788588,789050,793192-793193,794118,794485,795267,799497,800627,809745,809854,810472,811455,813063,821306,829490,831641,832904,835607,888669,892028,892159,892435,892909,896382,896653,899905,902090,908427,910419,910597,917819,917837-917838,925965,929796,930508,931973,951771,960665,960671,979891,983618,989450,990435,1003338,1044440,1044447,1055657,1072165,1078845,1081462,1081495,1083038,1083242,1084662,1086695,1088023,1089031,1089129,1089438,1099348,1103310,1183683,1183685-1183686,1183688,1183693,1183698,1213382,1235047,1236970,1237078,1237507,1240472,1340286,1340288,1340470,1341193,1341196,1343233,1343243,1367050,1368819,1370494,1372018,1372022,1372093,1372849,1376957,1384764,1389077,1400200,1402868,1405985,1406690,1420106,1420109,1425356,1428809,1438940,1438957-1438959,144290 3,1449568,1456418,1459994,1460179-1460180,1460241,1460399,1460405,1462738,1462813,1470186,1470348,1475509,1478905,1480067,1481262,1481265,1484271,1487796,1489517,1496407,1502804,1510354,1516261,1523384,1523479,1523484,1523505,1523521,1523604,1523613,1523615,1523844-1523845,1523853,1524014,1524031,1528797,1528809,1529488,1529495,1529515,1529521,1529668,1530786,1530800,1530988,1531554,1531768,1531884,1532022,1533104,1533111,1533979,1535027,1535157,1536744,1538171,1539374,1539389,1539455,1539603,1541054,1541061,1541486,1541655,1541666,1541744,1542601,1542779,1543033,1543056,1548575,1550907,1551650,1551659,1558905,1559382,1559873,1559975,1561040,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587045,1587063,1587543,1587545,1588878,1588937,1593611,1593614-1593615,1593680,1594684,1594708,1595549,1597797,1597803,1604590,1604596,1604598,1605104,1610854,1611023,1611107,1611110,1611117,1611120,1611125,1611184,1611193,1611466,1611515,1611517,1625173,162 6564,1634615,1642159,1648830,1664406,1664447,1664451,1664471,1664769-1664770,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667420-1667421,1667423,1667900-1667901,1667903,1667914-1667916,1667962,1669077,1671292,1671329,1671356,1671389,1671513-1671514,1671957,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1685929,1696140,1696767,1722547,1722557,1726928,1727020,1727160,1727175,1727199,1728957,1732582,1733451,1733594,1733694,1733706,1733708,1733775,1734816,1736552,1738791,1738925,1747424-1747461 +/apr/apr/trunk/test/testnames.c/strings:1460405 +/httpd/httpd/trunk/strings:1604590 Modified: apr/apr/branches/1.6.x/strings/apr_cstr.c URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/strings/apr_cstr.c?rev=1747480&r1=1747479&r2=1747480&view=diff ============================================================================== --- apr/apr/branches/1.6.x/strings/apr_cstr.c (original) +++ apr/apr/branches/1.6.x/strings/apr_cstr.c Thu Jun 9 02:02:01 2016 @@ -196,7 +196,7 @@ char * apr_cstr_join(const apr_array_hea * octets (such as extended latin alphabetics) are never case-folded. * NOTE: Other than Alpha A-Z/a-z, each code point is unique! */ -static const unsigned char ucharmap[] = { +static const short ucharmap[] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, @@ -243,7 +243,7 @@ static const unsigned char ucharmap[] = * * NOTE: Other than Alpha A-Z/a-z, each code point is unique! */ -static const unsigned char ucharmap[] = { +static const short ucharmap[] = { 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, @@ -279,27 +279,37 @@ static const unsigned char ucharmap[] = }; #endif -int apr_cstr_casecmp(const char *str1, const char *str2) +int apr_cstr_casecmp(const char *s1, const char *s2) { + const unsigned char *str1 = (const unsigned char *)s1; + const unsigned char *str2 = (const unsigned char *)s2; for (;;) { - const int c1 = (int)(*((const unsigned char *)str1++)); - const int c2 = (int)(*((const unsigned char *)str2++)); + const int c1 = (int)(*str1); + const int c2 = (int)(*str2); const int cmp = ucharmap[c1] - ucharmap[c2]; - if (cmp || !c1 || !c2) + /* Not necessary to test for !c2, this is caught by cmp */ + if (cmp || !c1) return cmp; + str1++; + str2++; } } -int apr_cstr_casecmpn(const char *str1, const char *str2, apr_size_t n) +int apr_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n) { + const unsigned char *str1 = (const unsigned char *)s1; + const unsigned char *str2 = (const unsigned char *)s2; while (n--) { - const int c1 = (int)(*((const unsigned char *)str1++)); - const int c2 = (int)(*((const unsigned char *)str2++)); + const int c1 = (int)(*str1); + const int c2 = (int)(*str2); const int cmp = ucharmap[c1] - ucharmap[c2]; - if (cmp || !c1 || !c2) + /* Not necessary to test for !c2, this is caught by cmp */ + if (cmp || !c1) return cmp; + str1++; + str2++; } return 0; }