Working on supporting 64-bit numerics on 32-bit targets. This is
a checkpoint, where we have NumCnv structure in place and the
TransPrim structure is looking for 64-bit operators, but we do not
have any 64-bit primops in use yet.

Renaming the primops in Inline. This change removes most (but not all) 32-bit
dependencies in the Basis Library implementation. See dev-notes/primop-list.md
for details about the new naming conventions.

Backing out the primop renaming, since I'm having some trouble getting
to a fixed point. We build a version from this point (which has all
of the Primop.primop changes) and then try to get the renaming working
for the 110.87.

Renamed DTAG_raw32 to DTAG_raw, since the semantics on 64-bit systems will be
to require word-size aligned raw data. Also renamed ML_AllocRaw32 to ML_AllocRaw
and ML_ShrinkRaw32 to ML_ShrinkRaw for similar reasons.

Some minor primop cleanup. Changed the type of Primop.ROUND and Primop.REAL
to take bitwidths, instead of numkinds, since the kinds are always the same.
Renamed ABS to FABS, since it is only used on floating-point numbers.
Renamed the CPS primitive operator ROUND to REAL_TO_INT and the operator
REAL to INT_TO_REAL.

Improvements to the core 64-bit int and word modules in system/smlnj/init.
Replaced Int64.+, Int64.-, Word64.+ with versions from "Hacker's Delight"
that use fewer conditional branches. Also replaced the relational
operators (<, <=, etc) with more direct implementations.

Starting to migrate the CPS IR toward the ASDL version. Changed the
names of the CPS.P.arith and CPS.P.cmpop constructors to be upper-case
alpha IDs (many of them were symbolic identifiers). Also split out the
various utility functions into the new CPSUtil module (CPS/cps/cps-util.sml).
Lastly, moved the literals.sml file from FLINT/main to CPS/main (where
it belongs).

Fix for bug #216 (run-time system fatal error with large top-level value)
Also changed the way that available space is tracked and handled in the
literal builder. Instead of trying to track the amount of available space
in a local variable, we recompute it for each new instruction.

Reimplementation of the array/vector-slice modules to use a (base, start, length)
representation (as does Substring in system/smlnj/init/substring.sml). Also
fixed a bug in the findi functions, where the index being passed to the predicate
function was not adjusted to be slice-relative.

Fix for bug #191 (Compiler crash when handling large reals). We now issue a warning
for real literals that will round to zero and an error for real literals that are
too large to represent. There still needs to be done some work to support sub-normal
literal values (these are currently rounded to 0).

Preparing the way for a new implementation of the build-literals mechanism.
Move the version-1 interpreter into old-literals.c. Also added Int64_t and
Unsigned64_t typedefs.
See dev-notes/new-literals.md for a description of the new-literals bytecode.

bug fix for literal range checking. We need to do *all* overload resolution
before checking ranges, since we might have literals whose type variable has
been instantiated to another overloaded type varible that has not yet be resolved.

Working towards 64-bit support. Added Target module, which specifies the
properties of the target (e.g., size in bits of default int type). Reworked
generation of InlineT structure to be target specific. Some cleanup for
primop bindings and FLINT's primtycs.

Fix bug #183 (status code returned by sml REPL). This restores the
110.79 behavior of having "sml foo.sml" exit with a non-zero status
when there is a type-checking error in foo.sml. It also cleans up
the error messages associated with "use" when there is a syntax
error.

Working on 64-bit support. Trying to make the backend more cleanly
parameterized by the target machine's word size. Changed the
DefaultMachSpec structure to be a functor that is parameterized by
the ML and machine word sizes.

Changed the way that we test for allocation-space addresses in minor GCs.
Instead of using the BIBOP, we now do a pointer range test. On 32-bit
systems, this change results in a small (~0.13%) performance boost, but
we expect a bigger impact on 64-bit hardware, where the cost of BIBOP
probes will be higher and there are more registers available to hold
the nursery bounds.

Changes to enable Succssor ML syntax support. We now have two parser+lexer
stacks and we select the parser based on the succML flag. We have introduced
a function (Control.setSuccML) to switch modes, which fixes bug #153 (Enabling
Successor ML features is delayed)

Fixed bug #147 (Hexadecimal escapes in strings are not supported). We previously
did not support Unicode escapes in string literals. We now do so, with non-ascii
codepoints being mapped to the UTF-8 encoding.

Removed redundant implementations of various top-level operations by
consolidating them in base/system/smlnj/init/pervasive.sml. This
change also fixes a bug in that the top-level version of round was
incorrect.

"Unfixing" part of change made on 2009.04.28: removing parenthesis from
a SeqExp that contains a nested FixAppExp can make the result ambiguous.
The result will "round trip", but changes how the result will be
compiled. Added special case to fix this specific problem.

Fixed some "bugs" in the PPAst pretty printer that were making "round
trips" fail ((pp o parse o pp o parse) s != (pp o parse) s).
Specifically:
- The "fn" was not being prepended to FnExp's.
- Removed parenthesis for sequence expressions of one
subexpression. (Iteratively sending this back to the parser kept
adding nested parenthesis.)
- A ">" was being appended after selector expressions ("#x" would
pretty print as "#x>").
- Fixed spelling error (was "stuct") and added whitespace between the
structure body and the "end" keyword for BaseStr's.
- Changed ":" to "=" for Strb's (note that constraints were not and
are still not handled).

win32-io.c: Fix ^C handling on Windows - SIGINT returns from ReadConsole, and we need to have something in the input buffer or the interpreter will exit.
win32-raise-syserr.c: errno is now an extern variable in new Windows SDKs, so we rename around it.

fixed matchInstTypes case for translate -- i.e., matchInstTypes should follow through abstract types unlike during signature matching, turned off plam typechecking and kind checking to get to the realconst (matchInstTypes) bug

Added comment to C_CALLS signature documenting the responsibility of the
client to handle sign extension. Also added a "naturalIntSz" value
that the client can use to determine the integer promotion size.
Updated the implementations to match the changed signature and removed
sign extension from the x86 implementation.

implemented SUPERCAST in FLINT;
(pushed it through as far as it seemed necessary -- but more TODO
corners are probably lurking...);
used SUPERCAST to implement link_plugin;
simple test case compiles and works; everything beyond that is untested

Made changes to getpair.
Not all available pairs were checked by the find routine.
Further, some architectures have a requirement that pairs
be even registers and others don't.
When a pair is found, by setting the next point to search
from using:
next = found + 1
a client could call this routine again if the even/odd
requirement is not met the first time.
Lal