Branch: refs/heads/grok
  Home:   https://github.com/Perl/perl5
  Commit: baa687669220fa876bc3048f515e6bd666d46fcd
      
https://github.com/Perl/perl5/commit/baa687669220fa876bc3048f515e6bd666d46fcd
  Author: Karl Williamson <k...@cpan.org>
  Date:   2020-01-07 (Tue, 07 Jan 2020)

  Changed paths:
    M handy.h

  Log Message:
  -----------
  handy.h: Convert XDIGIT_VALUE to branchless

This removes a branch and an array lookup in the XDIGIT_VALUE() macro.
It adds some shifts, masks, and additions instead, though replacing a
mask and addition in the old way.

A somewhat more complicated version could be made for EBCDIC, but I'm
not bothering to do that, using an array lookup to convert the salient
value to ASCII, so on EBCDIC there isn't an array lookup removal.


  Commit: bf029276662be566de0e6b19f4ff06239dc6046c
      
https://github.com/Perl/perl5/commit/bf029276662be566de0e6b19f4ff06239dc6046c
  Author: Karl Williamson <k...@cpan.org>
  Date:   2020-01-07 (Tue, 07 Jan 2020)

  Changed paths:
    M charclass_invlists.h
    M handy.h
    M l1_char_class_tab.h
    M lib/unicore/uni_keywords.pl
    M regen/mk_PL_charclass.pl
    M uni_keywords.h

  Log Message:
  -----------
  l1_char_class_tab.h: Add bits for binary, octal digits

The motivation behind these extra bits is to allow three functions that
deal with, respectively, binary, octal, and hex data to use the same
paradigm, and hence be collapsible into a single function.


  Commit: 85bd3bd722dd616fb8b94b3828e67d391aa107a2
      
https://github.com/Perl/perl5/commit/85bd3bd722dd616fb8b94b3828e67d391aa107a2
  Author: Karl Williamson <k...@cpan.org>
  Date:   2020-01-07 (Tue, 07 Jan 2020)

  Changed paths:
    M embed.fnc
    M embed.h
    M numeric.c
    M perl.h
    M pod/perldiag.pod
    M proto.h

  Log Message:
  -----------
  Collapse grok_bin, _oct, _hex into one function

These functions are identical in logic in the main loop, the difference
being which digits they accept.  The rest of the code had slight
variations.  This commit unifies the functions.

I presume the reason they were kept separate was because of speed.  I
believe I have solved that sufficiently to warrant unifying them, and
thus lowering the maintenance costs.

The key to making this feasible, in my opinion, was changing to compute
the value of a hex digit without branching, done in a previous commit.
That speeds up the grok_hex routine.  The others already didn't have
branching; this commit adds to them a couple of shifts, masks, and
additions per loop iteration, which shouldn't affect the instruction
pipeline.  More importantly, though, it adds an array lookup per
loop iteration to those two routines, which already existed in the
grok_hex one.  I think these two functions are used much less often than
grok_hex, and this minor amount of extra work is justified by the
maintenance cost improvement.  (A branch has been removed from the
grok_bin function loop in compensation, though I suspect many optimizing
compilers would have already removed it.)

This commit does add a few extra conditionals in set-up and on unlikely
error legs.  These should not be noticeable.

The only other thing I can think of that could affect the speed is that
in places a variable is used instead of a constant it replaces.  There
is one instance of this in the loop, involving a shift count.


  Commit: fa866a699250f16964691c71dc6565da08d30727
      
https://github.com/Perl/perl5/commit/fa866a699250f16964691c71dc6565da08d30727
  Author: Karl Williamson <k...@cpan.org>
  Date:   2020-01-07 (Tue, 07 Jan 2020)

  Changed paths:
    M numeric.c

  Log Message:
  -----------
  grok_bin_oct_hex(): Add branch prediction


  Commit: 521f97ab62fe9d03720eaf8be193f3e127617a4e
      
https://github.com/Perl/perl5/commit/521f97ab62fe9d03720eaf8be193f3e127617a4e
  Author: Karl Williamson <k...@cpan.org>
  Date:   2020-01-07 (Tue, 07 Jan 2020)

  Changed paths:
    M numeric.c

  Log Message:
  -----------
  numeric.c: Fix typos in comments


Compare: https://github.com/Perl/perl5/compare/baa687669220%5E...521f97ab62fe

Reply via email to