Description of earlyrew.scm

Purpose:
--------

EARLYREW is a primitive rewrite stage that occurs before CPS
conversion.  Branches introduced here are visible at the CPS
conversion stage, and may cause new procedures to be created.

Rewrites unary operations in terms of binary operations.  For binary
operations it checks for the type and choses whether to use generic,
fixnum, or machine operator (using %machine-fixnum?  %small-fixnum?)
or it does an optimization.

It also rewrites STRING-ALLOCATE, FLOATING-VECTOR-CONS and
VECTOR-CONS. (It is done this way because of the current rtl
generator.)


Operators Introduced:
---------------------
%*
%+
%-
%/
%<
%=
%>
%floating-vector-cons
%machine-fixnum? 
%quotient
%remainder
%small-fixnum
%string-allocate
%vector-allocate
%vector-cons

Restrictions on Input:
----------------------
Special forms excluded: 
  ACCESS, DEFINE, DELAY, IN-PACKAGE, OR, SET!, THE-ENVIRONMENT
  UNASSIGNED?

Special forms introduced:
-------------------------
  none

Magic Cookies handled specially:
-------------------------------

The procedure DEFINE-REWRITE/EARLY is used to specify rewriting
procedures.  At the current time, the following operations are
rewritten:
   &*, &+, &-, &/, &<, &=, &>, -1+, 1+, FLOATING-VECTOR-CONS, FLONUM-ABS,
   FLONUM-NEGATE, FLONUM-NEGATIVE?, FLONUM-POSITIVE?, FLONUM-ZERO?,
   GENERAL-CAR-CDR, MINUS-ONE-PLUS-FIXNUM, NEGATIVE-FIXNUM?, NEGATIVE?,
   ONE-PLUS-FIXNUM, POSITIVE-FIXNUM?, POSITIVE?, QUOTIENT, REMAINDER,
   STRING-ALLOCATE, VECTOR-CONS, ZERO-FIXNUM?, ZERO?


Guarantees on Output:
---------------------
 none

