Add pidigits.sml, an IntInf intensive benchmark.

The pidigits.sml benchmark is based upon The Computer Language
Benchmarks Game (aka, Shootout) pidigits benchmark (streaming
arbitrary-precision arithmetic).  While the Shootout pidigits
benchmark should display the first n digits of pi, this pidigits.sml
benchmark simply displays the index of the Nth 0-digit in the digits
of pi; this makes the benchmark IntInf intensive with almost no I/O.
Update pidigits.sml benchmark.

Use polymorphic equality of IntInf.int values.
Translation of RSSA ArrayOffset operands.

Translate an RSSA ArrayOffset operand with a non-location base to a
dummy Machine operand.  This should only arise in dead-code; for
example, vector operations on the result of IntInf_toVector applied to
a small IntInf, where the code path is guarded by the IntInf
tag-check.
Directly implement polymorphic equality on IntInf values.

Introduce an SSA function for IntInf equality, which performs an eq
(object-pointer-equality) test, followed by a tag test (if both
arguments are "small" IntInf values and not pointer equal, then they
are not equal), followed by a vector equality (without an eq test).
This corresponds to the implementation of IntInf_equal in
runtime/gc/int-inf.c.

There seems to be no significant compile-time, size, or run-time
impact:

MLton0 -- /home/matthew/devel/mlton/mlton-20130715-1.amd64-linux/build/bin/mlton
MLton1 -- /home/matthew/devel/mlton/builds/build.gf30f236/bin/mlton
MLton2 -- /home/matthew/devel/mlton/mlton.git/build/bin/mlton
run time ratio
benchmark         MLton0 MLton1 MLton2
pidigits            1.00   1.00   0.99
smith-normal-form   1.00   1.00   1.00
size
benchmark          MLton0  MLton1  MLton2
pidigits          164,912 168,322 168,386
smith-normal-form 312,352 317,330 317,362
compile time
benchmark         MLton0 MLton1 MLton2
pidigits            1.93   1.94   1.90
smith-normal-form   2.46   2.45   2.44
run time
benchmark         MLton0 MLton1 MLton2
pidigits           36.28  36.13  36.02
smith-normal-form  34.25  34.21  34.18
Remove IntInf_equal primitive and implementation.
Pass GCState operand to C functions implementing IntInf operations.

The various C functions that implement IntInf operations in
runtime/gc/int-inf.c made explicit use of the global gcState, rather
than taking it as a parameter (as with all other runtime functions).
Furthermore, in SsaToRssa, the IntInf operations are translated to C
functions with Runtime kind, which suggests that they should have a
GCState operand.

There seems to be no significant compile-time, size, or run-time
impact.  A small increase in size is expected, as there is a little
more work at each call site to pass the additional argument.

MLton0 -- /home/matthew/devel/mlton/mlton-20130715-1.amd64-linux/build/bin/mlton
MLton1 -- /home/matthew/devel/mlton/builds/build.gf30f236/bin/mlton
MLton2 -- /home/matthew/devel/mlton/builds/build.ge3a6360/bin/mlton
MLton3 -- /home/matthew/devel/mlton/mlton.git/build/bin/mlton
run time ratio
benchmark         MLton0 MLton1 MLton2 MLton3
pidigits            1.00   1.00   1.00   0.99
smith-normal-form   1.00   1.00   1.00   1.00
size
benchmark          MLton0  MLton1  MLton2  MLton3
pidigits          164,912 168,322 168,290 168,802
smith-normal-form 312,352 317,330 317,266 317,794
compile time
benchmark         MLton0 MLton1 MLton2 MLton3
pidigits            1.90   1.90   1.92   1.89
smith-normal-form   2.47   2.45   2.45   2.43
run time
benchmark         MLton0 MLton1 MLton2 MLton3
pidigits           36.24  36.08  36.11  36.04
smith-normal-form  34.34  34.24  34.16  34.23
Do not import the global gcState in runtime/gc.c.

There are no remaining uses of the global gcState in runtime/gc.
Drop 'inline' keyword on IntInf binary wrapper function.

The other IntInf wrapper functions do not have an 'inline' keyword and
there is really no advantage to inlining the wrapper.

There seems to be no significant compile-time, size, or run-time
impact.  A small decrease in size is expected, as the function is not
inlined at its multiple call-sites.

MLton0 -- /home/matthew/devel/mlton/mlton-20130715-1.amd64-linux/build/bin/mlton
MLton1 -- /home/matthew/devel/mlton/builds/build.gf30f236/bin/mlton
MLton2 -- /home/matthew/devel/mlton/builds/build.ge3a6360/bin/mlton
MLton3 -- /home/matthew/devel/mlton/builds/build.ge0e53cd/bin/mlton
MLton4 -- /home/matthew/devel/mlton/mlton.git/build/bin/mlton
run time ratio
benchmark         MLton0 MLton1 MLton2 MLton3 MLton4
pidigits            1.00   1.00   1.00   1.01   1.00
smith-normal-form   1.00   1.00   1.00   1.00   1.00
size
benchmark          MLton0  MLton1  MLton2  MLton3  MLton4
pidigits          164,912 168,322 168,290 168,802 168,446
smith-normal-form 312,352 317,330 317,266 317,794 317,438
compile time
benchmark         MLton0 MLton1 MLton2 MLton3 MLton4
pidigits            1.91   1.92   1.91   1.93   1.91
smith-normal-form   2.47   2.45   2.45   2.46   2.44
run time
benchmark         MLton0 MLton1 MLton2 MLton3 MLton4
pidigits           36.12  36.09  36.01  36.32  36.16
smith-normal-form  34.39  34.27  34.27  34.26  34.31
Regularize IntInf wrapper functions.

