This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
David Mitchell [Mon, 23 Oct 2017 11:57:57 +0000 (12:57 +0100)]
[MERGE] various bench.pl enhancements and fixes
Various enhancements and fixups to bench.pl. The most notable ones are:
* Add 'compile' benchmark field
If a benchmark has this flag set, measure the compile time of the
construct rather than its execution time, by wrapping the code in
eval q{ sub { ... } }
* Add 'pre' and 'post' benchmark fields
These allow actions to be performed each time round the loop, just before
and after the benchmarked code, but without contributing to the timings.
For example to benchmark appending to a string, you need to reset the
string to a known state before each iteration, otherwise the string gets
bigger and bigger with each iteration:
code => '$s = ""; $s .= "foo"',
but now you're measuring both the concat and an assign. To measure just
the concat, you can now do:
pre => '$s = ""',
code => '$s .= "foo"',
Note the contrast with 'setup', which is only executed once, outside the
loop.
* Make 'desc' default to 'code'
Any entries in the benchmarks file which don't have a 'desc' description
field will have the description set to the string for 'code'
* Allow negative column indices
e.g. --norm=-2 will make the second-to-rightmost column the 100% one
* Miscellaneous:
Make -v an alias for --verbose
--compact: display description too
Add checks for bad benchmark files
Display large values as 'Inf'
Allow variable-width data columns
--autolabel: avoid degenerate cases
Fix race condition in test
List the valid perls as part of an 'unrecognised perl' error message
David Mitchell [Mon, 23 Oct 2017 11:46:04 +0000 (12:46 +0100)]
benchmarks.t: update to handle field changes
desc and setup are now optional; pre, post and compile have been added.
David Mitchell [Mon, 23 Oct 2017 10:29:18 +0000 (11:29 +0100)]
bench.pl: add 'compile' benchmark field
If a benchmark has this flag set, measure the compile time of the
construct rather than its execution time, by wrapping the code in
eval q{ sub { ... } }
David Mitchell [Sat, 21 Oct 2017 22:53:03 +0000 (23:53 +0100)]
bench.pl: add 'pre' and 'post' benchmark fields
These allow actions to be performed each time round the loop, just before
and after the benchmarked code, but without contributing to the timings.
For example to benchmark appending to a string, you need to reset the
string to a known state before each iteration, otherwise the string gets
bigger and bigger with each iteration:
code => '$s = ""; $s .= "foo"',
but now you're measuring both the concat and an assign. To measure just
the concat, you can now do:
pre => '$s = ""',
code => '$s .= "foo"',
Note the contrast with 'setup', which is only executed once, outside the
loop.
David Mitchell [Sat, 21 Oct 2017 15:44:58 +0000 (16:44 +0100)]
bench.pl: make 'desc' default to 'code'
Any entries in the benchmarks file which don't have a 'desc' description
fields will have the description set to the string for 'code'
David Mitchell [Sat, 21 Oct 2017 14:53:05 +0000 (15:53 +0100)]
bench.pl: add checks for bad benchmark files
When reading in a --benchmark file, do some basic sanity checks on the
values read in:
* an even number of name => {} pairs
* a valid test name
* valid hash keys
David Mitchell [Sat, 21 Oct 2017 14:19:28 +0000 (15:19 +0100)]
bench.pl: display large values as 'Inf'
When calculating percentages, you might end up with something like
1 / 0.0000001
which really means that the new perl had one cache miss (say) and the old
perl had zero misses, but due to measurement noise, the 0 wasn't measured
as quite 0.
So if the value is more than a million, display as 'Inf' instead.
David Mitchell [Sat, 21 Oct 2017 14:13:35 +0000 (15:13 +0100)]
bench.pl: allow variable-width data columns
Rather than using a fixed(ish) format width like "%6.2f" (which was only
increased based on the width of the label heading each column), calculate
separately for each column, the minimum width based on both the label and
all the data to be displayed in that column.
David Mitchell [Sat, 21 Oct 2017 10:05:39 +0000 (11:05 +0100)]
bench.pl: factor out some common code
put the code which prints a single data cell into a separate function,
grind_format_cell()
David Mitchell [Fri, 20 Oct 2017 12:30:27 +0000 (13:30 +0100)]
bench.pl: make -v an alias for --verbose
I'm too lazy to type the whole word every time.
David Mitchell [Fri, 20 Oct 2017 12:06:27 +0000 (13:06 +0100)]
bench.pl --autolabel: avoid degenerate cases
If there was only one executable, it was creating the label ''; use '0'
instead.
Also, if the auto-generated labels are integers, prefix them with 'p'
so that things like --norm=2 aren't ambiguous (column number versus label)
David Mitchell [Fri, 20 Oct 2017 11:52:17 +0000 (12:52 +0100)]
bench.pl: fix race condition in test
The test that forces cachegrind to give an error by providing an invalid
arg, tests that bench.pl complains about the bad output from cachegrind.
But due to the way bench.pl's main event loop works, its possible for the
process to be reaped and for bench.pl to complain about its exit status
*before* any error message is read back from the pipe.
So test for both types of possible error message.
See
Subject: Intermittent failure in bench.t
http://nntp.perl.org/group/perl.perl5.porters/245218
David Mitchell [Fri, 20 Oct 2017 11:35:18 +0000 (12:35 +0100)]
bench.pl --compact: display description too
As well as displaying the test name on each line, e.g.
call::sub::empty
display the description too, e.g.
call::sub::empty function call with no args or body
David Mitchell [Fri, 20 Oct 2017 11:21:01 +0000 (12:21 +0100)]
bench.pl: allow negative column indices
e.g. --norm=-2 will make the second-to-rightmost column the 100% one
Also fix a slight bug in the existing positive (0..N-1) column selection
code: it didn't match against more than one digit, so for example
--norm=10 didn't work.
David Mitchell [Fri, 20 Oct 2017 11:01:14 +0000 (12:01 +0100)]
bench.pl: list valid in 'unrecognised perl' err
For something like --norm=foo where foo isn't a valid name of a perl
executable, list the valiud names as part of the error message
Aaron Crane [Mon, 23 Oct 2017 10:43:23 +0000 (11:43 +0100)]
metaconfig: ignore "index", "rindex"
This permits deletion of our modified d_strchr.U metaconfig unit.
Aaron Crane [Mon, 23 Oct 2017 10:34:06 +0000 (11:34 +0100)]
Configure: rebuild from latest units
This is a whitespace-only change.
Aaron Crane [Mon, 23 Oct 2017 10:25:06 +0000 (11:25 +0100)]
New .metaconf-exclusions.txt file
This file lists symbols that metaconfig should ignore when calculating
what units Perl needs.
Lukas Mai [Sun, 22 Oct 2017 20:55:14 +0000 (22:55 +0200)]
document semantics of %+ in perlvar in addition to perlre
Lukas Mai [Sun, 22 Oct 2017 15:03:55 +0000 (17:03 +0200)]
get rid of "implicit fallthrough" warnings with gcc 7
Lukas Mai [Sun, 22 Oct 2017 13:56:11 +0000 (15:56 +0200)]
avoid "implicit fallthrough" warning under ithreads
Aaron Crane [Sun, 22 Oct 2017 12:33:31 +0000 (13:33 +0100)]
Define I_STDARG cpp symbol for XS backcompat
While I'm not eager in general to go round defining symbols like this
for all the standard headers, I_STDARG is a little unusual in that
several older XS modules also use it to decide whether to call the
va_args() macro using its pre-standardisation form (since C89 added an
additional argument to it).
Affected modules include DBI, Tk, and DBD::Unify.
James E Keenan [Sun, 22 Oct 2017 11:48:43 +0000 (07:48 -0400)]
Remove superfluous FALLTHROUGH guards.
Per code review by mauke++ on #p5p.
James E Keenan [Sun, 22 Oct 2017 01:27:18 +0000 (21:27 -0400)]
Prevent warnings when building with gcc-7.2.
Guard against: "warning: this statement may fall through" warnings.
Aaron Crane [Sun, 22 Oct 2017 11:44:55 +0000 (12:44 +0100)]
Define an _() macro for XS backcompat
Removing this macro (as part of c89ification) broke DBI; see RT#132347.
Lukas Mai [Sun, 22 Oct 2017 11:43:38 +0000 (13:43 +0200)]
ODBM_File: avoid "flags set but not used" warning
Aaron Crane [Thu, 19 Oct 2017 09:48:30 +0000 (10:48 +0100)]
t/porting/pending-author.t: report skip reasons more carefully
Karl Williamson [Sat, 21 Oct 2017 23:25:28 +0000 (17:25 -0600)]
regcomp.c: Fix typo in comment
Karl Williamson [Sat, 21 Oct 2017 23:24:11 +0000 (17:24 -0600)]
regcomp.c: Add assertion
If this value is negative, something is wrong.
Dagfinn Ilmari Mannsåker [Sun, 15 Oct 2017 07:33:22 +0000 (09:33 +0200)]
Fix sv_vcatpvfn %s with precision on non-NUL-terminated strings
The precision parameter to %s can be used to print non-NUL-terminated
strings, so use my_strnlen() to limit the length checking to the
specified length.
Dagfinn Ilmari Mannsåker [Sat, 21 Oct 2017 19:05:17 +0000 (20:05 +0100)]
Provide fallback strnlen implementation
Dagfinn Ilmari Mannsåker [Sat, 21 Oct 2017 19:04:37 +0000 (20:04 +0100)]
Probe for strnlen on VMS
H.Merijn Brand [Sat, 21 Oct 2017 17:54:17 +0000 (19:54 +0200)]
Regenerate Glossary
Karl Williamson [Sat, 21 Oct 2017 17:12:20 +0000 (11:12 -0600)]
Fix Perl_langinfo() non-threaded bug
Perl_langinfo() is supposed to return a pointer to internal storage that
is supposed to remain valid until the next call to it. That should come
automatically on single-threaded perls. The previous version took
advantage of this to avoid copying the result to a buffer, and just
called plain nl_langinfo(). However, it turns out that some systems
destroy the internal space also when a setlocale() is done. That means
the result must be copied in all instances.
Aaron Crane [Sat, 21 Oct 2017 16:05:11 +0000 (17:05 +0100)]
[MERGE] Rely on a C89 compiler
We have claimed to need a C89 compiler for building since at least October 1998
(see commit
5effff0b18af479fcc5e67b74bc41c4bc53342f6). This branch finally
makes good on that promise: we no longer probe for required features of C89
(whether language features, cpp syntax, the presence or behaviour of library
routines, or the availability or contents of header files).
This permits substantial simplification of our header files, as well as
a pleasing reduction in the size of the Configure script and the number of
compilation probes it does.
That said, this set of changes is a little conservative. Notably, I have not
attempted to unpick our maze of malloc/free/realloc macros to rely on things
like free(NULL); nor have I attempted to rely on adequate locale support (since
AIUI the libc on Android in particular claims to have locale support but
doesn't). It's also possible that I've simply missed some opportunities to
simplify the code and/or Configure script, but I hope that we can collectively
fix those as and when we discover them.
These changes have been tested on the following platforms: Mac OS (gcc, clang),
Linux (gcc), FreeBSD (gcc), Win32 (MSVC), HP/UX (HP C), and AIX (xlc).
This work was undertaken at the Perl 5 Hackathon 2017. I thank the Hackathon's
sponsors for making it possible for me to attend; I would not have been able to
do this otherwise.
Aaron Crane [Wed, 18 Oct 2017 18:34:45 +0000 (19:34 +0100)]
perl.h: explicitly declare "environ" in more places
Some systems declare environ in some situations; others never do. (BSD
systems seem to fall into the latter category, for example.)
Previously, we declared environ in the absence of the DONT_DECLARE_STD cpp
symbol, but that symbol has now been removed (on the grounds that redeclaring
system functions is typically unhelpful). But it probably shouldn't have been
used to avoid declaring environ, because very few systems actually provide
declarations for that variable.
This change adds the environ declaration almost everywhere, on the grounds
that even where the system headers do declare it, an additional declaration
won't in fact hurt.
Aaron Crane [Tue, 17 Oct 2017 16:36:33 +0000 (17:36 +0100)]
pod/perlhacktips.pod: remove some outdated portability notes
Aaron Crane [Sat, 14 Oct 2017 14:26:48 +0000 (16:26 +0200)]
Rely on C89 <string.h>
This requires a corresponding change in the metaconfig units.
Aaron Crane [Sat, 14 Oct 2017 14:10:31 +0000 (16:10 +0200)]
Don't attempt to use non-standard <memory.h>
It's only needed on systems without C89 <string.h>, which we rely on anyway.
Aaron Crane [Sat, 14 Oct 2017 13:47:10 +0000 (15:47 +0200)]
Rely on C89 <assert.h>
Aaron Crane [Sat, 14 Oct 2017 13:20:33 +0000 (15:20 +0200)]
Rely on C89 <math.h>
This requires a corresponding change in the metaconfig units.
Aaron Crane [Sat, 14 Oct 2017 13:11:22 +0000 (15:11 +0200)]
Never attempt to redeclare standard functions
Aaron Crane [Sat, 14 Oct 2017 12:43:38 +0000 (14:43 +0200)]
Don't attempt to define or use STANDARD_C
We rely on a C89 implementation anyway.
Aaron Crane [Sat, 14 Oct 2017 12:39:07 +0000 (14:39 +0200)]
Rely on C89 NULL
Aaron Crane [Sat, 14 Oct 2017 12:03:01 +0000 (14:03 +0200)]
Don't declare C89 realloc()
The declaration is actually for PerlMem_realloc(), which is a macro for
either realloc() or an indirection through the interpreter struct, depending
on configuration — see iperlsys.h. If it's the indrection, this declaration
will be a syntax error, so it must be in fact plain old realloc().
The declaration is guarded with HAS_REALLOC_PROTOTYPE, which isn't actually
defined or consulted anywhere else in the codebase.
Since we require C89, there's no need for this — we #include <stdlib.h>, and
therefore can assume realloc() exists.
Aaron Crane [Sat, 14 Oct 2017 09:57:51 +0000 (11:57 +0200)]
Rely on C89 strerror()
This requires a corresponding change to the metaconfig units.
Aaron Crane [Sat, 14 Oct 2017 09:15:04 +0000 (11:15 +0200)]
util.h: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 09:09:26 +0000 (11:09 +0200)]
util.c: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 08:56:37 +0000 (10:56 +0200)]
thread.h: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 08:52:05 +0000 (10:52 +0200)]
sv.c: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 08:48:10 +0000 (10:48 +0200)]
regen/reentr.pl: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 08:42:16 +0000 (10:42 +0200)]
pp_sys.c: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 08:07:18 +0000 (10:07 +0200)]
pp_pack.c: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 07:55:26 +0000 (09:55 +0200)]
pp_hot.c: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 07:53:41 +0000 (09:53 +0200)]
pp_ctl.c: simplify cpp conditionals
Aaron Crane [Sat, 14 Oct 2017 07:51:50 +0000 (09:51 +0200)]
pp.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 16:16:16 +0000 (18:16 +0200)]
perlio.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 16:11:58 +0000 (18:11 +0200)]
perl.h: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 15:42:54 +0000 (17:42 +0200)]
Drop support for the hp9000s500 cpp symbol
This includes changed metaconfig units which drop support in the same way.
https://en.wikipedia.org/wiki/HP_9000 :
> The HP 9000 brand was introduced in 1984 to encompass several existing
> technical workstation models previously launched in the early 1980s. […]
> The Series 500s were based on the HP FOCUS microprocessor. […] The 520 was
> a complete workstation with built-in keyboard, display, 5.25-inch floppy
> disk, and optional thermal printer and 5 MB hard disk. […] The processors
> in the original Series 500s ran at 20 MHz, and could reach a benchmark
> speed of 1 MIPS.
https://en.wikipedia.org/wiki/HP_FOCUS :
> The Hewlett-Packard FOCUS microprocessor, launched in 1982, was the
> first commercial, single chip, fully 32-bit microprocessor available on
> the market. […] The FOCUS […] was a stack architecture, with over 220
> instructions (some 32 bits wide, some 16 bits wide), a segmented memory
> model, and no general purpose programmer-visible registers.
Aaron Crane [Fri, 13 Oct 2017 15:24:42 +0000 (17:24 +0200)]
Delete useless references to DG/UX
Aaron Crane [Fri, 13 Oct 2017 15:17:15 +0000 (17:17 +0200)]
perl.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 15:07:13 +0000 (17:07 +0200)]
opcode.pl: simplify cpp conditionals
This affects the generated opcode.h.
Aaron Crane [Fri, 13 Oct 2017 15:03:32 +0000 (17:03 +0200)]
numeric.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 15:02:25 +0000 (17:02 +0200)]
mg.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 14:55:55 +0000 (16:55 +0200)]
malloc.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 14:54:44 +0000 (16:54 +0200)]
malloc.c: don't redefine START_EXTERN_C from perl.h
Aaron Crane [Fri, 13 Oct 2017 14:44:08 +0000 (16:44 +0200)]
handy.h: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 14:40:59 +0000 (16:40 +0200)]
dosish.h: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 14:34:23 +0000 (16:34 +0200)]
EXTERN.h: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 14:30:05 +0000 (16:30 +0200)]
doio.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 14:20:21 +0000 (16:20 +0200)]
vms/vmsish.h: move a function declaration from doio.c
Aaron Crane [Fri, 13 Oct 2017 13:59:59 +0000 (15:59 +0200)]
caretx.c: simplify cpp conditionals
Aaron Crane [Fri, 13 Oct 2017 13:56:07 +0000 (15:56 +0200)]
XSUB.h: simplify cpp conditions using C89 "#elif"
Aaron Crane [Sat, 14 Oct 2017 07:45:18 +0000 (09:45 +0200)]
Rely on contents of C89 <limits.h>
Aaron Crane [Fri, 13 Oct 2017 13:34:03 +0000 (15:34 +0200)]
Simplify perl.h floating-point limits defines
- Always include <float.h> and <limits.h>
- Assume that the DBL_* constants are always available in <float.h> (though
we still check for each LDBL_* constant individually)
- Drop support for the undocumented OVR_DBL_DIG and OVR_LDBL_DIG
preprocessor symbols
- Use cpp "#elif"
Aaron Crane [Fri, 13 Oct 2017 13:14:20 +0000 (15:14 +0200)]
Don't try to use <values.h>
All the information it contains can be gleaned more readily from C89
<limits.h> and <float.h>.
Aaron Crane [Fri, 13 Oct 2017 11:54:42 +0000 (13:54 +0200)]
Rely on C89 <float.h> defining DBL_DIG
I would like to be able to assume that we have long doubles, and therefore
that LDBL_DIG and friends are all defined too. But it seems that we may
still support some platforms which are otherwise C89, but don't have even
trivial long-double support; in particular, HP/UX 10 apparently uses a
struct of four uint32_t values as long double, but doesn't support other
bits, and confuses the Configure probe that looks for quadmath.
Aaron Crane [Fri, 13 Oct 2017 10:49:41 +0000 (12:49 +0200)]
Rely on C89 <float.h>
This requires newer metaconfig units that also rely on C89 <float.h>.
Aaron Crane [Fri, 13 Oct 2017 10:38:59 +0000 (12:38 +0200)]
Rely on C89 <limits.h>
This requires newer metaconfig units that also rely on C89 <limits.h>.
Aaron Crane [Fri, 13 Oct 2017 09:18:10 +0000 (11:18 +0200)]
Rely on C89 <time.h>
The Configure script here was built from a metaconfig unit that also assumes
<time.h> exists.
Aaron Crane [Fri, 13 Oct 2017 08:35:44 +0000 (10:35 +0200)]
Rely on C89 strchr() and strrchr()
This needs a metaconfig change that defangs the standard unit for finding
strchr(), because that unit sees the uses of "index" and "rindex" (in files
like keywords.c and opcode.h) as indicators that it must be used instead.
Aaron Crane [Fri, 13 Oct 2017 08:03:59 +0000 (10:03 +0200)]
Rely on C89 sprintf() return value semantics
Aaron Crane [Tue, 17 Oct 2017 16:30:18 +0000 (17:30 +0100)]
Use snprintf() in favour of sprintf()
Aaron Crane [Fri, 13 Oct 2017 07:25:14 +0000 (09:25 +0200)]
Rely on C89 <stddef.h>
Aaron Crane [Fri, 13 Oct 2017 07:16:17 +0000 (09:16 +0200)]
Rely on C89 <stdlib.h>
The Configure changes here were generated using a version of metaconfig
that copies U/modified/i_stdlib.U from dist/U/vaproto.U, and changes it to
unconditionally define the i_stdlib Configure variable. That variable is
used by a large number of other Configure units, so it's not actually
practical to try and remove the relevant unit entirely.
Aaron Crane [Thu, 12 Oct 2017 22:55:41 +0000 (00:55 +0200)]
Rely on C89 <stdarg.h>
Aaron Crane [Thu, 12 Oct 2017 16:50:15 +0000 (18:50 +0200)]
Rely on C89 prototypes
The Configure changes here were generated using a version of metaconfig
that modifies the prototype.U and Protochk.U units to assume that C89
prototypes work.
Aaron Crane [Sat, 14 Oct 2017 15:01:19 +0000 (17:01 +0200)]
Don't pretend to determine whether ansi2knr is needed
Aaron Crane [Thu, 12 Oct 2017 16:17:02 +0000 (18:17 +0200)]
Rely on C89 variadic prototypes
The Configure changes here were generated using a version of metaconfig
that copies U/modified/vaproto.U from dist/U/vaproto.U, and changes it to
refrain from promising to define a _V symbol (which would otherwise cause
the relevant probe to included in Configure).
Aaron Crane [Thu, 12 Oct 2017 16:05:57 +0000 (18:05 +0200)]
Configure: assume C89 headers in need_va_copy probe
This matches a recent change to metaconfig.
Aaron Crane [Thu, 12 Oct 2017 15:56:12 +0000 (17:56 +0200)]
Rely on C89 vprintf()
Aaron Crane [Thu, 12 Oct 2017 15:49:34 +0000 (17:49 +0200)]
Rely on C89 sprintf() return type
Aaron Crane [Thu, 12 Oct 2017 15:44:29 +0000 (17:44 +0200)]
Configure: assume C89 headers in d_c99_variadic_macros probe
This matches a recent change to metaconfig.
Aaron Crane [Thu, 12 Oct 2017 15:35:52 +0000 (17:35 +0200)]
Rely on C89 snprintf()
Aaron Crane [Thu, 12 Oct 2017 15:22:43 +0000 (17:22 +0200)]
Rely on C89 vsnprintf()
We assume it has the standard behaviour that, if the buffer is too short, it
returns the desired buffer length.
Aaron Crane [Thu, 12 Oct 2017 14:26:56 +0000 (16:26 +0200)]
Don't use VOL internally, because "volatile" works just fine
However, we do preserve it outside PERL_CORE for the use of XS authors.
Aaron Crane [Thu, 12 Oct 2017 13:46:20 +0000 (15:46 +0200)]
Assume C89 "volatile" keyword
The Configure changes here were generated using a version of metaconfig
that makes U/perl/perlxv.U assume that the keyword exists, and prevents
U/modified/d_volatile.U from promising to define a "volatile" keyword;
otherwise, those units would bring in the relevant Configure probe anyway.
Aaron Crane [Thu, 12 Oct 2017 13:18:42 +0000 (15:18 +0200)]
Assume we have C89 memchr()
Aaron Crane [Thu, 12 Oct 2017 12:31:56 +0000 (14:31 +0200)]
Assume we have sane C89 memcmp()
"Sane" means that it works correctly on bytes with their high bit set, as
C89 also requires.
We therefore no longer need to probe for and/or use BSD bcmp().
Aaron Crane [Thu, 12 Oct 2017 13:04:00 +0000 (15:04 +0200)]
Drop support for PowerUX / Power MAX OS
It is almost impossible to find any information about this platform on the
internet, which strongly suggests that it's as dead as dead can be.