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

Reply via email to