A '*' denotes a public release of the Scc compiler.

History:
 06-??-98 H.Dietz	Original Coding
 ...
 07-28-98 H.Dietz	Web version
 ...
 02-17-99 H.Dietz	Whatever changes Hank made up until this version.
 03-02-99 H.Dietz	Whatever changes Hank made since 02-17-99.
 03-16-99 R.Fisher	Added Examples directory and moved SWARC code there.
			Added "Notes" file.
			Added "junk?" directory and moved "err.h" there.

			Added warning messages indicating which binop*
			  function was called to binop.c.

			Issue bug report for pcmpeqq rather than write it out
			  as asm code.

			Added commented debugging code to cgen.c to try to show
			  where the cmpeqq came from when compiling one of the
			  examples.

			Major changes to "Makefile" including new targets to
			  ease installation and removal, definitions of
			  directories and executables to use, and notes
			  explaining these things.

			Pulled definitions of CPP and GCC from main.c to
			  Makefile to ease installation.
			Changed inclusion of header file "Sc.h" to inclusion of
			  the file defined by SCHFILE in Makefile to ease
			  multi-user installation.

 03-21-99 R.Fisher	Added "Notes" file?
			Added dummy "3dnow.h" and "xmmx.h" files.
			Added "msgs.c" and "msgs.h" and moved error(), warn(),
			  and related funcs and vars from "main.c".  "msgs.h"
			  included in main.c.
			Added "cgen.h" to hold prototype info for "cgen.c"
			  files.  Now included in sched.c.
			Moved function meta_cpp() from ir.c to junk?/unused.c,
			  and header info for it to junk?/unused.h.

			Added comments about target-specific code in various
			  files.
			Added large amounts of commentary related to functions
			  which reside in other files.  It is intended to help
			  me follow code until I have a feel for where things
			  are at.  All these comments take the form:
			  Note: function() in source.c.  However, they are not
			  always on separate lines, so they may be difficult to
			  remove.

			Stripped debugging code that I had commented out from
			  various files.
			Stripped warning messages indicating which binop*
			  function was called from binop.c.

			The cpooldump in main.c now only done for targets which
			  support MMX.

			Changed target-specific header inclusion code to only
			  include the necessary headers.  These are assumed to
			  reside in INCDIR.  The value of INCDIR is hard-coded
			  into Scc.  This replaces SCHFILE in main.c and
			  Makefile.
			Changed the values of the CPU_* definitions in swarc.h,
			  and added CPU_MMX to indicate that the CPU supports
			  MMX.  ORed CPU_MMX together with target definitions
			  which support MMX.

			"make (dist)clean" also cd's into the Examples subdir
			  and runs "make (dist)clean".

			Removed the libmmx distribution from the Scc
			  distribution.  I'll leave it out until I'm ready to
			  correctly integrate it.  Maybe never.

 03-22-99 R.Fisher	Added IR debugging dump between basic block handling
			  as an option (-ir).  Source code for this in showir.c.
			"make (un)install" (un)installs all target-specific
			  header files to (from) INCDIR.
			Extern decls for "optir" and "p_ir()" added to swarc.h.
 03-23-99 R.Fisher	Added (this) History file.
			Made IR dump order optional.
			Changed -ir to -ird and -irr options.
			Changed format of information in IR dump.
			Created showir.h with prototypes and def's for IR dump,
			  included in main.c and swarc.g.
			Remove ToDo and Notes files from top-level directory.
 04-06-99 R.Fisher	Added Figures directory and source file .fig files.
 04-07-99a R.Fisher	Renamed junk? directory to Unused.
			Moved mmx_(f)typsuf and mmx_lab to Unused directory.
			Moved cpoolname, cpoolenter, and cpooldump to cpool.c.
			Moved show_suf2, show_suf, symname, and ordered to
			  sched.c.
			Added a Makefile in the Figures directory.
 04-07-99b R.Fisher	Includes the last set of hand-tweaked figures.
			Moved Ctab() and related vars from cgen.c to output.c.
			Moved loadop(), loadpadop(), storeop(), mmx_ctype() and
			  mmx_argtype() from cgen.c to frag.c.
			Moved deadscope from sched.c to frag.c.
			Removed tmp.c
			Added cpool.fig and backend-crs.fig to list of figures
			  to be built.
 04-08-99 R.Fisher	Fixed "optcpu && vs. optcpu &" bug in openoutputs().
			Moved ordered() from sched.c to oputils.c.
			Moved mmx_bits() and mmx_size() from cgen.c to
			  oputils.c.
			Moved mmx_spread(), mmx_pack(), and mmx_unpack() from
			  cgen.c to frag.c.
			Moved mmx_mask() from cgen.c to frag.c.
			Moved shiftconst() from cgen.c to binop.c.
			Moved immed(), samefragtyp(), and upop() from cgen.c to
			  binop.c.
			Moved constant pool pre-entry and pointer declaration
			  output code from frag.c to cpool.c.
			Added cpoolinit() to cpool.c and prototype to cpool.h.
			  It now calls mmx_cpoolinit, if the CPU supports MMX,
			  to do the initialization steps for the constant pool
			  and print out its declaration.
			Renamed binop.c to op.c.
 04-09-99 R.Fisher	Renamed mmx_out() to fragment().
			Renamed mmx_ctype() to ctype(), and had it return a
			  char * to the string to be printed instead of
			  printing the string itself.  The caller is now
			  responsible for printing the information.
			Renamed mmx_argtype() to argtype(), and had it return a
			  char * to the string to be printed instead of
			  printing the string itself.  The caller is now
			  responsible for printing the information.
			Renamed mmx_cdim() to cdim().  Moved it from cgen.c to
			  frag.c, and had it return the dimension if it would
			  have printed it before, and 0 otherwise.  The caller
			  is now responsible for printing the information.
			Split general header files swarc.h and tuple.h into
			  several headers which are more directly related to
			  the corresponding C source: coerce.h, frag.h,
			  ir.h, op.h, oputils.h, output.h, sched.h, sym.h.
			Made functions and vars that are not used outside of
			  their sources static, and stripped them from the
			  related header files.
			Explicitly marked functions and vars that are used
			  outside of their sources extern, and added them to
			  the related header files.
			Tried to limit the included files for each C source to
			  those that were actually necessary.  I'm sure this
			  wasn't done perfectly.  But I've weeded out any
			  errors/warnings that would be due to this.
			Added oputils.fig and output.fig to Figures/Makefile
			Have "make distclean" and "make clean" recurse into
			  Figures directory.
			Included "stdpccts.h" in cgen.c, cpool.c, frag.c, and
			  sched.c.
			Moved "tuple.h" from cpool.h to cpool.c.
			frag.c now includes cgen.h, sym.h, and output.h.
			Split some long lines in frag.c to allow correct
			  laser printing.
			ir.c now includes ir.h, coerce.h, and sym.h.
			Explicitly cast malloc call in ir.c to a (tree *).
			op.c now includes tokens.h and cgen.h.
			oputils.c now includes tokens.h.
			output.c now includes output.h.
			sched.c now includes sched.h.
			Rearranged functions in sched.c.  Probably should have
			  just included their prototypes...
 04-10-99 R.Fisher	Moved loadop(), storeop(), and loadpadop() from frag.c
			  to op.c, and added their prototypes to op.h.
			Added Postscript generation rules to Figures/Makefile.
 04-12-99 R.Fisher	Added case 4 to mmx_bits.  Perhaps mmx_bits should be
			  MMX-specific though, with some other function above.
			Combined cgen.c with oputils.c and cgen.h with
			  oputils.h.
			Stripped cgen.c from Makefiles.
			Changed includes of cgen.h to oputils.h.
			Changed mmx_bits so that 33<bits<=64 returns 64.
			Added optcpu stub for generic IA32.
			cpooldump no longer optional in main().
			Moved code to output header inclusion from
			  main.c:openoutputs() to output.c:headers().  This
			  may not be the best place for this, but I'm trying to
			  isolate target-specific code at this time.
 04-13-99 R.Fisher	Added case template to op.c which includes the list of
			  SWARC operations which may be performed.
			Added definition for GenericIA32 to swarc.h as (0).
 04-15-99 R.Fisher	Added commentary to coerce.c.
			Corrected cpoolinit() to only call mmx_cpoolinit() once.
			Now includes Sc.h and calls mmx_cpoolinit() for
			  GenericIA32 machines.
			Added fflush() after each node in p_ir().
			Functions are now assumed to be void if not explicitly
			  listed, and a warning is issued.
			Moved co_fold() and related functions from coerce.c to
			  opti.c.
			Added opti.c to Makefiles.
 04-22-99 R.Fisher	Added 32-bit code to ADD, AND, ANDN, OR, and XOR cases
			  and to inserted movq section in sched.c:mmxop.
			Modified output for LOAD, STORE, NUM cases in
			  sched.c:sched_bb for IA32.
			Created ia32.h (Sc.h for IA32-only), and added to
			  output.c:headers() for GenericIA32 target.
			ia32_t now returned instead of mmx_t in frag.c:argtype()
			  for non-float TYP_SWAR on GenericIA32.
			ia32_t now returned instead of mmx_t in frag.c:ctype()
			  on GenericIA32.
			Added 32-bit code to cpool.c.  Uses mmx_t pool
			  internally, but generates ia32_t pool as output.
			Added 32-bit output code to p_ctype() in showir.c.
			Added 32-bit code to symname() in sched.c.
			Added 32-bit register output code to sched.c:mmxop().
			Added ia32regname to sched.c.
			Moved MMX return sequence output code from cg_tree()
			  and fragment() to flush_enh_regs() (All in frag.c).
 04-23-99 R.Fisher	Renamed immed() to immed64() in frag.c, op.c, and op.h.
			Added files spills.c and spills.h.
			Wrote immed128(), but left uncompiled.

			Added spool[MAXSPILLS] to spills.c.  This isn't the
			  scheme Hank suggested, but has fewer code changes.
			spills.h now included by sched.c and spills.c.
			Defined MAXSPILLS as 4 in spills.h.
			Replaced occurances of REGSAVAIL with
			  MAXSPILLS+REGSAVAIL in sched.c.
			Spill pool initialized in frag.c, and dumped in main.c
			  after constant pool is initialized or dumped.
			*Added int numspills to spills.h and spills.c.
			Added code to generate references to spill pool rather
			  than a register when the reg number is greater than
			  REGSAVAIL.
			sched_bb() now loops, allowing more spills, until it
			  finds a schedule.  The loop body includes all the
			  scheduling attempts included before.
			Added spills.Sc to examples.

			Added enh_size(), and dumb ia32_size() and sse_size()
			  functions to oputils.c.  enh_size() should be called
			  rather than mmx_size() in most (if not all) places.
			Added enh_size() to oputils.h.

			Added definition for CPU_SSE to swarc.h.
 04-24-99 R.Fisher	Added ia32_bits() and sse_bits() to oputils.c.
			Changed remaining calls to mmx_bits() to targetbits()
			  in sched.c.
			Moved deadscope() from frag.c to op.c, and added
			  prototype to op.h.
			Added sse.h which contains a defintion for sse_t.
			Changed calls to mmx_size() to enh_size() in showir.c,
			  frag.c:regvec(),binfrag(),unfrag(),vnumfrag(),
			  regfrag(),shiftfrag(),rotatefrag(),questfrag(),
			  loadfrag(),storefrag(),cdim().  Did NOT change the
			  calls in castfrag() and fragment().
			In frag.c:fragment(), modified SIZEOF case to use
			  immed32(), immed64(), or immed128() as needed.
			  Left SSE version uncompiled.
			Changed name of mmx_1val() to mmx_ONES() to match the
			  nomenclature used in my optimizations studies.
			Added definitions for ia32_t and sse_t to tuple.h.
			Added prototypes for ia32_size() and sse_size() to
			  oputils.h.
			Added immed32() to op.c.
			Added non-compiled section to immed64() to be used
			  later (maybe).
			Added functionality to sse_size() and ia32_size().
			Added bitsperfrag() to oputils.c.
			Added ia32_minval(), sse_minval(), ia32_maxval(),
			  sse_maxval(), ia32_ONES(), and sse_ONES() to
			  oputils.c.
			Changed return value for mmx_maxval() for signed 1-bits
			  to 0x0, which is 0 per field and greater than -1.
			Added ia32 and sse cases to targetbits().
 04-25-99 R.Fisher	Changed type of element immed in definition of tuple
			  from mmx_t to sse_t.
			Changed immed.q to immed.q[0] in sched.c:mmxop() for
			  SHL and SHR cases.
			Changed immed.q to immed.q[0] for the SHL and SHR cases
			  in op.c:binop2u(), binop4u(), and binop8u(), the SHR
			  case in binop8(), and the SHL, SHR, and DIV cases in
			  binop32f().
			Changed immed.q to immed.q[0] in the peephole
			  optimizations section in op.c:binop().
			Changed immed.q to immed.q[0] and t to t.q in
			  op.c:immed64().
			Changed immed.q to immed.q[0] for the LNOT case in the
			  folding section of op.c:unop().
			Removed conditions on compilation of immed128().
			Added prototypes for immed32() and immed128() to op.h.
			Zero out unused sections of immed in op.c:immed32().
 04-28-99 R.Fisher	Added commentary to frag.c to describe functions.
			Added CPU_SSE to frag.c:ctype().  Also corrected
			  problem where extern and static storage classes
			  incorrectly return without a base type.
			Added CPU_SSE to frag.c:argtype().  Also corrected
			  problem where modifiers incorrectly return without a
			  base type.
			Move mmx_mask() from frag.c to oputils.c and added
			  ia32_mask() and sse_mask().  Added prototypes for
			  these to oputils.h.
			Added CPU_SSE and GenericIA32 cases to storefrag(),
			  questfrag(), in frag.c.
			Renamed oputils.c:targetbits() to bitsperfield().
			Changed Examples/sample.Sc to allow a seed to be given
			  on the command line.
			Added vfrag32(), vfrag64(), and vfrag128() to frag.c
			  to handle VNUM frags for 32, 64, and 128 -bit targets
			  respectively.  vnumfrag() now calls one of these.
			Modified functions in frag.c to handle 32 and 128 -bit
			  cases.  Lots of changes probably many new errors.
			Moved mmx_spread(), mmx_pack(), and mmx_unpack() from
			  frag.c to op.c, and added their prototypes to op.h.
			Added 32 and 128 -bit functionality to mmx_spread()
			  and renamed spread().
			Added definitions for typ64 and typ64u to ir.c, and
			  declarations for them to ir.h.
			Moved code for cases NUM and SIZEOF in frag.c:fragment()
			  into functions numfrag() and sizeoffrag() in frag.c
			  respectively.
 05-04-99 R.Fisher	Changed source line number directives in C output file
			  to comments.  The resulting debugging information is
			  more useful than incorrect line numbers to the
			  original source.
			Added "--no-fe-cofold" option to main.c, optnofecf to
			  main.c and swarc.h, and have opti.c:co_fold() simply
			  return if optnofecf is set.
			Modified op.c:unop() to handle 32 and 128 -bit cases.
			Moved definitions for ia32_t, mmx_t, and p128_t from
			  tuple.h to swartypes.h.
			Renamed ia32_t to p32_t (partitioned 32-bit type),
			  mmx_t to p64_t (partitioned 64-bit type), and
			  sse_t to p128_t (partitioned 128-bit type) everywhere.
			Rewrote cpool code to use p128_ts internally, then
			  output p128_ts, p64_ts or p32_ts as needed per target.
			Fixed dependencies in top-level Makefile.
			Changed 128-bit assignments from two 64-bit assignments
			  to an array assignment: a={64-bit,64-bit}.
			Added missing 4-bit cases to functions in oputils.c.
 05-12-99 R.Fisher	Moved argname() from ir.c to frag.c.
			Added mk_cloned() to ir.c and its prototype to ir.h.
			Added bvt_vector() to opti.c.
			Added commutative(), distributive(), and associative()
			  to oputils.c, and their prototypes to oputils.h, but
			  these need to be worked on to provide correct
			  information.
			Added --fe-bvt command line option to indicate that
			  BVT should be performed on vectors in the front end.
			Replaced dummy "3dnow.h" with Hank's "3dnow.h".
 05-19-99 R.Fisher	Added Linpack to examples.
			Attempted bug fix of frag.c:redfrag() reduction loop.
			  See NOTDEFD section for commentary.
			-D and -U options are now also passed to gcc.
			All swarc functions are now marked as __inline__ in
			  output file.  Shouldn't hurt, helps perf.
			Rewrote cpoolenter() to zero out unused parts of the
			  constant.
			Now have 32-bit ANDs break in binop32u() rather than
			  get passed between binop32(), binop32u() and binop()
			  forever.
			Announces IR tree dump when verbose option in effect.
			Corrected fprintf format bug in ia32_cpooldump().
			Reordered targets in Examples/Makefile.
 05-20-99 R.Fisher	Renamed ia32_cpool*() cpool*32(), and changed the name
			  of the generated array to cpool32[] in cpool.c.
			Renamed mmx_cpool*() cpool*64(), and changed the name
			  of the generated array to cpool64[] in cpool.c.
			Renamed sse_cpool*() cpool*128(), and changed the name
			  of the generated array to cpool128[] in cpool.c.
			Changed cpoolenter() spoolenter() in *init() functions
			  in spool.c.
			Renamed ia32_spool*() spool*32(), and changed the name
			  of the generated array to spool32[] in spool.c.
			Renamed mmx_spool*() spool*64(), and changed the name
			  of the generated array to spool64[] in spool.c.
			Added 128-bit support to spool.c, and cleaned it up
			  some.  It still isn't very good.
			Remove "Unused" directory.  This is still in the
			  archive.
			Stripped temporary commentary from output in sched.c.
			Split op.c:immed32() into immed32s() and immed32u()
			  which do sign- and zero- extension into the 128-bit
			  internal representation, respectively.
			Split op.c:immed64() into immed64s() and immed64u()
			  which do sign- and zero- extension into the 128-bit
			  internal representation, respectively.
			Added macro definitions for immed32(), immed64(),
			  immed128s() and immed128u() to op.h
			Corrected calls to immed64 with non-64-bit values in
			  frag.c and op.c.
 05-21-99 R.Fisher	Renamed Linpack swar functions to S(ingle) rather than
			  D(ouble).
 06-08-99 R.Fisher	Renamed coerce.[ch] to coercer.[ch].
			Renamed frag.[ch] to fragmenter.[ch].
			Renamed opti.[ch] to fe_optimizer.[ch].
			Renamed sched.[ch] to scheduler.[ch].
			Renamed op.[ch] to tuplegen.[ch].
			Renamed msgs.[ch] to messages.[ch].
			Moved target header files (those used by Scc itself)
			  to the new subdirector "TargetHeaders" and fixed the
			  Makefile for this, and to include "sse.h" as a target
			  header to be (un)installed.
			Removed call to sched:begin_bb() from end of
			  sched:end_bb(), and added a call to begin_bb()
			  following every call to end_bb() in fragmenter.c.
			Fixed default permissions for install of target header
			  files in Makefile.
			Changed scheduler.c:ia32regname() to generate pseudo-
			  register names of the form "reg%d" rather than an
			  Intel register name.
			Added functions to output initialization code for
			  pseudo-registers when targetting CPUs that we will
			  let the C compiler schedule in pregs.c, and linked
			  into fragmenter.
			Added short README file.
			Changed DIV and MOD cases in tuplegen.c:binop1u() to
			  return 128-bit immediate 0's rather than 64-bit.
			Added immeds() and immedu() to tuplegen.c.
			Removed BROKEN_PAND section(s) from tuplegen.c.
			Began conversion of immed64() to immed[su]() in
			  tuplegen.c.
 06-13-99 R.Fisher	In swarc.g, split CCODE into CSTART CLINE and CCODE
			  tokens to decrease the length of the token text, thus
			  allowing longer C code sequences in the SWARC source.
			Changed type of the binop AND for LE case to typ1u in
			  tuplegen.c:binop1u().
			Have binop*() report the op name instead of just the
			  number using showir.c:opname().
			Moved the peephole optimization section of binop() to
			  peephole() in tuplegen.c.  peephole() now returns the
			  value that section would have returned if still in
			  binop() or -1 if it would not have returned.
			Moved the peephole optimization section of unop() to
			  peephole() in tuplegen.c.
			Moved the constant-folding section of unop() to
			  be_cofold() in tuplegen.c.  be_cofold() now returns
			  the value that section would have returned if still
			  in unop() or -1 if it would not have returned.
			Wrote a shorter sequence for MIN case in
			  tuplegen.c:binop2u().
			Wrote Example/valid.Sc as a validation program to test
			  expressions.  Currently, it overflows some buffer
			  somewhere (due the single-line expansion of the
			  macros), so it won't completely compile.
			Added definitions for pdivq_m2r and pdivq_r2r to Sc.h.
			Changed -E option to not run gcc because it is supposed
			  to stop after preprocessing the SWARC source.
 07-02-99 R.Fisher	In swarc.g, added CSYNC to LEXC class, add use it to
			  flush the token buffer at every ';' in C code.  Note
			  that inline C code still buffers everything, then
			  makes a tree node for it.  I'm sure this will cause
			  a problem some day...
			Added --no-be-cofold and --no-be-peep options to allow
			  optimization to be turned off during debugging.
			  These use the optnobecf and optnobepeep variables
			  added to main.c and swarc.h.
			Corrected 1-bit case in tuplegen.c:spread().
			Corrected signedness of values used for masking in
			  tuplegen.c:spread().
			Added DEBUG_FUNCS stuff to fragmenter.c, and DEBUG
			  stuff to tuplegen.c.
			Changed MUL case in tuplegen.c:binop8u() to use
			  unsigned types rather than signed types for its
			  subops.  This should effect 4u and 8u multiplies.
			Rewrote MUL cases in tuplegen.c:binop4u() to clear junk
			  before ORing.
			Rewrote MUL cases in tuplegen.c:binop8u() to clear junk
			  before PACKing to keep saturation from occuring.
			Changed SHR to SHL in SHL case in tuplegen.c:binop8u().
			Added pdivub_m2r, pdivub_r2r, pmodub_m2r, pmodub_r2r,
			  pdivuw_m2r, pdivuw_r2r, pdivud_m2r, pdivud_r2r,
			  pdivuq_m2r, pdivuq_r2r, pmoduw_m2r, pmoduw_r2r,
			  pmodud_m2r, and pmodud_r2r to TargetHeaders/Sc.h.
			Changed scheduler.c:mmxop() to output pdivu* or pdiv*
			  depending on whether or not the operation is unsigned
			  or signed.
			Changed scheduler.c:mmxop() to output pmodu* or pmod*
			  depending on whether or not the operation is unsigned
			  or signed.
			Changed scheduler.c:mmxop() to use showir.c:opname() to
			  output the name of the unsupported operation if known
			  rather than just the operation's token number.
			Renamed files pregs.* to pseudoregs.*, and pregs*() to
			  pseudoregs*() in pseudoregs.[ch].
			Added binop1(), binop2(), and binop4() to handle
			  signed 1-, 2-, and 4- bit operations.
			Debugging of binop1u(), binop2u(), binop4u(), binop1(),
			  binop2(), and binop4().
			Bug fixes and expansion of validation program.
			Stripped commented old optline renumbering output from
			  main.c and swarc.g.
			Rewrote messages.c:error() to announce "error" with
			  the output message.
			Changed DIV case in tuplegen.c:binop1() to always
			  return the numerator (and give a warning) as opposed
			  to generating an exception when /0.
			Corrected AVG, DIV and MOD cases in tuplegen.c:binop2().
			Corrected MIN and MAX cases in tuplegen.c:binop2().
			Corrected GT and GE cases in tuplegen.c:binop4().
			Corrected SHR and AVG cases in tuplegen.c:binop4().
			Corrected DIV and MOD cases in tuplegen.c:binop4().
			Changed 32u ADD in AVG case in tuplegen.c:binop8() to
			  8-bit signed ADD.
			8-bit signed DIV and MOD cases no longer do 8u DIV/MOD.
			Corrected AVG case in tuplegen.c:binop16().
			Changed SHR case in scheduler.c:mmxop() to base the
			  decision to do sra or srl on the signedness of the
			  operation rather than the field size.
			Added binop64() and binop64u() to tuplegen.c.
			Added EQ emulation for 64 bits to tuplegen.c.
			Changed calls to sprintf() to snprintf() when any
			  replaceable formatting sequence was used.  Although
			  this is a GNU extension, it is a good one, so I'll
			  use it.
			Have scheduler.c:before_bb*() report the op name
			  instead of just the number using showir.c:opname().
			Added definition of TYP_NULL (0) to swarc.h.
			Have tuplegen.c:binop() treat 64-bit TYP_NULL ops as
			  unsigned ops.
			Added fprint_curr_function(), fname_push(), and
			  fname_pop() to messages.c and protos to messages.h.
			Added openfunction() and closefunction() to messages.c
			  and protos to messages.h, and calls to these in
			  swarc.g around the function body block.
			Added undeclared() and thiscope() to sym.c and protos
			  to sym.h.

			Added "declared" element to definition of "sym" in
			  swarc.h, and definitions for SYM_DECLARED and
			  SYM_UNDECLARED to swarc.h.  This allows uses of
			  identifiers to enter the symbol in the symtab without
			  making it seem to have been properly declared.
			Added "decline" element to definition of "sym" in
			  swarc.h.  zzline stored here by sym.c:enter() for
			  debugging messages.
			Added "used" element to definition of "sym" in
			  swarc.h, and definitions for SYM_USED and SYM_UNUSED
			  to swarc.h.  This allows uses of identifiers to
			  indicate that a symbol has been used, so warnings may
			  be issued for unused symbols.

			Added redeclared() to messages.c and proto to
			  messages.h to announce redeclared identifiers.
			Added check for redefined variables to data rule in
			  swarc.g.

			Changed sym.c:lookup() to return NULL when not found
			  rather than error, enter, and return the new index.
			Changed calls to lookup() in ir.c and swarc.g to do
			  the lookup, then enter with typnul if not found.
			Changed calls to enter() in swarc.g to do lookup()
			  first, error if redeclared, enter if not.

			Corrected cases DIV and MOD in tuplegen.c:binop16() to
			  use the signed macros rather than the unsigned ones.

                        Changed AVG case in tuplegen.c:binop32() to do signed.
 07-20-99 R.Fisher	Renamed valid.Sc valid64.Sc, and added valid32.Sc in
			  Examples directory.
			Changed tuplegen.c:binop32u() to return
			  AND(NOT(arg0), arg1) for ANDN(arg0, arg1) for IA32.
			Added IA32 handling to scheduler.c:mmxop().
			Cast arguments to immed64u and immed32u to types p64_t
			  and p32_t respectively in redfrag() and shiftfrag()
			  in fragmenter.c, and binop8u(), immedu(), immeds(),
			  and unop() in tuplege.c.
			Cast arguments to cvt1x32uto4x32u() and
			  cvt1x64uto2x64u() to types p32_t and p64_t
			  respectively in binop1u(), binop2u(), binop4u(),
			  binop8u(), binop32u(), binop32(), binop64() in
			  tuplege.c.
			Corrections to Libstdswar/stdswar.c.
			Changed top-level Makefile to make BINDIR and INCDIR,
			  then copy files to them in two stages, rather than
			  doing a "cp -a".
			Added definitions for typ*us and type*ss to ir.c, and
			  their declarations to ir.h for (un)signed saturation
			  types.
			Made use of non-saturation type PACK instructions a bug
			  in scheduler.c:mmxop(), and changed MUL case in
			  tuplegen.c:binop8u() to do an typ8us PACK at the end
			  of the sequence.
			Changed PACK in tuplegen.c:binop*u() to emulate modular
			  unsigned packing for all targets.  Changed PACK in
			  binop*() (signed versions) to do the unsigned PACK.
			Added binop*us() and binop*ss() functions to tuplegen.c
			  to handle (un)signed saturation, and modified binop()
			  to choose the correct one.
			Added code to generate pmulhu* for case MULH with
			  unsigned types to scheduler.c:mmxop().
			Added code to handle saturation except for (UN)PACK,
			  SHL, SHR, and all 64-bit functions in tuplegen.c.
			Changed LL constants to ULL in tuplegen.c.
			Changed references to immed64() to references to
			  immed64u() in tuplegen.c.
 07-29-99 R.Fisher	Added missing emulation for everything but shifts,
			  packs, and unpacks.
			Added definitions for typ128* to ir.c, and declarations
			for these to ir.h.
 08-15-99 R.Fisher	Fixed tests which use the CPU type to use bitsperfrag()
			  where they should in cpool.c.
			Changed unsigned constants from 0x... to 0x...U in
			  stdswar.c.
			Changed calls from *_mask() to target_mask() in
			  vfrag32(), vfrag64(), vfrag128(), redfrag(),
			  shiftfrag(), and storefrag() in fragmenter.c.
			Changed calls from *_minval() to target_minval() in
			  REDUCEMIN case in fragmenter.c:redfrag().
			Changed calls from *_maxval() to target_maxval() in
			  REDUCEMAX case in fragmenter.c:redfrag().
			Changed calls from *_ONES() to target_ONES() in
			  REDUCEMUL case in fragmenter.c:redfrag().
			Fixed tests which use the CPU type to use bitsperfrag()
			  where they should in fragmenter.c
			Changed multiple cases of immed*() for various register
			  sizes to single case using cvt*() in 2-, 4-, 8-, 16-,
			  32-, and 64-bit cases in fragmenter.c:redfrag().
			Changed fragmenter.c:castfrag() to use enh_size()
			  rather than *_size() for float/int conversion hack.
			Added target_minval() to oputils.c and its prototype to
			  oputils.h.
			Removed sse_minval(), mmx_minval(), and ia32_minval()
			  from oputils.h, and made static in oputils.c.
			Added target_maxval() to oputils.c and its prototype to
			  oputils.h.
			Removed sse_maxval(), mmx_maxval(), and ia32_maxval()
			  from oputils.h, and made static in oputils.c.
			Added target_ONES() to oputils.c and its prototype to
			  oputils.h.
			Removed sse_ONES(), mmx_ONES(), and ia32_ONES()
			  from oputils.h, and made static in oputils.c.
			Added target_mask() to oputils.c and its prototype to
			  oputils.h.
			Removed sse_mask(), mmx_mask(), and ia32_mask() from
			  oputils.h, and made static in oputils.c.
			Change pctype() in showir.c to use the output from
			  bitsperfrag() for the output swar type rather than
			  hard-coding it.
			Fixed tests which use the CPU type to use bitsperfrag()
			  where they should in spool.c
			Fixed tests which use the CPU type to use bitsperfrag()
			  where they should in tuplegen.c
			Corrected debugging output in tuplegen.c:binop() to
			  indicate correct function call
			Fixed tests which use the CPU type to use bitsperfrag()
			  where they should in scheduler.c
			Removed unused debugging output for IA32 in scheduler.c
 10-03-99 R.Fisher	Added saturation handling to valid64.Sc.
			scheduler.c:incref() now bug()s out if the tuple number
			  is past the end of the tuple array.
			Moved peephole() and be_cofold() from tuplegen.c to
			  be_optimizer.c, made extern, and placed protos in
			  be_optimizer.h.
			Moved immed*() from tuplegen.c to tuple_immed.c, made
			  extern, and placed protos in tuple_immed.h.
			Moved binop*() and shiftconst() from tuplegen.c to
			  tuple_binop.c, made extern, and placed protos in
			  tuple_binop.h.
			Changed set of included files in tuplegen.c.
			Added tuple_immed.c, tuple_binop.c, and be_optimizer.c
			  to the Makefile.
			Modified Makefile handling of TARG_CPP and TARG_GCC to
			  hide the insertion of quotes from the end-user.
			Added INCDIRPERM to Makefile, and had "make install"
			  set permissions on INCDIR to this on installation.
			Removed Makefile from list of dependencies for swarc.c.
			Split "clean" target into "clean" and "cleanthis".
			Added Prephack/*, and made it the standard preprocessor.
			  It actually sets up and uses "gcc -E".
			Moved immed* from tuplegen.c to tuple_immed.c.
			Changed pmulld macro definitions in Sc.h and ia32.h to
			  not zero-test before performing multiply.
			Changed main.c:main() to output C preprocessor name
			  when it cannot be executed.
			Changed main.c:main() to not dump the constant or spill
			  pools if the output file is not open.
			Changed scheduler.c:incref() to bug out if the limits
			  of the tuple array have been exceded.
			Modified scheduler.c:mmxop() to output the correct form
			  of instruction for (un)signed (saturation/modular)
			  for padd and psub.
			Added code to section of mmxop() where source is
			  an immediate to handle spilled destination.
			Swapped spoolname and savereg in section of mmxop()
			  where destination was spilled.
			Added debugging to scheduler.c:storeord1().
			Changed usage of valid64 to take an argument list which
			  indicates which parts of the test to run.
			MAJOR changes to tuplegen_binop.c to add saturation
			  handling and correct emulation errors.  Now passes
			  the validation suite for everything up through 16 bit
			  fields for MMX.  32-bit fields are too large to test
			  via brute force methods.
 10-05-99 R.Fisher	Reorganized Examples directory.
			Update Figures/Makefile to match current sources.
			Corrected PACK*u, PACK*, PACK*us, and made PACK*ss be
			  unimplemented.
 10-06-99 R.Fisher	Fixed error in Examples/Makefile
			Added command-line increment specification to
			  valid64.Sc.
			Mods to Example/float*
			Commented out union definitions in TargetHeaders/*.
			Linked TargetHeaders/swartypes.h to swartypes.h.
			Changed output.c:headers() to have swartypes.h included
			  before any other target header file.  This should
			  keep all the types consistant.
 11-09-99 R.Fisher	In Makefile:
				Stripped commented user-specific definitions.
				Added definition for the C compiler to be used
				  to build Scc.
				Added variable HEADERS to contain list of
				  target-specific header files.
				Various minor changes to rules.
			Renamed the files in TargetHeaders:
				3dnow.h	to Scc_3dnow.h
				Sc.h	to Scc_mmx.h
				ia32.h	to Scc_ia32.h
				sse.h	to Scc_sse.h
				xmmx.h	to Scc_xmmx.h
			Started adding an HP PA-RISC 2.0 target:
				Added TargetHeaders/Scc_max.h
				Added rules to Examples/Makefile to build
				  valid64-HP.*
				Added case to main.c:targetname()
				Added case to main.c:showopts()
				Added case to main.c:main()
				Added MIXEVEN, MIXODD, and PERM cases to
				  fragmenter.c:fragment().
				Added max_bits(), max_size(), max_minval(),
				  max_maxval(), max_ONES(), and max_mask() to
				  oputils.c.
				Added CPU_MAX case to bitsperfield(),
				  bitsperfrag(), enh_size(), target_minval(),
				  and target_maxval(), and target_ONES().
				Added scheduler.c:maxop().
				Added cases to scheduler.c:maxop() for PA-RISC
				  2.0 MAX instructions.
				MANY changes to tuple_binop.c:binop*() for
				  PA-RISC 2.0 MAX instructions.
				Added max_pack(), and max_unpack() to
				  tuplegen.c, and calls to them to pack() and
				  unpack() in tuplegen.c.
			Added AMD K6-3 target:
				Added case to main.c:targetname()
				Added case to main.c:showopts()
				Added case to main.c:main()
			Added AMD Athlon target:
				Added TargetHeaders/Scc_athlon.h
				Added rules to Examples/Makefile to build
				  valid64-Athlon.*
				Added case to main.c:targetname()
				Added case to main.c:showopts()
				Added case to main.c:main()
				Added cases to scheduler.c:mmxop() for Athlon
				  Extended 3DNow! instructions.
			Rewrote README.
			Added directory "Documentation":
				Added files AddingATarget, Install, License,
				  Scc.lsm, ToDo, Upgrade, acknowledgments,
				  bug-reports, and refcard.ps.
				Moved History to Documentation directory.
			In directory "Examples":
				Added red64.Sc, vecdot.Sc, and GetPerfs
				Renamed runvalid to Runvalid.
				Removed valid32.Sc and spills.Sc
				Rewrote if.Sc and where.Sc
				Added red64.Sc and rules to build red64.* to
				  Makefile.
				Added vecdot.Sc and rules to build vecdot.* to
				  Makefile.
				Adjusted rules in Makefile in minor ways.
			In fragmenter.c:
				Added #includes for tuple_immed.h,
				  tuple_binop.h, and Libstdswar/stdswar.h.
				Changed calls to immed*() to immed*u() to zero
				  padding in redfrag().
				Corrected redfrag() algorithm.
				Changed fragment() to take the root node as an
				  argument, to avoid calling end_bb() at start
				  of each code block.
				Added DEBUG_BLOCKS code to fragment() for
				  tracing processing of BLOCKs.
				Commented call of end_bb() and removed last
				  call of begin_bb() from fragment().
			In main.c:
				Announce cpool and spool dumps for verbose.
				Announce close of output files for verbose.
				Announce "Too many errors" before exiting
				  because of too many errors.
			In oputils.c:
				Added cases for MIXEVEN, MIXODD, and PERM to
				  commutative() and ordered().
				Changed default size returned by sse_bits() to
				  be 128 instead of 64.
				Changed target_mask() to call its subfunctions
				  based on the CPU type rather than the number
				  of target bits.
				Rewrote target_mask() to use if/elses rather
				  than a case.
			In output.c:
				Fixed headers() to output new filenames.
			In scheduler.c:
				Added extern declaration of funcname for tuple
				  count debugging output.
				Added definition of NOTFOUND to clarify checks.
				Added caching to before_bb().
				Added GT_C, MIXEVEN, MIXODD, and PERM cases to
				  before_bb().
				Added bug() calls for pseudo-instructions not
				  supported by a given target to mmxop().
				Added GT_C, GE, MIXEVEN, MIXODD, and PERM cases
				  to mmxop().
				Swapped tests for CPU_MMX/TYP_SAT in mmxop().
				Corrected spilling code for first argument from
				  the constant pool in mmxop().
				Added dump_tuples() to output the current
				  tuple list for debugging.
				Added dump_sched() to output the current
				  tuple schedule for debugging.
				Added, but left uncompiled, sched_node() and
				  sched_simple() to perform a simple,
				  non-failing scheduling.
				Split primary scheduling loop from sched_bb()
				  into sched_search().
				Removed loop construct from sched_search().
				Added debugging code to sched_search().
				Added PERM to list of pseudo-instructions to
				  use i2r mode with.
				Added, but left uncompiled, call to
				  sched_simple() in sched_bb().
				Modified sched_bb() to call sched_search() once
				  allowing no pseudoregisters, then again
				  allowing MAXSPILLS pseudoregisters.
				Added/corrected spill code for LOADs, STOREs,
				  and NUMs in sched_bb().
				Have sched_bb() call either mmxop() or maxop()
				  depending on architecture class.
				Added test to end_bb() to avoid scheduling
				  empty blocks.
				Made uncompiled code which resets timer in
				  sched_eval() when a better schedule is found.
			In showir.c:
				Modified code in p_htype() to output type based
				  on the bitsperfrag() of the target rather
				  than assume 64 bits.
				Added MIXEVEN, MIXODD, and PERM cases to
				  opname().
			In spool.c:
				Modified spooldump*() to output declaration
				  with one extra element (for swap).
			In spool.h:
				Changed MAXSPILLS from 4 to 200.  This should
				  make it a non-issue if spills must be used.
				Added extern declaration for spooldump().
			In swarc.g:
				Added token definitions for GT_C, MIXEVEN,
				  MIXODD, and PERM.
			In swarc.h:
				Added CPU_MAX, CPU_athlon, K6_3, Athlon, and
				  PARISC2 definitions.
			In tuple.h:
				Changed definition of MAXTUP from 64k to 2k to
				  limit size of cache array for before_bb().
			In tuple_binop.c:
				MANY changes to binop*() to add emulation for
				  unsupported operations.
			In tuplegen.c:
				Added cases to spread() to use PERM where
				  available to short-circuit emulated spread.
			Added "--version" option in main.c.
 11-10-99 R.Fisher	Corrected fields for div32f in tuple_binop.c:binop32f().
			Changed binop32f() divide to only use the PFRCP
			  approximation instead of the extra iterations which
			  seem to make the result worse.
 12-02-99 R.Fisher	Changed instances of AND64u and XOR64u to ANDnull and
			  XORnull, respectively in tuple_binop.c.
*02-01-00 R.Fisher	Updated documentation.
			First public release.
 02-24-00 R.Fisher	Changed LOADX handling in swarc.g to set dim to 1.
			Fixed bug message in scheduler.c:incref().
			Modified LOADX case in ir.c:mk_assign() to set the bits
			  to the same as the variable to be written.
			Changed showir.c:p_ir() to output the node's address,
			  but not the reg or regvec address (both always 0).
			Changed tuple.h:MAXTUP to 3k.
			Added tuplegen.c:const_spread() to optimize the
			  replication of constants with a new constant instead
			  of calculating it dynamically, and modified
			  spread() to use it.
			Added 64/32 case to tuplegen.c:mmx_pack().
			Fixed cases in else clause of "shift elements to higher
			  positions" in fragmenter.c:shiftfrag() to break.
			Added optimization to fragmenter.c:questfrag() to skip
			  forming field mask for the case (a cond b)?, where
			  cond is any of EQ, NE, LT, LE, GT, or GE because
			  their results are already in the correct form.
			Modified fragmenter.c:castfrag() to check existence of
			  nodes before dereferencing them when calling spread.
			Added STOREX cases and tests to scheduler.c wherever
			  there was a STORE case/test.
			Added STOREX case label to the STORE case in
			  fragmenter.c:fragment().
			Added LOADX case to fragmenter.c:fragment().  For now,
			  it just sets the LOADX's regvec to that of its child.
			  It SHOULD be similar to the LOAD case instead.
			Added loadxfrag() to fragmenter.c, but not currently
			  using it.
			Added loadxop() to tuplegen.c, but not currently
			  using it.
 03-02-00 R.Fisher	Added mmx_x2r, and movq_x2r to TargetHeaders/Scc_mmx.h.
			Added LEA and LOADR cases to showir.c:opname().
			Added tokens LEA and LOADR to swarc.g.
			Corrected call to loadxop() in fragmenter.c:loadxfrag().
			In fragmenter.c:loadfrag():
				Changed types of i and fragments from int to
				  unsigned long long for use as arguments to
				  immed64u().
				Changed call to loadop() to pass i as an immed
				  tuple rather than an int.
			Eliminated setting of t->regvec in the LOADX case in
			  fragmenter.c:fragment().
			In scheduler.c:
				Added some debugging code.
				Added LEA and LOADR cases to before_bb().
				Added LEA and LOADR cases to mmxop().
				Changed output format of dump_tuples().
				Added LEA and LOADR cases to sched_class().
				  These are probably NOT in the correct
				  positions though.
				Changed bug message in sched_class() to report
				  name of op.
			Added fieldsperfrag() to oputils.c, and its prototype
			  to oputils.h.
			In tuplegen.c:
				Added leaop() and loadrop() to tuple trees to
				  calculate an effective address and to perform
				  indirect loads, respectively.
				Rewrote loadxop() to handle field loads more
				  correctly.
 03-11-00 R.Fisher	Removed STOREX cases from scheduler.c.
			In TargetHeaders:
				Copied Scc_mmx.h to Scc_mmx.h.org
				In Scc_mmx.h:
					Added note to remind me of the syntax
					  difference between the extended asm
					  and non-extended asm forms (%% vs %).
					Modified mmx_x2r and mmx_r2x macros to
					  note clobbering of eax.
					Added definitions for mmx_r2x and
					  movq_r2x.
			In Examples/tmp/cchar.c:
				Added DEBUG sections.
				Corrected end-of-loop conditions to not access
				  past end of array.
			In Examples/tmp/cint.c:
				Added DEBUG sections.
				Corrected end-of-loop conditions to not access
				  past end of array.
			In Examples/tmp/common.h:
				changed definition of ITERS to 20.
			In Examples/tmp/swarc2.Sc:
				Added typedef ullong.
				Added DEBUG sections.
				Changed types of DNA, total, substring, count,
				  and i to unsigned.
				Separated the initialization loop in main() to
				  handle partially-filled final fragment, and
				  to fill it right-justified.
			In fragmenter.c:redfrag():
				Corrected the reduction within a single
				  register section for (un)signedness, to use
				  2n-sized ops on n-sized data at each step,
				  and to do the masking before the operation
				  when topping off.
			Added fragmenter.c:storexfrag(), and had case STOREX
			  call it in fragment().
			Added STORER case to showir.c:opname().
			Changed MAXSPILLS from 200 to 2 in spool.h.
			Added token definition for STORER to swarc.g.
			In tuple_binop.c:binop64u():
				Separated CPU_MAX and CPU_MMX sections in ADD
				  case to have it emulated for MMX instead of
				  generating a paddq (which doesn't exist).
				Because add64 uses the unsigned ADD, it may not
				  be correct given the new emulation code.
			In tuplegen.c:
				In loadxop():
					Corrected to use scount as the shift
					  count instead of bpf.
					Added code to reuse a previously stored
					  value to the same fragment.
					Corrected insertion code.
				Added storerop() and storexop().
				Added LOADR section to anti-dep code in
				  storeop().
			In scheduler.c:
				Changed STOREX cases to STORER.
				Added DEBUG_SYMNAME code.
				Changed printf format of dump_tuples().
				Added DEBUG_SCHED code.
				Separated STORE and STOREX cases in end_bb()
				  and sched_search().
				Separated sched_bb() into sched_bb() and
				  output_schedule().
				Added STORER case to output_schedule().
				Removed STOREX case from sched_node().
 03-12-00 R.Fisher	Attempts to fix dependencies.  Dropped for now.
*03-20-00 R.Fisher	Continuation of 03-11-00, not 03-12-00.
			Added Examples/swarc2.Sc and Examples/valid32.Sc.
			Added rules for valid32* to Examples/Makefile.
			Standardized output formats in Examples/valid64.Sc to
			  use 0x%016llx.
			Top-level Makefile now removes make.err on distclean.
			Rewrote TargetHeaders/Scc_ia32.h to use C operations
			  rather than generate inlined assembly.
			In cpool.c:
			  Added debugging code.
			  Changed cpoolname() to return a useful error string
			    rather than an empty one.
			  Modified cpooldump32() to declare cpool32[] as an
			    unsigned long rather thana p32_t.
			  Modified cpooldump*() to output unsigned constants.
			In scheduler.c:
			  Added EQ_C cases.
			  Corrected loop bounds in pickreg().
			  Changed order of tests for regwho[i]<k and dontuse!=i
			    in pickreg().
			  Placed section where operation takes its first arg's
			    register and made it the default section for the
			    preceding switch.
			  Added DEBUG_CODEGEN sections.
			  Enlarged buf and removed unused code in ia32regname().
			  Split printf()s which called ia32regname() twice in
			  mmxop().
			  Removed GenericIA32 sections from EQ and GT cases
			    in mmxop().
			  Added GT_C and EQ_C/GenericIA32 sections to mmxop().
			  Removed CPU_MAX sections from mmxop().
			  Removed some non-CPU_MAX sections from maxop().  They
			    should all be removed.
			  Changed format in dump_sched().
			In spool.c:
			  Modified spoolinit32() and spooldump32() to not do
			    anything because I am not using a spill pool with
			    GenericIA32 code at this time.
			Added token definition for EQ_C to swarc.g.
			In tuple_binop(), changes for GenericIA32 target:
			  Changed return(-1) statements to breaks where they
			    would break to a return(-1) anyway for consistency.
			  Rewrote MAX2u default section.
			  Corrected default section for MUL4u.
			  Rewrote LAND4u default section.
			  Rewrote LOR4u default section.
			  Rewrote MUL4us section.
			  Rewrote DIV4 GenericIA32 section.
			  Rewrote GT4 default section.
			  Rewrote GE4 default section.
			  Rewrote MUL4ss section.
			  Corrected MUL8u section.
			  Split off GenericIA32 section in EQ8u.
			  Split off GenericIA32 section in NE8u.
			  Split off GenericIA32 section in GT8u.
			  Split off GenericIA32 section in MUL8us.
			  Corrected? PACK8us.
			  Split off GenericIA32 section in DIV8.
			  Split off GenericIA32 section in MOD8.
			  Split off GenericIA32 section in AVG8.
			  Split off GenericIA32 section in GT8.
			  Rewrote MUL8ss.
			  Split off GenericIA32 section in MUL16u.
			  Rewrote MULH16us?.
			  Split off default section in SHR16.
			  Rewrote MULH32u.
			  Split off GenericIA32 section in AND32u, ANDN32u,
			    OR/XOR32u, EQ32u, and GT32u.
			  Added EQ_C and GT_C cases to binop32u().
			  Corrected UNPACKL case in binop32u().
			  Modified MUL32us to use SAR instead of shift/or to
			    generate saturation mask.
			  Split off GenericIA32 section in DIV and MOD cases in
			    binop32().
			  Added GT_C case to binop32().
			  Split off GenericIA32 section in GT case in binop32().
			In tuplegen.c:
			  Corrected sign-extension code in immed32s() and
			    immed64s().
			  Corrected NOT case in unop() to leave unused bits 0
			    to match constant pool format.
			Updated SCC_VERSION in main.c
 03-21-00 R.Fisher	Rewrote Examples/tmp/Makefile to make separate 32 and
			  64 bit versions of swarc2.
			In scheduler.c:
				Split IA32 stuff from mmxop() into ia32op().
				Removed unnecessary (i.e. never taken) cases
				  from ia32op(), mmxop(), and maxop().
				Changed output_schedule() to call ia32op() for
				  GenericIA32 targets.
			In tuplegen.c:
				Added 32/16 and 16/8 cases to ia32_pack().
				Added debugging code to ia32_pack().
				Added 128/64 case to sse_pack().
*03-24-00 R.Fisher	Moved Examples/tmp directory to Examples/DNA.
			Removed swarc2.Sc and valid32.c.org from Examples.
			Added rules for DNA subdirectory to Examples/Makefile.
			Added SHL and SHR cases to be_optimizer.c:peephole().
			In scheduler.c:
				Turned off DEBUG_SYMNAME.
				Added DEBUG_SCHED code to start of sched_perm().
				Added possible_conflict().
				Added DEBUG_SCHED code to start of storeord().
				Rewrote store sorting algorithm in storeord()
				  to prevent possibly conflicting memory
				  accesses from being reordered.
				Split fprintf in dump_tuples() to work around
				  gcc error passing p128_t objects.
				Added refcounts() and called it when useful
				  rather than repeating the code.
				Added DEBUG_SEARCH code to start of
				  sched_search().
				Limited anti-dep check in sched_ok() to STOREs
				  only (rather than STORERs also).
				Added section to check for possible conflicting
				  memory accesses to sched_ok().
				Have sched_bb() call refcounts before calling
				  sched_search(MAXSPILLS).
				Stripped or modifiled DEBUG_ENDBB code in
				  end_bb().
			Split SHR by 16ULL into SHR by 15 then SHR by 1 in
			  MULH case of tuple_binop.c:binop16().  This is a
			  temporary hack to keep the SHR by 16 from being
			  converted to a SHL incorrectly.
			In tuplegen.c:
				Changed DEBUG code to DEBUG_COFOLD or to
				  DEBUG_PEEP code.
				Stipped stray GOT HEREHERE output.
				Added NEWOPTS section.
			In main.c:
				Updated version number.
				Uncommented -mIA32 option announcement.
*04-08-00 R.Fisher
	In Examples/DNA/Makefile:
		Various changes to variable definitions.
		Renames dna-32* to dna32*.  Same with dna64.
		Split rule for dna.Si into dna32.Si and dna64.Si to allow
		  definition on command line of BPF.
	In Examples/DNA/cchar.c and Examples/DNA/cint.c:
		Removed definition of DEBUG
		Modified debugging output.
	In Examples/DNA/common.h:
		Addition of commentary.
		Added timing defintions.
		Added definition of DEBUG.
	In Examples/DNA/dna.Sc:
		Removed definition of DEBUG
		Added definitions for FRAGTYPE, FRAGCTYPE, and FRAGEXT based on
		  definition of BPF, and rewrote code to use these parameters.
		Corrected declared size of DNA[].
		Corrected code for initialization of final fragment.
		Modified debugging output.
	In Prephack/prephack.c:
		Corrected to allow switches (which are now argv[1] through
		  argv[argc-3]) and pass them on to GCC.
	In TargetHeaders/Scc_ia32.h:
		Added definitions for movl_x2r and movl_r2x.
		Corrected definitions for cmpgt*.
	In TargetHeaders/Scc_ia32.h:
		Added definitions for mmx_m2x and movq_m2x.
	In fragmenter.c:
		Moved declaration of lastword to top of shiftfrag().
		Made i, j, and fragments unsigned long longs in storefrag().
		Corrected call to storeop() to pass i as an immediate tuple,
		  not a constant.
		Split WHILE case in fragment() base on target fragment size.
	In scheduler.c:
		Corrected symname() to use offset as an immediate tuple rather
		  than as a constant.
		In ia32op():
			Corrected LEA and LOADR cases to generate addl and movl.
			Corrected output for LEA and LOADR sections when
			  outputting arguments.
		In mmxop():
			Added spill code to LOAD, LEA, and LOADR cases when
			  outputting arguements.
			Modified DEBUG_CODEGEN output order.
		Modified output format in dump_tuples() and dump_sched().
		In output_schedule():
			Added or changed order of DEBUG_CODEGEN code.
			Corrected spill code in MMX section of STORER case.
			Split fprintf() call in GenericIA32 section of STORER
			  case.
	In spool.c:
		#undef'd NOTDEFD.
	In spool.h:
		Changed definition of MAXSPILLS to 24 (8+24=32) which matches
		  the number of regs on non-Intel architectures.
	In tuplegen.c:
		Modified DEBUG_COFOLD and DEBUG_PEEP output in binop().
		Added a second be_cofold() call section to binop().
		Separated scount definition section, which is based on bpf,
		  from definitions based on fpf in loadxop() and storexop().
*04-10-00 R.Fisher
	In TargetHeaders/Scc_ia32.h: Undid "corrections" to cmpgt* in 000408.
	In oputils.c:ordered(): Added GT_C case.
	In main.c: Updated version number.
*04-13-00 R.Fisher
	In fragmenter.c:redfrag():
		Modified code to reduce within each fragment first, then
		  combine the fragments, rather than the other way around.
		  This code is O(V) larger (and slower), but is more likely to
		  produce the correct answer because it is harder for it to
		  overflow.
		I may make this an option or PRAGMA in the future because of
		  the substantial penalty, but I suspect it is too easy to
		  overflow the old way.
	In Examples/DNA/common.h:
		Made the default values 350, 1000000, and 11 for LENGTH, ITERS,
		  and SEED.  I will probably make LENGTH.
	In main.c:
		Updated version number.
*04-14-00 R.Fisher
	In Examples/cint.c and Examples/cchar.c:
		Modified debugging loop in main(); same functionality, but more
		  obvious.
	In Examples/dna.Sc:
		Corrected final fragment section of main() to cast random value
		  to a FRAGCTYPE rather than unsigned.
		Corrected shift count calculation in debugging code in main().
	In main.c:
		Updated version number.
 04-27-00 R.Fisher
	Added the file Documentation/pseudo-ops.
	Added the file TargetHeaders/Scc_altivec.h, which will be replaced in
	  the next version of Scc.
	Added the file tuple_trinop.c.

	Changed all occurences of MAXSPILLS to maxspills() in pseudoregs.c,
	  scheduler.c, and spool.c.

	Added maxspills() to spool.c and its prototype to spool.h.
	Removed definition of MAXSPILLS from spool.h.

	In main.c:
		Added help line for -mAltiVec to showopts().
		Added AltiVec switch to main().
		Added AltiVec case to targetname().
	In swarc.h:
		Added definition for CPU_AltiVec.
		Added a target definition for AltiVec.
	In oputils.c:
		Added altivec_bits().
		Added CPU_AltiVec case to bitsperfield().
		Added CPU_AltiVec case to bitsperfrag() and combined CPU_MMX
		  and CPU_MAX cases.
		Added altivec_size().
		Added CPU_AltiVec case to enh_size().
		Added altivec_minval().
		Added CPU_AltiVec case to target_minval().
		Added altivec_maxval().
		Added CPU_AltiVec case to target_maxval().
		Added altivec_ONES().
		Added CPU_AltiVec case to target_ONES().
		Added altivec_mask().
		Added CPU_AltiVec case to target_mask().

		Added RCP1 and RCP2 cases to ordered().
		Added cases for INTRLVLOW, INTRLVHIGH, INTRLVEVEN, INTRLVODD,
		  PACKS2U, RCP1, RCP2, and REPL to ordered().
		Made max_bits() static.
		Added PACKS2U case to commutative().
		Removed MERGE entries from distrib[][] and assoc[][].
	In tuple_binop.c:
		Added the following cases for AltiVec...
		  In binop8u():   ADD, SUB, MUL, MULEVEN, MULODD, DIV, MOD,
				  AVG, MIN, MAX, EQ, GT, SHL, SHR, PACK,
				  INTRLVODD, INTRLVEVEN, REPL
		  In binop8us():  ADD, SUB, PACK
		  In binop8():    DIV, MOD, AVG, MIN, MAX, GT, SHR
		  In binop8ss():  ADD, SUB, PACK

		  In binop16u():  ADD, SUB, MUL, MULH, MULEVEN, MULODD, DIV,
				  MOD, AVG, MIN, MAX, EQ, GT, SHL, SHR, PACK,
				  INTRLVLOW, INTRLVHIGH, INTRLVODD, INTRLVEVEN,
				  REPL
		  In binop16us(): ADD, SUB, MUL, PACK
		  In binop16():   MULH, MULEVEN, MULODD, GT, DIV, MOD, AVG,
				  MIN, MAX, SHR
		  In binop16ss(): ADD, SUB, PACK

		  In binop32u():  ADD, ADDH, SUB, MUL, MULH, DIV, MOD, MIN,
				  MAX, AVG, EQ, GT, SHL, SHR, INTRLVLOW,
				  INTRLVHIGH, INTRLVODD, INTRLVEVEN, REPL
		  In binop32us(): ADD, SUB, MUL
		  In binop32():   MULH, MIN, MAX, AVG, GT
		  In binop32ss(): ADD, SUB, MUL
		  In binop32f():  DIV

		  In binop64u():  ADD, DIV, MOD, EQ, GT, INTRLVLOW, INTRLVHIGH

		  In binop128u(): EQ, SHL, SHR

		In binop32f():
			Corrected 3DNow! section of DIV case.
			Corrected MOD, GT, GE, NE, LAND, and LOR cases.
			Added bug report to RCP1 and RCP2 cases for non-3DNow!
			  targets.
		Added binop128u(), binop128us(), binop128(), and binop128ss()
		Changed PACK cases in binop8u(), binop8us(), binop8ss(), and
		  binop16ss() to use available MMX instructions.

		Added GT_C case to binop64u().
		Removed "Expecting 128-bit..." bugs from ADD and SUB cases in
		  binop64u().
	In oputils.c, scheduler.c, showir.c, swarc.g, tuple_binop.c, and
	tuplegen.c:
		Renamed UNPACKL INTRLVLOW to indicate interleaving of two args.
		Renamed UNPACKH INTRLVHIGH to indicate interleaving of two args.
	In fragmenter.c, oputils.c, scheduler.c, showir.c, swarc.g, and
	tuple_binop.c and fragmenter.c:
		Renamed MIXEVEN to INTRLVEVEN.
		Renamed MIXODD to INTRLVODD.
	In fragmenter.c, tuple_binop.c, tuplegen.c, tuplegen.h:
		Renamed spread() to replicate() and const_spread() to
		  const_replicate().
	In tuplegen.c:
		Added 128 bit case to binop().
		Renamed ia32_unpack() to ia32_interleave().
		Renamed mmx_unpack() to mmx_interleave().
		Renamed sse_unpack() to sse_interleave().
		Renamed max_unpack() to max_interleave().
		Added altivec_pack() and altivec_interleave().
		Added CPU_AltiVec cases to pack() and interleave().
		Added CPU_AltiVec cases to replicate() and did rewrite.
	In tuplegen.h:
		Renamed prototype for unpack() to interleave().
		Renamed prototype for spread() to replicate().
	In fragmenter.c:castfrag():
		Changed call to unpack() to interleave().
	In swarc.g:
		Added token definitions for ADDH, MULEVEN, MULODD, NOR, SHLB,
		  SHRB, PACKS2U, INTRLVLOW, INTRLVHIGH, and REPL.
	In showir.c:
		Added cases for REPL, SHLB, SHRB, INTRLVLOW, INTRLVHIGH,
		  MULEVEN, and MULODD to opname().
	Removed instances of MERGE from oputils.c, showir.c, and swarc.g.

	In tuple_binop.c:
		Added binop128u(), binop128us(), binop128(), and binop128ss().

	In pseudoregs.c, scheduler.c, spool.c:
		Changed REGSAVAIL to regsavail().
	In scheduler.h:
		Changed definition of REGSAVAIL to prototype for regsavail().
	In scheduler.c:
		Added definition of regsavail().

		Added ADDH, MULEVEN, MULODD, SHLB, SHRB, PACKS2U, REPL cases to
		  before_bb().
		Renamed UNPACKL, UNPACKH, MIXEVEN, and MIXODD to INTRLVLOW,
		  INTRLVHIGH, INTRLVEVEN, and INTRLVODD, respectively.
		Added unary UNPACKH and UNPACKL case to before_bb().

		Added regsavail().
		Split show_suf2() into AltiVec and else cases.

		Added SHLB, SHRB, and PACKS2U cases to ia32op().
		Added SHLB, SHRB, PACKS2U, UNPACKH, and UNPACKL cases to
		  mmxop().
		Corrected PACK case in mmxop().
		Added SHLB, SHRB, and PACKS2U, UNPACKH, and UNPACKL, INTRLVLOW
		  cases to maxop().
		Added altivecop().
		Added UNPACKH, UNPACKL, ADDH, MULEVEN, MULODD, SHLB, SHRB, and
		  PACKS2U cases to sched_node().
		Added AltiVec cases to output_schedule() for LOAD, STORE,
		  STORER, and NUM cases, and to call altivecop().
		Modified sched_bb() to check for positive maxspills before
		  calling sched_search(maxspills()).

		Added ADDH, MULEVEN, MULODD, SHLB, SHRB, PACKS2U, INTRLVLOW,
		  INTRLVHIGH, and REPL cases to sched_class().

	In Examples/DNA/Makefile:
		Added rules for dna64-AltiVec.
	In Examples/DNA/dna.Sc:
		Removed commented timing code.
	In Examples/Makefile:
		Added rules for valid64-AltiVec.

	In output.c:
		Added CPU_AltiVec case to headers().
	In sym.c:
		Changed assignment of symptr->decline to zzline-1 in enter().
 05-01-00 R.Fisher
	In Examples/DNA/Makefile: Minor modifications
	In be_optimizer.c:
		In peephole():
			Changed call to immed32() in AND/fold constant x AND y/
			  32-bit case to immed32u().
			Split "-1 (all 1's) AND anything is anything" case
			  based on bitsperfrag().
			Corrected "anything ANDN -1 is anything" section to say
			  and do "anything ANDN -1 is ~anything".
			Combined unused LNOT and NEG cases.

	In pseudoregs.c:
		Changed pseudoregsinit32() to output "reg" as an array, not a
		  series of separate p32_ts.
	In scheduler.c:
		Added undefinition for DEBUG_FSCHED
		Changed regsavail() to return 32 for GenericIA32.
		Changed ia32regname() to output pseudoregister names as array
		  elements, not separate p32_ts.
		In sched_bb():
			Added DEBUG_FSCHED section to dump the tuple list when
			  the scheduler fails.
			Changed DEBUG_SCHED to DEBUG_FSCHED for dumping final
			  version of the schedule.
	In tuplegen.c:
		Split DEBUG_PEEP into DEBUG_BPEEP and DEBUG_UPEEP.
		Made the set of optimizations I added a few versions ago to be
		  uncompiled by default (#undef NEWOPTS).
		In binop(), changed the DEBUG_PEEP sections around calls to
		  peephole() to DEBUG_BPEEP.
		In unop(), changed the DEBUG_PEEP sections around calls to
		  peephole() to DEBUG_UPEEP.
 05-04-00 R.Fisher
	Move TargetHeaders/Scc_altivec.h to TargetHeaders/Scc_altivec.h-3reg.
	Added new TargetHeaders/Scc_altivec.h.
	Added definitions for pfcmpge* to TargetHeaders/Scc_3dnow.h.
	In Examples/DNA/Makefile:
		Renamed dna64-AltiVec* to dna128-AltiVec*.
		Added rule for dna128.Si.
	In Examples/DNA/dna.Sc:
		Added BPF == 128 sections
	In Makefile:
		Added default target (DTARG) section to allow Scc's default
		  target to be defined at compile time.
		Added Scc_altivec.h to list of target header files to install.
		Added oputils.h to dependencies for tuplegen.o.
	In swartypes.h:
		Changed float member names from "f" to "sf", and added double
		  members to p32_t, p64_t, and p128_t.
	Changed initializers for p128_ts to be doubly-brace-enclosed in
	  be_optimizer.c, cpool.c, fragmenter.c, oputils.c, tuple_binop.c, XXX
	In be_optimizer.c: #included oputils.h.
	In coercer.c: #included messages.h.
	In cpool.c:
		#included oputils.h, cpool.h, output.h, and messages.h.
		Changed cpooldump32() to declare cpool32[] as a p32_t and to
		  treat the outputed constants as unsigned ints.
	In fe_optimizer.c: #included swartypes.h, oputils.h, and messages.h.
	In fe_optimizer.h: Added prototype for bvt_vector().
	In fragmenter.c:
		#included cpool.h, spool.h, showir.h, and messages.h.
		Added global static int returncalled to be set when a return
		  statement is found in the source, and make the printing of
		  the "_return" label conditional on returncalled.
		Initialized "trunc" to 0 in vfrag32().
		In redfrag():
			Added else clauses to cases in last fragment padding
			  section.
			Added default case to section choosing the binary op
			  to use.
		Set i to -1 for failed cases in replicate section of castfrag().
		Set k to -1 in default case in shift elements to lower
		  positions section of shiftfrag().
		Separated output of trailing newline from output of "femms()"
		  and "emms()" output in flush_enh_regs().
		In fragment():
			Removed unused variable "dim" from IF case.
			Modified CCODE case so that flush_enh_regs() is only
			  called if the CCODE is not the first thing in the
			  surrounding block of code.  This may be incorrect.
			Enclosed tested assignments in parens in "Fragment
			  children in order" section.
		Removed unnecessary commented call to end_bb() in cg_tree().
	In fragmenter.h: Removed commented #include of tuple.h.
	In ir.c:
		#included swartypes.h, oputils.h, messages.h, and showir.h.
		Enclosed null character constant in braces in initialization of
		  strcachehead.
	In main.c:
		Updated version number.
		#included <unistd.h>, swartypes.h, cpool.h, and spool.h.
		Have optcpu initialized to the DEFAULT_TARGET defined in
		  Makefile rather than GenericMMX.
		Explicitly declared main() to return an int.
		Removed the else section from the 'm' switch case, so that
		  optcpu is left as initialized if no -m switch is given on
		  Scc's command line.
	In oputils.c:
		#include messages.h.
		Added definition for DEBUG_FLDS_FRAG
		Have bitsperfield() bug out for unknown CPU type, and return 0.
		Have bitsperfrag() return 0 for unknown CPU type.
		Added DEBUG_FLDS_FRAG section to fieldsperfrag() and cast
		  return value to unsigned long long.
		Have enh_size() bug out and return 0 for unknown CPU type.
		Have ia32_minval() return 0 for bit sizes larger than 32.
	In pseudoregs.c:
		#included output.h
		Removed unused variable i from pseudoregsinit32().
	In pseudoregs.c:
		Removed prototype for static function pseudoregsinit32().
	In scheduler.c:
		#included <time.h>, cpool.h, output.h, and messages.h.
		Reordered functions in the file.
		Many other changes which I'll document someday when I'm really
		  bored because I didn't track them as I did them, and they are
		  hard to see now that the file is reordered.
	In showir.c: #included swartypes.h and oputils.h.
	In spool.c: #included oputils.h and output.h.
	In swarc.g:
		#included messages.h, showir.h, and fragmenter.h.
		Removed newline from output after function body in rule "func".
		Added TYP_FLOAT to stripped types in rule "type".
		Added TYP_FLOAT to stripped types in initialization of where
		  mask in "for" section of  rule "stat".
		Removed unused variable "symbol" from rule "block".
	In sym.c:
		#included showir.h and messages.h.
		Placed unused p_scope() in uncompiled block.
		Have undeclared() return symbol.
	In tuple_binop.c:
		#included oputils.h, showir.h, and messages.h.
		Removed unused variables throughout the file.
		Initialized i to -1 in binop2u(), binop4u(), binop8u(), and
		  binop16u().
		Cast arguments to cvt1x32uto4x32u to p32_ts in MUL and MULH
		  cases of binop16u() and MULH case of binop16().
		Corrected call to info() in PACK case of binop32u().
		Have INTRLVLOW case bug out for bad bitsperfrag in binop32u().
		Corrected call to warn() in PERM case of binop32u().
		Corrected call to info() in PACK cases of binop32us(), 
		  binop64u(), and binop64us().
		Changed accesses of single float elements of p*_t to use "sf"
		  rather than "f" in binop32f().
		Corrected first two statements of MUL case in binop64ss() to
		  use the arguments and not junk.
		Changed order of arguments to REPL in EQ case of binop128u().
	In tuple_binop.h: Added prototypes for binop128*().
	In tuple_immed.c:
		#included oputils.h.
		Have immedu() and immeds() return value from immed128() by
		  default.
		Corrected initialization of immed.q[1] when allocating a new
		  tuple in immed64u().
	In tuple_immed.h: Added prototype for immedu().
	In tuplegen.c:
		#included oputils.h, be_optimizer.h, and messages.h.
		Removed unused variables throughout the file.
		Placed declaration of buf in a DEBUG section in binop().
		Cast index to unsigned long long, and made constants ULLs in
		  loadxop() and storexop().
		Have loadxop() and storexop() provide more information when
		  reporting unsupported fpfs and bpfs.
		Have loadxop() and storexop() initialized variables after
		  reporting unsupported fpfs and bpfs.
		Changed order of arguments to REPL in EQ case of binop128u().
	In tuplegen.h:
		Removed prototype for static function samefragtyp().
		Added prototypes for loadxop() and storexop().
*05-18-00 R.Fisher
	Added file Examples/valid128.Sc.
	In Documentation/pseudo-ops: Modified explanation of ANDN.
	In Examples/DNA/Makefile:
		Added possible defintions for CC, with /usr/bin/gcc as default.
		Changed commands to execute gcc to use $(CC) instead.
		Added -mMMX switch to command to make dna64.[ch].
		Added -m7400 switch to command to make dna128-AltiVec.o, and
		  added command to make dna128-AltiVec from dna128-AltiVec.o to
		  the same rule.
	In Examples/Makefile:
		Renamed valid64 to valid64-MMX.
		Renamed valid64-AltiVec to valid128-AltiVec.
		Added possible defintions for CC, with /usr/bin/gcc as default.
		Changed commands to execute gcc to use $(CC) instead.
		Modified rule to make valid128-AltiVec to work in two steps in
		  order to call the correct assembler.
		Added rule to make valid128.Si from valid128.Sc.
		Added command to rule "clean" to remove object files.
	In TargetHeaders/Scc_altivec.h:
		Corrected definition of alt_i2r.
		Corrected and modified definition of alt_m2r to work around C
		  compiler bug in handling "X" contraints.
		Corrected and modified definition of alt_r2m to work around C
		  compiler bug in handling "X" contraints.
		Added definition for alt_r2x.
		Corrected definition of alt_r2r.
		Renamed movq_r2r to vmr_r2r which is closer to the PPC
		  pseudo-instruction mr (move register).
		Added definition for alt_y2r.
		Added definition for vadduwm_m2r.
		Added "Load indexed via general registers" section.
		Added definition for stvx_r2x.
		Added "Store indexed via general registers" section.
		Added definitions for "derived functions": vdivub_r2r,
		  vdivuh_r2r, vdivuw_r2r, vdivsb_r2r, vdivsh_r2r, vdivsw_r2r,
		  vmodub_r2r, vmoduh_r2r, vmoduw_r2r, vmodsb_r2r, vmodsh_r2r,
		  and vmodsw_r2r,
	In coercer.c:
		Added TYP_LONG and TYP_LLONG cases to t1->attr and t2->attr
		  lists in diftypel(), to coerce to SWAR type and to bigger
		  element sections of retyp(), and to list of type attributes
		  to strip in retyp().
	In fe_optimizer.c:bvt_vector():
		Initialized op2 and op3 to NULL.
		Addeded tests to ensure op2 and op3 are not trinaries.
		Corrected calls to commutative() to pass op*->op rather than
		  op* as arguments.
	In fragmenter.c:
		Removed unused variable i from storexfrag(), or changed
		  instances of it to the correct value: 0.
		Added TYP_LONG and TYP_LLONG cases to argtype().
		Added TYP_LONG and TYP_LLONG to attribute list in ctype().
	In main.c:
		Updated version number.
		Removed declaration of optm2r.
		Rewrote target section of showopts() to show the actual default
		  target.
		Added "-mMMX" switch check to main().
	In oputils.c:
		Updated commutative() for the current set of pseudo-ops.
		Removed distriv[][].
		Started rewrite of distributive().
	In scheduler.c:
		Added LOADRR and STORERR cases to before_bb(), argregs(),
		  unregs(), possible_conflict(), and sched_class().
		Added LOADR and LOADRR cases to sched_cost().
		Added STORER and STORERR cases to sched_cost().
		In altivecop():
			Renamed movq to vmr.
			Renamed registers vr* to just *.
			Removed what should be unused LEA case.
			Corrected DIV case to output "s" for signed, not "h".
			Corrected MOD case to output "mod" rather than "div".
			Corrected suffix output for AltiVec PACKS.
			Added LOADRR case to generate "loadrr" output.
			Added REPL case to those which should absorb constants.
			Added LOADRR case to m2rmode == -1 section.
			Corrected spill handling in non-load section of
			  m2rmode == -1 section.
		Added STORERR case to storeord().
		Added STORERR case to refcounts().
		In sched_search():
			Removed optm2r test from section to force non-RISC
			  addressing.
			Separated sections to use m2r single-references and i2r
			  shifts.
			Added STORER and STORERR to list of cases to not
			  perform absorption on in i2r for shifts and permutes
			  section.
			Added sections to force i2r replicates for AltiVec, and
			  to absorb these.
			Added test to not use m2r constants for RISC CPUs.
			Added STORERR case to m2r constants section.
			Added test to not use m2r loads for RISC CPUs.
			Added STORERR case to m2r loads section.
		Added STORERR case to output_schedule().
		Removed CPU_AltiVec test around loop to set m2rmode to -1 in
		  end_bb().
		Added STORERR case to uncompiled section of end_bb().
	In showir.c:
		Added handling for LONG and LONG LONG to p_htype() and
		  p_ctype().
		Added LOADRR and STORERR cases to opname().
	In spool.c:
		Changed return value from 0 to 24 for AltiVec targets in
		  maxspills().
		Modified spoolname(), spooldump32(), spooldump64(), and
		  spooldump128() to reserve spool[0] and spool[1] for swapping.
	In swarc.g:
		Added TYP_LONG and TYP_LLONG to attribute lists in rule "type",
		  the subrules of "stat" for "if", "while", "for", "where", and
		  the subrule of "expr13" for "ident".
		Added "long", "long int", "long long", and "long long int" to
		  types that Scc will recognize.
		Added token definitions for STORERR and LOADRR.
		Reorganized token list at end of file to make operation types
		  more easily discernable.
	In swarc.h:
		Stripped CPU_RISC from definitions for GenericMMX, K6, K6_2,
		  K6_3, Athlon, and PentiumII.
		Removed external declaration of optm2r which isn't used.
		Added definitions for TYP_LONG and TYP_LLONG.
		Reordered definitions of TYP_s.
	In sym.c:
		Added TYP_LONG and TYP_LLONG to attribute list in enter().
	In tuple_binop.c:
		Corrected format of "Illegal permutation index" message for
		  PERM case in binop32u().
		Removed extra argument to snprintf in fail for 32-bit target
		  section of PACK case of binop32us().
	In tuplegen.c:
		Added loadrrop().
		Assigned to offset for !pos case in loadxop().
		Added AltiVec section to loadxop().
		Added storerrop().
		Assigned to offset for !pos case in storexop().
		Added AltiVec section to storexop().
 06-16-00 R.Fisher
	In Examples/Makefile:
		Added -Wall switch to commands to build valid128-AltiVec.s and
		  valid128-AltiVec.i.
	In Examples/valid128.Sc: Various corrections.
	In TargetHeaders/Scc_altivec.h:
		Corrected definition of alt_m2r.
		Corrected operand order in definitions of binary operations
		  which are macros for alt_r2r.
		Added definitions for element loads and stores.
		Added definitions for lvs*_m2r to load alignment vectors.
		Corrected definitions for vsplt*_i2r to call alt_i2r.
		Corrected definitions of vperm_r2r and vsel_r2r.
		Corrected position of closing #endif.
	In swartypes.h: Added alignment to the typedefs for p*_t.
	In cpool.c:
		Changed cpooldump64() to enclose each value in braces.
		In cpooldump128():
			Enclosed each value in double braces.
			Changed order of output of parts of each value.
		In co_fold():
			Changed NEG case to handle floats properly.
	In main.c: Updated version number
	In scheduler.c:output_schedule():
		Added code to output AltiVec element loads and stores to
	In swarc.g:
		Added code to clear TYP_EXTERN from cur_typ before
		  enter()ing wheremask in "if", "while", "for", and "where"
		  sections of the rule "stat".
	In swarc.h: Modified comments for TYP_LONG and TYP_LLONG.
 06-20-00 R.Fisher
	Added tuple_trinop.h.
	In Makefile:
		Added tuple_trinop.c to SRC list.
		Added tuple_trinop.o to OBJ list.
		Added rule for tuple_trinop.o.
		Added '-' to ignore errors during chmods.
	In be_optimizer.c:
		Changed peephole() and be_cofold() to take a third argument.
		Added test to peephole() to prevent optimizations on trinaries.
	In be_optimizer.h: Changed prototypes for peephole() and be_cofold().
	In fragmenter.c:
		In loadfrag():
			Changed to call loadop() to uloadop() for CPU_AltiVec.
			Appended offset of 0 to call to loadop().
		Appended offset of 0 to calls to loadpadop().
		In storefrag():
			Changed to call storeop() to ustoreop() for CPU_AltiVec.
			Appended offset of 0 to call to storeop().
			Appended type of typnull to calls to (u)storeop().
	In main.c: Updated version number.
	In oputils.c:
		Added TPERM case to commutative(), distributive(), and
		  ordered().
		Added LVSL case to distributive().
	In scheduler.c:
		Reordered DEBUG_CODEGEN sections to be cleaner in output.
		Added line to increment arg[2] in incref().
		In before_bb():
			Added TPERM and LVSL cases.
			Added initialization of arg[2] to binop, unop, and
			  nullop cases.
		In pickreg():
			Added section to mark when arg[2] was last used.
			Added LVSL case.
		In argregs():
			Added section to free register used by arg[2].
		In unregs():
			Added section to unfree register used by arg[2].
		In possible_conflict():
			Renamed parameter "o" to "frag".
			Added parameter "off".
		In sched_ok():
			Added test to see if arg[2] was previously scheduled.
			Added checks for equal fragments in anti-dep section.
		In sched_class(): Added LVSL and TPERM cases.
		In sched_cost():
			Added section to determine where arg[2] is from.
			Added LVSL cases to sections to determine where arg[1]
			  and arg[0] are from.
		In sched_perm(): Added arg[2] test to improvement hack.
		In symname():
			Renamed parameter "offset" to "frag".
			Added parameter "off".
			Changed output format of DEBUG_SYMNAME section.
			Added tests for nullness of s and s->text.
			Changed output format to allow byte offset.
		Changed calls to symname() to include byte offset.
		In altivecop():
			Added local r2, and section to get the third argument.
			Added TPERM and LVSL cases to mnemonic name section.
			Added trinary section to non-m2r mode section.
		In storeord1():
			Added line to pull arg[2] ahead of root.
		Made dump_tuples() conditionally compiled only if it will be
		  called.
		In dump_tuples(): Changed format of output.
		In dump_sched(): Changed format of output.
		In sched_node(): Added LVSL case to nullary section.
		In output_schedule():
			Added NOELLOADS section.
			Added LVSL case.
			Added NOELSTORES section.
			Added ELSTORES_CALLTYPE section.
	In showir.c: Added LVSL and TPERM cases to opname().
	In swarc.g: Added token definitions for LVSL and TPERM.
	In tuple.h:
		Changed arg field in definition of tuple to have 3 elements.
		Added fragment field to tuple definition.
	In tuple_binop.c:
		Changed occurances of PERM to TPERM.
		Changed index in binop(REPL...) in EQ case in binop128() from 0
		  to 3 to match AltiVec definitions.
	In tuple_immed.c:
		Added initialization of arg[2] to immed32s(), immed32u(),
		  immed64s(), immed64u(), and immed128().
	In tuple_trinop.c:
		Added includes for messages.h and showir.h.
		Changed occurances of PERM to TPERM.
		Added dummy definitions for trinop8us(), trinop8(), trinop8ss(),
		  trinop16us(), trinop16(), trinop16ss(), trinop32us(),
		  trinop32(), trinop32ss(), and trinop32f().
	In tuplegen.c:
		Added include for tuple_trinop.h.
		Added trinop().
		Added a third arg (arg2) to calls to be_cofold() and peephole().
		Added initialization of arg[2] to binop() and unop().
		Changed tuple element "offset" to "fragment".
		In leaop():
			Changed parameter "offset" to "frag".
			Added initialization of (new) offset.
			Added initialization of arg[2].
		In loadrop(): Added initialization of arg[2].
		In loadrrop():
			Changed parameter "offset" to "frag".
			Added initialization of (new) offset.
			Added initialization of arg[2].
		In loadxop():
			Changed local variable "offset" to "frag".
			Added lvslop() and uloadop().
		In loadop():
			Changed parameter "o" to "frag".
			Added parameter "off".
			Added test for offset == off to tests for previous
			  store and load.
			Added initializations of offset and arg[2].
		In loadpadop():
			Changed parameter "o" to "frag".
			Added parameter "off".
			Added test for offset == off to test for previous load.
			Added initializations of offset and arg[2].
		In storerrop():
			Changed parameter "offset" to "frag".
			Added parameter "off".
			Added initializations of offset and arg[2].
		In storerop(): Added initialization of arg[2].
		In storexop(): Changed parameter "offset" to "frag".
		Added ustoreop().
		In storeop():
			Changed parameter "o" to "frag".
			Added parameters "off" and "t".
			Added test for offset == off to test for dead stores.
			Added test for offset == off to test for
			  anti-dependencies.
			Added initializations of offset, arg[2], and type.
		In replicate():
			Changed index in binop(REPL...)s from 0 to 1 to match
			  AltiVec field numberin.
	In tuplegen.h:
		Added prototypes for uloadop() and ustoreop().
		Modified prototypes for loadop(), loadpadop(), and
		  storeop().
*07-02-00 R.Fisher
	Updated Documentation/Scc.lsm.
	Updated Documentation/pseudo-ops.
	In Examples/Makefile:
		Added valid64-K6-2 and valid64-K6-3 targets.
		Added ../Libstdswar/libstrdswar.a to link list in command to
		  build valid128-AltiVec.
		Removed -Wall switch from command to make valid128-AltiVec.s.
	In Examples/valid128.Sc:
		Commented out divide and modulus because it was spilling badly
		  on AltiVec.  I'll play with this later.
		Changed output formats to show all 128 bits for errors.
		Added ../Libstdswar/stdswar.h to list of headers to include.
	In Libstdswar/stdswar.c:
		Corrected definition of strtoull().
		Added the following functions:
			cvt1x4uto1x128u(), cvt1x8uto1x128u(),
			cvt1x16uto1x128u(), cvt1x32uto1x128u(),
			cvt1x64uto1x128u(), cvt1x4uto1x64u(), cvt1x8uto1x64u(),
			cvt1x16uto1x64u(), cvt1x32uto1x64u(), cvt1x4uto1x32u(),
			cvt1x8uto1x32u(), cvt1x16uto1x32u()
	In Libstdswar/stdswar.h:
		Corrected definition of strtoull().
		Added prototypes for the following functions:
			cvt1x4uto1x128u(), cvt1x8uto1x128u(),
			cvt1x16uto1x128u(), cvt1x32uto1x128u(),
			cvt1x64uto1x128u(), cvt1x4uto1x64u(), cvt1x8uto1x64u(),
			cvt1x16uto1x64u(), cvt1x32uto1x64u(), cvt1x4uto1x32u(),
			cvt1x8uto1x32u(), cvt1x16uto1x32u()
	In TargetHeaders/Scc_3dnow.h:
		Added definitions for pavgusb_m2r, pavgusb_r2r, and pavgusb.
		Renamed alt_r2r to alt_rr2r to indicate that it takes 2 inputs
		  registers and has one output register.
		Added new definition of alt_r2r which has one input register
		  and one output register for use with the vupk* macros.
		Changed definitions of vupkls* and vupkhs* to take two
		  arguments: a source and a destination register.
		Reversed input operand order for vmrgh* and vmrgl* macros.
		Added definitions for vslo_r2r and vsro_r2r.
	In main.c: Updated version number.
	In oputils.c:
		Renamed SHLB and SHRB to SHLBYTE and SHRBYTE, respectively.
		Added cases for SHLBIT and SHRBIT to commutative(),
		  distributive(), and ordered().
		Added cases for SHLBYTE and SHRBYTE to ordered().
	In scheduler.c:
		#undef'd debugging definitions.
		Renamed SHLB and SHRB to SHLBYTE and SHRBYTE, respectively.
		Added SHLBIT and SHRBIT cases to before_bb(), sched_class(),
		  ia32op(), mmxop(), maxop(), altivecop(), and sched_node().
		Split AVG cases for CPU_XMMX and CPU_3DNow, and corrected them
		  in mmxop().
		Corrected UNPACKH and UNPACKL cases in altivecop(), and
		  modified them for new vupk* macro formats in Scc_altivec.h.
		Corrected INTRLVLOW and INTRLVHIGH cases in altivecop().
	In showir.c:
		Renamed SHLB and SHRB to SHLBYTE and SHRBYTE, respectively.
		Added SHLBIT and SHRBIT cases to opname().
	In swarc.g:
		Renamed SHLB and SHRB to SHLBYTE and SHRBYTE, respectively.
		Added #token definitions for SHLBIT and SHRBIT.
	In tuple_binop.c:
		Add line to shiftconst() to leave argument unmodified for
		  CPU_AltiVec.
		Added CPU_AltiVec section to MUL case in binop4u().
		Added CPU_AltiVec section to MUL case in binop4us().
		Added CPU_AltiVec section to MUL case in binop4ss().
		Corrected SHL operation in CPU_AltiVec section of MUL case in
		  binop8u() to take a replicated value instead of a single as a
		  shift count.
		Added MULEVEN and MULODD cases to binop8().
		Added CPU_AltiVec section to MUL case in binop8ss().
		Corrected SHL operation in CPU_AltiVec section of MUL case in
		  binop16u() to take a replicated value instead of a single as
		  a shift count.
		Corrected test in RCP1/RCP2 case in binop32f() to allow
		  CPU_athlon targets.
		In binop128u():
			Corrected CPU_AltiVec section of SHL case.
			Added a break to the SHL case.
			Renamed SHLB and SHRB to SHLBYTE and SHRBYTE,
			  respectively.
			Added cases for SHLBIT and SHRBIT.
			Corrected CPU_AltiVec section of SHR case.
			Added a break to the SHR case.
		In tuplegen.c:
			#included Libstdswar/stdswar.h and showir.h.
			Added SHLBIT, SHLBYTE, SHRBIT, and SHRBYTE cases to and
			  removed AVG case from normalization section of
			  binop().
			In replicate():
				Corrected cases 2 and 4 to use replicated shift
				  count for CPU_AltiVec.
				Corrected REPL index in cases 8 and 16.
 07-22-00 R.Fisher
	Added Utilities subdirectory, Utilities/byteordertest.c, and
	  Utilities/Makefile.
	In Examples subdirectory:
		Added Valid subdirectory, and moved valid* to it.
		Separated rules for valid* into Valid/Makefile.
		Added while.Sc.
	In Examples/DNA/Makefile:
		Renamed dna64 to dna64-MMX.
		Added dna128-AltiVec to EXECS list.
		Removed unnecessary commentary.
		Added rule to remove object files to target "clean".
	In Examples/DNA/common.h:
		Split DEBUG definition into DEBUG_PEEK, DEBUG_SUBSTRING,
		  DEBUG_COUNT, DEBUG_SETCOUNTBYHAND, and DEBUG_TOTAL.
	In Examples/DNA/dna.Sc:
		Added definitions for FRAGCONST depending on registers size.
		Added conditionally compiled DEBUG_* sections.
		In the debugging section which outputs DNA elements:
			Added "Descending order" reminder.
			Corrected loop test in BPF==128 part.
			Parameterized decrement statement.
			Correct output format for unsigned long long type.
	In Examples/Makefile:
		Removed valid* targets.
		Added targets to run make in Valid subdirectory.
		Added while* target.
	In Makefile:
		Added targets to run make in Utilities subdirectory.
	In TargetHeaders/Scc_altivec.h:
		Corrected addressing in OLDALT sections.
		Removed movq_m2r and movq_r2m definitions.
		Added definition of vandn_r2r.
		Removed NOTYET test from around loadrr_m2r definition.
		Various additions/removals of versions of loadrr_m2r.
		Removed NOTYET test from around storerr_r2m definition.
		Corrected storerr_r2m.
		Swapped order of input operands to vpkuwum_r2r, vpkuhum_r2r,
		  vpkswss_r2r, vpkshss_r2r, vpkuwus_r2r, vpkuhus_r2r,
		  vpkswus_r2r, vpkshus_r2r, and vpkpx_r2r,
		Removed extra definition of vpkpx_r2r.
		Made _reg and _mem static in definitions of vdivub_r2r,
		  vdivuh_r2r, vdivuw_r2r, vdivsb_r2r, vdivsh_r2r, vdivsw_r2r,
		  vmodub_r2r, vmoduh_r2r, vmoduw_r2r, vmodsb_r2r, vmodsh_r2r,
		  and vmodsw_r2r.
	In TargetHeaders/swartypes.h:
		Made "signed" fields explicitly "signed".  This was really only
		  necessary for chars, but I wanted it to be consistent.
	In cpool.h:
		Changed order of output of ULLs in cpooldump128().
	In fragmenter.c:
		Added definitions for DEBUG_VNUM and DEBUG_VNUM_DUMP.
		Added DEBUG_VNUM and DEBUG_VNUM_DUMP sections.
		In vfrag128():
			Renamed i to fragment, and s to frags.
			Made fragment, j, and frags unsigned.
			Corrected "1,2,4" case.
		Added CPU_AltiVec section to 64 case of redfrag().
		In shiftfrag():
			Changed switch to assign k in the shift elements
			  sections to a single statement (the cases all did the
			  same thing anyway).
			Pulled dbits = -dbits statement out of switch in shift
			  left by d fields section.
			Corrected generation of word mask to be unsigned.
		In storexfrag():
			Corrected to use stored data tree rather than the index
			  tree as the RHS.
			Have uloadpadop() called for CPU_AltiVec instead of
			  loadpadop().
		In storefrag(): Have uloadpadop() called for CPU_AltiVec
			instead of loadpadop().
		In fragment():
			Added 128 case.
			Modified 64 case to test _while.d[target_field(0,32)].
	In main.c: Updated version number.
	In oputils.c:
		Modified ia32_mask() to use unsigned values.
		Modified mmx_mask() to use unsigned values.
		In sse_mask():
			Made i an unsigned long long.
			Modified to use unsigned values.
		Modified max_mask() to use unsigned values.
		In altivec_mask():
			Made i an unsigned long long.
			Modified to use unsigned values.
		Added target_field().
	In oputils.h: Added prototype for target_field().
	In scheduler.c:altivecop():
		Modified debugging output in section for antidep with source
		  and destination spilled.
		Changed ANDN case to output "vandn".
	In scheduler.c:output_schedule():
		Modified debugging output in LOADR section.
		Corrected address generation in LOADRR section.
		Corrected section for trinary op to handle spills.
		Modified placement of newlines in spilling output of binary op
		  section.
		Corrected destination spilled section of LVSL case.
		Corrected address generation in STORERR section.
		Removed spill handling from STORERR section.
		Modified debugging output format in NUM section.
	In cpool.c:
		Modified spoolname(), spooldump32(), spooldump64(), and
		  spooldump128() to reserve regsavail()-3.
	In swarc.g:
		Modify ident alternative in expr13 rule to convert loaded value
		  to a SWAR type only for non-AltiVec targets.
	In tuple_binop.c:
		Combined CPU_MMX and else sections in ADD case of binop4u().
		Separated CPU_AltiVec sections in DIV and MOD cases of
		  binop4u().
		Separated CPU_AltiVec sections in DIV and MOD cases of
		  binop4us().
		Separated CPU_AltiVec sections in DIV and MOD cases of
		  binop4().
		Corrected NOT/AND section in DIV case of binop8ss().
		Corrected CPU_AltiVec section of MULH cases of binop16u() and
		  binop16().
		Rearranged MUL case in binop16ss() and added CPU_AltiVec
		  section.
		Corrected CPU_MMX || CPU_AltiVec section of ADD case of
		  binop64u().
		Added return 0 statement after call to bug() in EQ case of
		  binop128u().
		Added section to handle non-constant shifts to CPU_AltiVec
		  section of SHL and SHR cases of binop128u().
		Added break after call to bug() in SHR case in binop128s().
	In tuple_trinop.c:
		Removed TPERM cases from trinop16u() and trinop32u().
	In tuplegen.c:
		Added debugging sections to announce function entry/exit.
		Remove extraneous commentary.
		Modified loadrrop() to take an offset as an argument and store
		  it.
		Added check for equal frag to reuse test in lvslop().
		Corrected loadxop() for CPU_AltiVec.
		Added load_align().
		Added calls to load_align() to uloadop() and uloadpadop().
		Corrected reuse section in uloadop().
		Made identical load section uncompiled in uloadop().
		Added uloadpadop().
		Modified storerrop() to take an offset as an argument and store
		  it.
		Corrected storexop() for CPU_AltiVec.
		Corrected ustoreop().
		Renamed argument a to data in storeop().
		Modified replicate() to call target_field() to get index for
		  REPLs.
	In tuplegen.h: Added prototype for uloadpadop().
 07-30-00 R.Fisher
	Posted version of 000722.

