On Fri, 2022-01-07 at 15:00 -0600, Scott Cheloha wrote: > On Fri, Jan 07, 2022 at 01:43:24PM -0600, Scott Cheloha wrote: > > > > [...] > > > > Like this? > > > > [...] > > Updated: make the for-loop update expressions match. > Why not go for the following diff? It has a comparable speed increase, but without the added complexity of a second inner loop.
Either diff is fine by me though, so if you want to go ahead with your diff: OK martijn@ $ export LC_ALL=C $ for i in $(jot 10); do time rev /usr/share/dict/words > /dev/null; done 0m00.17s real 0m00.16s user 0m00.02s system 0m00.17s real 0m00.17s user 0m00.01s system 0m00.17s real 0m00.17s user 0m00.01s system 0m00.17s real 0m00.18s user 0m00.00s system 0m00.17s real 0m00.17s user 0m00.01s system 0m00.20s real 0m00.16s user 0m00.03s system 0m00.23s real 0m00.16s user 0m00.01s system 0m00.17s real 0m00.18s user 0m00.00s system 0m00.17s real 0m00.21s user 0m00.00s system 0m00.17s real 0m00.16s user 0m00.01s system $ for i in $(jot 10); do time ./obj/rev.scott /usr/share/dict/words > /dev/null; done 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.02s system 0m00.06s real 0m00.04s user 0m00.02s system 0m00.05s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.05s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.03s user 0m00.01s system 0m00.04s real 0m00.05s user 0m00.00s system $ for i in $(jot 10); do time ./obj/rev.martijn /usr/share/dict/words > /dev/null; done 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.03s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.06s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.05s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.01s system $ export LC_ALL=en_US.UTF-8 $ for i in $(jot 10); do time rev /usr/share/dict/words > /dev/null; done 0m00.17s real 0m00.17s user 0m00.00s system 0m00.17s real 0m00.18s user 0m00.00s system 0m00.17s real 0m00.17s user 0m00.00s system 0m00.17s real 0m00.18s user 0m00.01s system 0m00.17s real 0m00.17s user 0m00.01s system 0m00.17s real 0m00.18s user 0m00.00s system 0m00.17s real 0m00.17s user 0m00.00s system 0m00.17s real 0m00.17s user 0m00.02s system 0m00.17s real 0m00.17s user 0m00.01s system 0m00.17s real 0m00.18s user 0m00.00s system $ for i in $(jot 10); do time ./obj/rev.scott /usr/share/dict/words > /dev/null; done 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.05s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.00s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.01s system 0m00.04s real 0m00.04s user 0m00.00s system $ for i in $(jot 10); do time ./obj/rev.martijn /usr/share/dict/words > /dev/null; done 0m00.04s real 0m00.04s user 0m00.01s system 0m00.05s real 0m00.04s user 0m00.00s system 0m00.05s real 0m00.05s user 0m00.00s system 0m00.05s real 0m00.03s user 0m00.02s system 0m00.05s real 0m00.05s user 0m00.00s system 0m00.05s real 0m00.05s user 0m00.00s system 0m00.05s real 0m00.05s user 0m00.00s system 0m00.05s real 0m00.04s user 0m00.01s system 0m00.05s real 0m00.04s user 0m00.01s system 0m00.05s real 0m00.05s user 0m00.00s system martijn@ ps. I don't have your fancy nanotime. Where can I find that? Index: rev.c =================================================================== RCS file: /cvs/src/usr.bin/rev/rev.c,v retrieving revision 1.13 diff -u -p -r1.13 rev.c --- rev.c 10 Apr 2016 17:06:52 -0000 1.13 +++ rev.c 8 Jan 2022 07:09:19 -0000 @@ -43,6 +43,8 @@ int isu8cont(unsigned char); void usage(void); +int multibyte; + int main(int argc, char *argv[]) { @@ -53,6 +55,7 @@ main(int argc, char *argv[]) int ch, rval; setlocale(LC_CTYPE, ""); + multibyte = MB_CUR_MAX > 1; if (pledge("stdio rpath", NULL) == -1) err(1, "pledge"); @@ -104,7 +107,7 @@ main(int argc, char *argv[]) int isu8cont(unsigned char c) { - return MB_CUR_MAX > 1 && (c & (0x80 | 0x40)) == 0x80; + return multibyte && (c & (0x80 | 0x40)) == 0x80; } void