Rename the IntInf binary op, unary op, and shift op wrapper functions.
Introduce IntInf comparison op and string op wrapper functions.
Move function references into a separate compilation unit.

Compile all of the non-wrapper IntInf functions, which simply pass a
GMP function to a wrapper IntInf function, as a separate compilation
unit to be archived in libmlton.a.  When a compiled program is
statically linked to libmlton.a, if no IntInf_* functions are required
to resolve symbols from the compiled program, then the compilation
unit could be dropped during linking, and there would be no residual
run-time dependency on GMP.

Closes MLton/mlton#59.

There seems to be no significant compile-time, size, or run-time
impact:

MLton0 -- /home/matthew/devel/mlton/mlton-20130715-1.amd64-linux/build/bin/mlton
MLton1 -- /home/matthew/devel/mlton/builds/build.gf30f236/bin/mlton
MLton2 -- /home/matthew/devel/mlton/builds/build.ge3a6360/bin/mlton
MLton3 -- /home/matthew/devel/mlton/builds/build.ge0e53cd/bin/mlton
MLton4 -- /home/matthew/devel/mlton/builds/build.gade5f5e/bin/mlton
MLton5 -- /home/matthew/devel/mlton/mlton.git/build/bin/mlton
run time ratio
benchmark         MLton0 MLton1 MLton2 MLton3 MLton4 MLton5
pidigits            1.00   1.00   1.00   1.00   1.00   1.00
smith-normal-form   1.00   1.00   1.00   1.00   1.00   1.00
size
benchmark          MLton0  MLton1  MLton2  MLton3  MLton4  MLton5
pidigits          164,912 168,322 168,290 168,802 168,446 168,510
smith-normal-form 312,352 317,330 317,266 317,794 317,438 317,502
compile time
benchmark         MLton0 MLton1 MLton2 MLton3 MLton4 MLton5
pidigits            1.89   1.95   1.95   1.99   1.90   1.91
smith-normal-form   2.45   2.44   2.45   2.45   2.45   2.43
run time
benchmark         MLton0 MLton1 MLton2 MLton3 MLton4 MLton5
pidigits           36.08  36.11  36.02  36.05  36.10  35.97
smith-normal-form  34.24  34.26  34.28  34.33  34.25  34.19
Update IntInf_strop.

The GMP mpz_get_str function uses digits 0..9a..zA..z for a positive
base and uses digits 0..9A..Za..z for a negative base.  The SML Basis
Library IntInf.fmt function requires 0..9A..F digits for
StringCvt.HEX.  Previously, used a positive base for mpz_get_str and
then converted lower-case to upper-case via a for-loop.  Now, simply
use a negative base for mpz_get_str and need only convert a leading
'-' to a leading '~'.
Update changelog.

Note that IntInf-free programs compile to executables with no residual
dependency on GMP.
Regression tests demonstrating bugs with MLton.IntInf.fromRep.

Add a number of regression tests from MLton/mlton#65 that demonstrate
bugs with MLton.IntInf.fromRep accepting non-canonical integers.

Thanks to @robsimmons for the bug report and initial regression tests.
Implement IntInf.sign with a single (big) comparison.
Latent bugs in conversion of MLton IntInf-s to/from GMP mpz-s.

Fix a couple of latent bugs in conversion of Small IntInfs
(represented as an objptr with the bottom bit set to 1 and the top
bits representing a signed integer) to and from GMP __mpz_struct when
sizeof(objptr) > sizeof(mp_limb_t).
Additional regression test for MLton.IntInf.{rep,fromRep}.
Check IntInf representation invariants in MLton.IntInf.fromRep.

Both SML and GMP rely upon various representation invariants for
IntInf values.  For example, MLton's implementation of SML's
polymorphic equality on IntInf values assumes that if one argument is
a "small" IntInf and the other is a "big" IntInf, then the values are
not equal (implying that the values do not denote the same numeric
value); see commit 4a0163e.  Similarly, GMP assumes that the
most-significant limb of a non-zero mpz_t is non-zero (implying that
the _mp_size can be used to short-circuit a comparison and that all
limbs contribute to the string representation); see
regression/int-inf.rep3.sml and regression/int-inf.rep4.sml from
commit c0600c9.

When creating an IntInf via MLton.IntInf.fromRep, check that the
representation invariants are satisfied.  For a Big input, the checks
are essentially:
 * length >= 2  (* sign limb + magnitude limb(s) *)
 * v[0] <= 0w1  (* sign limb is 0w0 (positive) or 0w1 (negative) *)
 * v[l-1] > 0w0  (* most-significant limb is non-zero *)
 * value exceeds range of a "small" IntInf
For a Small input, the check is essentially:
 * value preserved by tagging and untagging

Thanks to @robsimmons for the bug report, initial regression tests,
and initial check logic.

Closes MLton/mlton#65.
Update changelog.

Fixed bug in MLton.IntInf.fromRep that could yield values that violate
the IntInf representation invariants.
Merge pull request #84 from MatthewFluet/int-inf-ops

IntInf implementation updates.

Various updates to IntInf implementation. Highlights:
 * Reorganized runtime support for IntInf operations so that
   programs that do not use IntInf compile to executables with no
   residual dependency on GMP.
 * Fixed bug in MLton.IntInf.fromRep that could yield values that
   violate the IntInf representation invariants.