From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3178 invoked by alias); 5 Mar 2017 00:01:01 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 40731 Received: (qmail 29896 invoked from network); 5 Mar 2017 00:01:01 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(205.235.26.22):SA:0(0.5/5.0):. Processed in 2.823003 secs); 05 Mar 2017 00:01:01 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_SORBS_SPAM,RP_MATCHES_RCVD,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=L5oX=2O=brasslantern.com=schaefer@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at bounces.park01.gkg.net does not designate permitted sender hosts) X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=brasslantern-com.20150623.gappssmtp.com X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version; bh=D6p80dY+CQkh1XKjbXWxRsBIjLZ4OqVrsvimP68JiaU=; b=qUJyxXaG3oKMmrCL2CTaxEbUgVjWT3FEdN6UMmaeQNW17uZMa8GXl1tcrZ/NJjEbh6 GSmlLD7/B1pZLVMuX/ngFSwGTpw1BMxunYSaNGqmIyxP+jGjbkvktSqBqOtRTss+qBg6 rlvU5SoA01htRO2dHmOp41MtUkO7tknrupvO1AZGMolSL67jsbmVSzDn27T0cIoQnBjn UPsXuIbzVGS9nx+93XvhdguCIhbMQzDkraKb2D902ZyXmwcQTnN+2AfHmAOsNXfCQXG4 J0dW/xRVK0AMC9waH9zxGscaGQCEc7Lna0djbucVCQg278QPcFgIIkfpT0861OQaNkBj 3eRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:date:in-reply-to:comments :references:to:subject:mime-version; bh=D6p80dY+CQkh1XKjbXWxRsBIjLZ4OqVrsvimP68JiaU=; b=IPqxeAN+c3NYwwqPDOvukYA+rBVXVoEd02wCYg4alWpM73ZR00k2CI7EDOzDLflLk3 FbDwgOMzPCBxoMTqxJLaxQ++VaVfHnvcuOd0Ivs3Nk+xSUxelNyNOcWFZpWFgaB6Wl1A 8G4UhsvqkM8jspX0T5sU5LT7fl/RR8nyKCtIoTREkx5JS3XXaLjxSlOsstAaOiOwR5hi NVAY/i0Y4e4Dcbfk/EeWzEYHQoe3V7u4w9bX7ozJA1hx/xw4fQUQpXSR4GX+Nxj8UsAl x9md5fzdYM/Gvn5MLJTq0R324ttqo39+CbtCDfmQ6kjPpBJ4iW99SJ0SYs9KVUlxG7W2 D4rw== X-Gm-Message-State: AMke39kCWwUzJEsl8reSHmFA22fJTBsYd10gEoOTa5huvMoT2q5dQAoM/QeMPbYOrJZO0g== X-Received: by 10.31.219.131 with SMTP id s125mr660365vkg.118.1488672029026; Sat, 04 Mar 2017 16:00:29 -0800 (PST) From: Bart Schaefer Message-Id: <170304160050.ZM28828@torch.brasslantern.com> Date: Sat, 4 Mar 2017 16:00:50 -0800 In-Reply-To: <1488635394.1730469.900258024.2D9CA43E@webmail.messagingengine.com> Comments: In reply to Sebastian Gniazdowski "Status of optimiza tions - can have n ative buffers" (Mar 4, 5:49am) References: <1488635394.1730469.900258024.2D9CA43E@webmail.messagingengine.com> X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: Sebastian Gniazdowski , zsh-workers@zsh.org Subject: Re: Status of optimiza tions - can have n ative buffers MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Mar 4, 5:49am, Sebastian Gniazdowski wrote: } } Callgrind reveals the cause: } } 59,930,247,427 arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2] Yeah, I think we've already determined that we're not getting away from that without a significant rewrite to stop managing arrays as simple char ** pointers. Although the following might help in some cases -- (v->start < 0) can't be true very often or arrlen() would have shown up nearly as much as arrlen_le(), but maybe this shaves a few unnecessary recounts? Anyway changing from arrlen_le() to arrlen_gt() removes a couple of tail calls, so this might get faster, and will also reveal how many of those arrlen_le() are coming through here. diff --git a/Src/params.c b/Src/params.c index 8942fef..6164ba6 100644 --- a/Src/params.c +++ b/Src/params.c @@ -2101,10 +2101,14 @@ getstrvalue(Value v) if (v->isarr) s = sepjoin(ss, NULL, 1); else { - if (v->start < 0) - v->start += arrlen(ss); - s = (arrlen_le(ss, v->start) || v->start < 0) ? - (char *) hcalloc(1) : ss[v->start]; + if (v->start < 0) { + if ((v->start += arrlen(ss)) < 0) + s = (char *) hcalloc(1); + else + s = ss[v->start]; + } else + s = arrlen_gt(ss, v->start) ? + ss[v->start] : (char *) hcalloc(1); } return s; case PM_INTEGER: