From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12123 Path: news.gmane.org!.POSTED!not-for-mail From: David Guillen Fandos Newsgroups: gmane.linux.lib.musl.general Subject: Do not use 64 bit division if possible Date: Sat, 25 Nov 2017 21:52:06 +0100 Message-ID: <424674f0-8460-7807-7366-a87d8588e8bc@davidgf.es> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1511643144 6095 195.159.176.226 (25 Nov 2017 20:52:24 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 25 Nov 2017 20:52:24 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 To: musl@lists.openwall.com Original-X-From: musl-return-12139-gllmg-musl=m.gmane.org@lists.openwall.com Sat Nov 25 21:52:21 2017 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1eIhQv-00019y-Pu for gllmg-musl@m.gmane.org; Sat, 25 Nov 2017 21:52:17 +0100 Original-Received: (qmail 12230 invoked by uid 550); 25 Nov 2017 20:52:21 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 12207 invoked from network); 25 Nov 2017 20:52:20 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=davidgf-es.20150623.gappssmtp.com; s=20150623; h=to:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=wRV37oDgESnFcNQqu/KNbUuyww+NuSodmivAy5451ww=; b=nMWAm/LFaznA2OsWZ0nNYGLk3IrwEciSVq17aHpnvk8E0RXLUviMR7zuFuPUH2/Cgt 8pcDP2AKuR7pJu1Es548uTGY/wQmHRjTn7JeF2Zo9dCkNYhsYK4miiiL9n3Xq2Jr6+V4 KOW4Tue/DF8w8wg9A3q3vpdy48zphV6zI1uR9WwfwDdfAL/2FxsDdUtKpaDZ64q8QJX7 nHHSqBM4lqVbgE3/i4CO8h9ncUKN0M6zuY2j178HgQtPgWhUqcUm8nCjjiaTdysIp0lV NOx2PN+njatJqQwyVAcvUi/cyfAVNcD4S2o7suYwPOwKQCesh+OPLSMk1nyOZboehitx QLtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=wRV37oDgESnFcNQqu/KNbUuyww+NuSodmivAy5451ww=; b=CaQ8d8JNmjloucJE1WjgzPPXT5lcQvnTRB7eMPHSeOkhlcBMZbmKtmeD14nHdBxrl3 x8wvvBcyD1IKsumgtWTIaQSw9JndkpoEmE2uGmYiqeih/iYMFmWFmzuh1H4ZKyThtebx aPECkwZJ+Ene2d697gM8qXVZMEe/zey/euGl4Yn1Fdh2AqZ3Pbugs64NboXDPZv1eYvW SfRppBpZy65ecEJVtWC670fZL9A7kScArxl2m+h7oeurI9yWqoSbsZWmRPxprqPQjpyG +TNFzXA8ly6Gq4OiNkagK2ZZo7R14DXwq9KjM8OOTzel8zNBuQ/dbGH0vefaGDUPaXsO 6NXg== X-Gm-Message-State: AJaThX7EjzIjlcsD7IWneZuL1skKxf5vKUdbg91NYW9PhsTWPdrBsFrQ OjOKawyajPh7V9vJdkAswWSUlFcGeA== X-Google-Smtp-Source: AGs4zMYmlY5oMWt9gyWUhAalVkdjGu/I7UqIzVw7xsBHZpgoT8N8H88r4Pp3aVB3HgIyDiJQj+OqTQ== X-Received: by 10.80.153.142 with SMTP id m14mr39479482edb.265.1511643129041; Sat, 25 Nov 2017 12:52:09 -0800 (PST) Content-Language: en-US Xref: news.gmane.org gmane.linux.lib.musl.general:12123 Archived-At: Hey there, Just noticed that my binary was getting some gcc functions for integer division in some places coming from musl. I checked and it seems that, even though musl assumes PAGE_SIZE is always power of two, that we divide by it instead of using shifts for that. This results in extra overhead and slow division on platforms that do not have a 64 bit divider (even the ones that do have 32 bit divider). So I propose a patch here, let me know what you people think about. David diff --git a/src/conf/sysconf.c b/src/conf/sysconf.c index b8b761d0..aa9fc9d1 100644 --- a/src/conf/sysconf.c +++ b/src/conf/sysconf.c @@ -4,6 +4,7 @@ long sysconf(int name) #include #include "syscall.h" #include "libc.h" +#include "atomic.h" #define JT(x) (-256|(x)) #define VER JT(1) @@ -206,7 +206,7 @@ long sysconf(int name) if (name==_SC_PHYS_PAGES) mem = si.totalram; else mem = si.freeram + si.bufferram; mem *= si.mem_unit; - mem /= PAGE_SIZE; + mem >>= (unsigned)(a_ctz_l(PAGE_SIZE)); return (mem > LONG_MAX) ? LONG_MAX : mem; case JT_ZERO & 255: return 0;