|
Message-ID: <424674f0-8460-7807-7366-a87d8588e8bc@davidgf.es> Date: Sat, 25 Nov 2017 21:52:06 +0100 From: David Guillen Fandos <david@...idgf.es> To: musl@...ts.openwall.com Subject: Do not use 64 bit division if possible 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 <sys/sysinfo.h> #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;
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.