Hex Artifact Content
Not logged in

Artifact 3899985f36a95611f17b7bbd822ca1778ec4809f:

Unrecognized artifact
0000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 54  ==============.T
0020: 61 62 6c 65 47 65 6e 20 4c 61 6e 67 75 61 67 65  ableGen Language
0030: 20 49 6e 74 72 6f 64 75 63 74 69 6f 6e 0a 3d 3d   Introduction.==
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 2e 2e  ============....
0060: 20 63 6f 6e 74 65 6e 74 73 3a 3a 0a 20 20 20 3a   contents::.   :
0070: 6c 6f 63 61 6c 3a 0a 0a 2e 2e 20 77 61 72 6e 69  local:.... warni
0080: 6e 67 3a 3a 0a 20 20 20 54 68 69 73 20 64 6f 63  ng::.   This doc
0090: 75 6d 65 6e 74 20 69 73 20 65 78 74 72 65 6d 65  ument is extreme
00a0: 6c 79 20 72 6f 75 67 68 2e 20 49 66 20 79 6f 75  ly rough. If you
00b0: 20 66 69 6e 64 20 73 6f 6d 65 74 68 69 6e 67 20   find something 
00c0: 6c 61 63 6b 69 6e 67 2c 20 70 6c 65 61 73 65 0a  lacking, please.
00d0: 20 20 20 66 69 78 20 69 74 2c 20 66 69 6c 65 20     fix it, file 
00e0: 61 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  a documentation 
00f0: 62 75 67 2c 20 6f 72 20 61 73 6b 20 61 62 6f 75  bug, or ask abou
0100: 74 20 69 74 20 6f 6e 20 6c 6c 76 6d 2d 64 65 76  t it on llvm-dev
0110: 2e 0a 0a 49 6e 74 72 6f 64 75 63 74 69 6f 6e 0a  ...Introduction.
0120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68  ============..Th
0130: 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 6e  is document is n
0140: 6f 74 20 6d 65 61 6e 74 20 74 6f 20 62 65 20 61  ot meant to be a
0150: 20 6e 6f 72 6d 61 74 69 76 65 20 73 70 65 63 20   normative spec 
0160: 61 62 6f 75 74 20 74 68 65 20 54 61 62 6c 65 47  about the TableG
0170: 65 6e 20 6c 61 6e 67 75 61 67 65 0a 69 6e 20 61  en language.in a
0180: 6e 64 20 6f 66 20 69 74 73 65 6c 66 20 28 69 2e  nd of itself (i.
0190: 65 2e 20 68 6f 77 20 74 6f 20 75 6e 64 65 72 73  e. how to unders
01a0: 74 61 6e 64 20 61 20 67 69 76 65 6e 20 63 6f 6e  tand a given con
01b0: 73 74 72 75 63 74 20 69 6e 20 74 65 72 6d 73 20  struct in terms 
01c0: 6f 66 20 68 6f 77 0a 69 74 20 61 66 66 65 63 74  of how.it affect
01d0: 73 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  s the final set 
01e0: 6f 66 20 72 65 63 6f 72 64 73 20 72 65 70 72 65  of records repre
01f0: 73 65 6e 74 65 64 20 62 79 20 74 68 65 20 54 61  sented by the Ta
0200: 62 6c 65 47 65 6e 20 66 69 6c 65 29 2e 20 46 6f  bleGen file). Fo
0210: 72 0a 74 68 65 20 66 6f 72 6d 61 6c 20 6c 61 6e  r.the formal lan
0220: 67 75 61 67 65 20 73 70 65 63 69 66 69 63 61 74  guage specificat
0230: 69 6f 6e 2c 20 73 65 65 20 3a 64 6f 63 3a 60 4c  ion, see :doc:`L
0240: 61 6e 67 52 65 66 60 2e 0a 0a 54 61 62 6c 65 47  angRef`...TableG
0250: 65 6e 20 73 79 6e 74 61 78 0a 3d 3d 3d 3d 3d 3d  en syntax.======
0260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 61 62 6c 65  =========..Table
0270: 47 65 6e 20 64 6f 65 73 6e 27 74 20 63 61 72 65  Gen doesn't care
0280: 20 61 62 6f 75 74 20 74 68 65 20 6d 65 61 6e 69   about the meani
0290: 6e 67 20 6f 66 20 64 61 74 61 20 28 74 68 61 74  ng of data (that
02a0: 20 69 73 20 75 70 20 74 6f 20 74 68 65 20 62 61   is up to the ba
02b0: 63 6b 65 6e 64 20 74 6f 0a 64 65 66 69 6e 65 29  ckend to.define)
02c0: 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 63 61  , but it does ca
02d0: 72 65 20 61 62 6f 75 74 20 73 79 6e 74 61 78 2c  re about syntax,
02e0: 20 61 6e 64 20 69 74 20 65 6e 66 6f 72 63 65 73   and it enforces
02f0: 20 61 20 73 69 6d 70 6c 65 20 74 79 70 65 20 73   a simple type s
0300: 79 73 74 65 6d 2e 0a 54 68 69 73 20 73 65 63 74  ystem..This sect
0310: 69 6f 6e 20 64 65 73 63 72 69 62 65 73 20 74 68  ion describes th
0320: 65 20 73 79 6e 74 61 78 20 61 6e 64 20 74 68 65  e syntax and the
0330: 20 63 6f 6e 73 74 72 75 63 74 73 20 61 6c 6c 6f   constructs allo
0340: 77 65 64 20 69 6e 20 61 20 54 61 62 6c 65 47 65  wed in a TableGe
0350: 6e 20 66 69 6c 65 2e 0a 0a 54 61 62 6c 65 47 65  n file...TableGe
0360: 6e 20 70 72 69 6d 69 74 69 76 65 73 0a 2d 2d 2d  n primitives.---
0370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0380: 0a 0a 54 61 62 6c 65 47 65 6e 20 63 6f 6d 6d 65  ..TableGen comme
0390: 6e 74 73 0a 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e  nts.^^^^^^^^^^^^
03a0: 5e 5e 5e 5e 5e 0a 0a 54 61 62 6c 65 47 65 6e 20  ^^^^^..TableGen 
03b0: 73 75 70 70 6f 72 74 73 20 43 2b 2b 20 73 74 79  supports C++ sty
03c0: 6c 65 20 22 60 60 2f 2f 60 60 22 20 63 6f 6d 6d  le "``//``" comm
03d0: 65 6e 74 73 2c 20 77 68 69 63 68 20 72 75 6e 20  ents, which run 
03e0: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
03f0: 65 0a 6c 69 6e 65 2c 20 61 6e 64 20 69 74 20 61  e.line, and it a
0400: 6c 73 6f 20 73 75 70 70 6f 72 74 73 20 2a 2a 6e  lso supports **n
0410: 65 73 74 61 62 6c 65 2a 2a 20 22 60 60 2f 2a 20  estable** "``/* 
0420: 2a 2f 60 60 22 20 63 6f 6d 6d 65 6e 74 73 2e 0a  */``" comments..
0430: 0a 2e 2e 20 5f 54 61 62 6c 65 47 65 6e 20 74 79  ... _TableGen ty
0440: 70 65 3a 0a 0a 54 68 65 20 54 61 62 6c 65 47 65  pe:..The TableGe
0450: 6e 20 74 79 70 65 20 73 79 73 74 65 6d 0a 5e 5e  n type system.^^
0460: 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e  ^^^^^^^^^^^^^^^^
0470: 5e 5e 5e 5e 5e 5e 0a 0a 54 61 62 6c 65 47 65 6e  ^^^^^^..TableGen
0480: 20 66 69 6c 65 73 20 61 72 65 20 73 74 72 6f 6e   files are stron
0490: 67 6c 79 20 74 79 70 65 64 2c 20 69 6e 20 61 20  gly typed, in a 
04a0: 73 69 6d 70 6c 65 20 28 62 75 74 20 63 6f 6d 70  simple (but comp
04b0: 6c 65 74 65 29 20 74 79 70 65 2d 73 79 73 74 65  lete) type-syste
04c0: 6d 2e 0a 54 68 65 73 65 20 74 79 70 65 73 20 61  m..These types a
04d0: 72 65 20 75 73 65 64 20 74 6f 20 70 65 72 66 6f  re used to perfo
04e0: 72 6d 20 61 75 74 6f 6d 61 74 69 63 20 63 6f 6e  rm automatic con
04f0: 76 65 72 73 69 6f 6e 73 2c 20 63 68 65 63 6b 20  versions, check 
0500: 66 6f 72 20 65 72 72 6f 72 73 2c 20 61 6e 64 20  for errors, and 
0510: 74 6f 0a 68 65 6c 70 20 69 6e 74 65 72 66 61 63  to.help interfac
0520: 65 20 64 65 73 69 67 6e 65 72 73 20 63 6f 6e 73  e designers cons
0530: 74 72 61 69 6e 20 74 68 65 20 69 6e 70 75 74 20  train the input 
0540: 74 68 61 74 20 74 68 65 79 20 61 6c 6c 6f 77 2e  that they allow.
0550: 20 20 45 76 65 72 79 20 60 76 61 6c 75 65 0a 64    Every `value.d
0560: 65 66 69 6e 69 74 69 6f 6e 60 5f 20 69 73 20 72  efinition`_ is r
0570: 65 71 75 69 72 65 64 20 74 6f 20 68 61 76 65 20  equired to have 
0580: 61 6e 20 61 73 73 6f 63 69 61 74 65 64 20 74 79  an associated ty
0590: 70 65 2e 0a 0a 54 61 62 6c 65 47 65 6e 20 73 75  pe...TableGen su
05a0: 70 70 6f 72 74 73 20 61 20 6d 69 78 74 75 72 65  pports a mixture
05b0: 20 6f 66 20 76 65 72 79 20 6c 6f 77 2d 6c 65 76   of very low-lev
05c0: 65 6c 20 74 79 70 65 73 20 28 73 75 63 68 20 61  el types (such a
05d0: 73 20 60 60 62 69 74 60 60 29 20 61 6e 64 20 76  s ``bit``) and v
05e0: 65 72 79 0a 68 69 67 68 2d 6c 65 76 65 6c 20 74  ery.high-level t
05f0: 79 70 65 73 20 28 73 75 63 68 20 61 73 20 60 60  ypes (such as ``
0600: 64 61 67 60 60 29 2e 20 20 54 68 69 73 20 66 6c  dag``).  This fl
0610: 65 78 69 62 69 6c 69 74 79 20 69 73 20 77 68 61  exibility is wha
0620: 74 20 61 6c 6c 6f 77 73 20 69 74 20 74 6f 0a 64  t allows it to.d
0630: 65 73 63 72 69 62 65 20 61 20 77 69 64 65 20 72  escribe a wide r
0640: 61 6e 67 65 20 6f 66 20 69 6e 66 6f 72 6d 61 74  ange of informat
0650: 69 6f 6e 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79  ion conveniently
0660: 20 61 6e 64 20 63 6f 6d 70 61 63 74 6c 79 2e 20   and compactly. 
0670: 20 54 68 65 20 54 61 62 6c 65 47 65 6e 0a 74 79   The TableGen.ty
0680: 70 65 73 20 61 72 65 3a 0a 0a 60 60 62 69 74 60  pes are:..``bit`
0690: 60 0a 20 20 20 20 41 20 27 62 69 74 27 20 69 73  `.    A 'bit' is
06a0: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
06b0: 20 74 68 61 74 20 63 61 6e 20 68 6f 6c 64 20 65   that can hold e
06c0: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 0a 60  ither 0 or 1...`
06d0: 60 69 6e 74 60 60 0a 20 20 20 20 54 68 65 20 27  `int``.    The '
06e0: 69 6e 74 27 20 74 79 70 65 20 72 65 70 72 65 73  int' type repres
06f0: 65 6e 74 73 20 61 20 73 69 6d 70 6c 65 20 33 32  ents a simple 32
0700: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
0710: 75 65 2c 20 73 75 63 68 20 61 73 20 35 2e 0a 0a  ue, such as 5...
0720: 60 60 73 74 72 69 6e 67 60 60 0a 20 20 20 20 54  ``string``.    T
0730: 68 65 20 27 73 74 72 69 6e 67 27 20 74 79 70 65  he 'string' type
0740: 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20 6f   represents an o
0750: 72 64 65 72 65 64 20 73 65 71 75 65 6e 63 65 20  rdered sequence 
0760: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 6f 66  of characters of
0770: 20 61 72 62 69 74 72 61 72 79 0a 20 20 20 20 6c   arbitrary.    l
0780: 65 6e 67 74 68 2e 0a 0a 60 60 63 6f 64 65 60 60  ength...``code``
0790: 0a 20 20 20 20 54 68 65 20 60 63 6f 64 65 60 20  .    The `code` 
07a0: 74 79 70 65 20 72 65 70 72 65 73 65 6e 74 73 20  type represents 
07b0: 61 20 63 6f 64 65 20 66 72 61 67 6d 65 6e 74 2c  a code fragment,
07c0: 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 73 69   which can be si
07d0: 6e 67 6c 65 2f 6d 75 6c 74 69 2d 6c 69 6e 65 0a  ngle/multi-line.
07e0: 20 20 20 20 73 74 72 69 6e 67 20 6c 69 74 65 72      string liter
07f0: 61 6c 2e 0a 0a 60 60 62 69 74 73 3c 6e 3e 60 60  al...``bits<n>``
0800: 0a 20 20 20 20 41 20 27 62 69 74 73 27 20 74 79  .    A 'bits' ty
0810: 70 65 20 69 73 20 61 6e 20 61 72 62 69 74 72 61  pe is an arbitra
0820: 72 79 2c 20 62 75 74 20 66 69 78 65 64 2c 20 73  ry, but fixed, s
0830: 69 7a 65 20 69 6e 74 65 67 65 72 20 74 68 61 74  ize integer that
0840: 20 69 73 20 62 72 6f 6b 65 6e 20 75 70 0a 20 20   is broken up.  
0850: 20 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61    into individua
0860: 6c 20 62 69 74 73 2e 20 20 54 68 69 73 20 74 79  l bits.  This ty
0870: 70 65 20 69 73 20 75 73 65 66 75 6c 20 62 65 63  pe is useful bec
0880: 61 75 73 65 20 69 74 20 63 61 6e 20 68 61 6e 64  ause it can hand
0890: 6c 65 20 73 6f 6d 65 20 62 69 74 73 0a 20 20 20  le some bits.   
08a0: 20 62 65 69 6e 67 20 64 65 66 69 6e 65 64 20 77   being defined w
08b0: 68 69 6c 65 20 6f 74 68 65 72 73 20 61 72 65 20  hile others are 
08c0: 75 6e 64 65 66 69 6e 65 64 2e 0a 0a 60 60 6c 69  undefined...``li
08d0: 73 74 3c 74 79 3e 60 60 0a 20 20 20 20 54 68 69  st<ty>``.    Thi
08e0: 73 20 74 79 70 65 20 72 65 70 72 65 73 65 6e 74  s type represent
08f0: 73 20 61 20 6c 69 73 74 20 77 68 6f 73 65 20 65  s a list whose e
0900: 6c 65 6d 65 6e 74 73 20 61 72 65 20 73 6f 6d 65  lements are some
0910: 20 6f 74 68 65 72 20 74 79 70 65 2e 20 20 54 68   other type.  Th
0920: 65 0a 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20  e.    contained 
0930: 74 79 70 65 20 69 73 20 61 72 62 69 74 72 61 72  type is arbitrar
0940: 79 3a 20 69 74 20 63 61 6e 20 65 76 65 6e 20 62  y: it can even b
0950: 65 20 61 6e 6f 74 68 65 72 20 6c 69 73 74 20 74  e another list t
0960: 79 70 65 2e 0a 0a 43 6c 61 73 73 20 74 79 70 65  ype...Class type
0970: 0a 20 20 20 20 53 70 65 63 69 66 79 69 6e 67 20  .    Specifying 
0980: 61 20 63 6c 61 73 73 20 6e 61 6d 65 20 69 6e 20  a class name in 
0990: 61 20 74 79 70 65 20 63 6f 6e 74 65 78 74 20 6d  a type context m
09a0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 64 65  eans that the de
09b0: 66 69 6e 65 64 20 76 61 6c 75 65 20 6d 75 73 74  fined value must
09c0: 0a 20 20 20 20 62 65 20 61 20 73 75 62 63 6c 61  .    be a subcla
09d0: 73 73 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ss of the specif
09e0: 69 65 64 20 63 6c 61 73 73 2e 20 20 54 68 69 73  ied class.  This
09f0: 20 69 73 20 75 73 65 66 75 6c 20 69 6e 20 63 6f   is useful in co
0a00: 6e 6a 75 6e 63 74 69 6f 6e 20 77 69 74 68 0a 20  njunction with. 
0a10: 20 20 20 74 68 65 20 60 60 6c 69 73 74 60 60 20     the ``list`` 
0a20: 74 79 70 65 2c 20 66 6f 72 20 65 78 61 6d 70 6c  type, for exampl
0a30: 65 2c 20 74 6f 20 63 6f 6e 73 74 72 61 69 6e 20  e, to constrain 
0a40: 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20  the elements of 
0a50: 74 68 65 20 6c 69 73 74 20 74 6f 20 61 0a 20 20  the list to a.  
0a60: 20 20 63 6f 6d 6d 6f 6e 20 62 61 73 65 20 63 6c    common base cl
0a70: 61 73 73 20 28 65 2e 67 2e 2c 20 61 20 60 60 6c  ass (e.g., a ``l
0a80: 69 73 74 3c 52 65 67 69 73 74 65 72 3e 60 60 20  ist<Register>`` 
0a90: 63 61 6e 20 6f 6e 6c 79 20 63 6f 6e 74 61 69 6e  can only contain
0aa0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 0a 20 20 20   definitions.   
0ab0: 20 64 65 72 69 76 65 64 20 66 72 6f 6d 20 74 68   derived from th
0ac0: 65 20 22 60 60 52 65 67 69 73 74 65 72 60 60 22  e "``Register``"
0ad0: 20 63 6c 61 73 73 29 2e 0a 0a 60 60 64 61 67 60   class)...``dag`
0ae0: 60 0a 20 20 20 20 54 68 69 73 20 74 79 70 65 20  `.    This type 
0af0: 72 65 70 72 65 73 65 6e 74 73 20 61 20 6e 65 73  represents a nes
0b00: 74 61 62 6c 65 20 64 69 72 65 63 74 65 64 20 67  table directed g
0b10: 72 61 70 68 20 6f 66 20 65 6c 65 6d 65 6e 74 73  raph of elements
0b20: 2e 0a 0a 54 6f 20 64 61 74 65 2c 20 74 68 65 73  ...To date, thes
0b30: 65 20 74 79 70 65 73 20 68 61 76 65 20 62 65 65  e types have bee
0b40: 6e 20 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72  n sufficient for
0b50: 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 69 6e   describing thin
0b60: 67 73 20 74 68 61 74 20 54 61 62 6c 65 47 65 6e  gs that TableGen
0b70: 0a 68 61 73 20 62 65 65 6e 20 75 73 65 64 20 66  .has been used f
0b80: 6f 72 2c 20 62 75 74 20 69 74 20 69 73 20 73 74  or, but it is st
0b90: 72 61 69 67 68 74 2d 66 6f 72 77 61 72 64 20 74  raight-forward t
0ba0: 6f 20 65 78 74 65 6e 64 20 74 68 69 73 20 6c 69  o extend this li
0bb0: 73 74 20 69 66 20 6e 65 65 64 65 64 2e 0a 0a 2e  st if needed....
0bc0: 2e 20 5f 54 61 62 6c 65 47 65 6e 20 65 78 70 72  . _TableGen expr
0bd0: 65 73 73 69 6f 6e 73 3a 0a 0a 54 61 62 6c 65 47  essions:..TableG
0be0: 65 6e 20 76 61 6c 75 65 73 20 61 6e 64 20 65 78  en values and ex
0bf0: 70 72 65 73 73 69 6f 6e 73 0a 5e 5e 5e 5e 5e 5e  pressions.^^^^^^
0c00: 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e  ^^^^^^^^^^^^^^^^
0c10: 5e 5e 5e 5e 5e 5e 5e 5e 5e 0a 0a 54 61 62 6c 65  ^^^^^^^^^..Table
0c20: 47 65 6e 20 61 6c 6c 6f 77 73 20 66 6f 72 20 61  Gen allows for a
0c30: 20 70 72 65 74 74 79 20 72 65 61 73 6f 6e 61 62   pretty reasonab
0c40: 6c 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  le number of dif
0c50: 66 65 72 65 6e 74 20 65 78 70 72 65 73 73 69 6f  ferent expressio
0c60: 6e 20 66 6f 72 6d 73 0a 77 68 65 6e 20 62 75 69  n forms.when bui
0c70: 6c 64 69 6e 67 20 75 70 20 76 61 6c 75 65 73 2e  lding up values.
0c80: 20 20 54 68 65 73 65 20 66 6f 72 6d 73 20 61 6c    These forms al
0c90: 6c 6f 77 20 74 68 65 20 54 61 62 6c 65 47 65 6e  low the TableGen
0ca0: 20 66 69 6c 65 20 74 6f 20 62 65 20 77 72 69 74   file to be writ
0cb0: 74 65 6e 20 69 6e 20 61 0a 6e 61 74 75 72 61 6c  ten in a.natural
0cc0: 20 73 79 6e 74 61 78 20 61 6e 64 20 66 6c 61 76   syntax and flav
0cd0: 6f 72 20 66 6f 72 20 74 68 65 20 61 70 70 6c 69  or for the appli
0ce0: 63 61 74 69 6f 6e 2e 20 20 54 68 65 20 63 75 72  cation.  The cur
0cf0: 72 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  rent expression 
0d00: 66 6f 72 6d 73 0a 73 75 70 70 6f 72 74 65 64 20  forms.supported 
0d10: 69 6e 63 6c 75 64 65 3a 0a 0a 60 60 3f 60 60 0a  include:..``?``.
0d20: 20 20 20 20 75 6e 69 6e 69 74 69 61 6c 69 7a 65      uninitialize
0d30: 64 20 66 69 65 6c 64 0a 0a 60 60 30 62 31 30 30  d field..``0b100
0d40: 31 30 31 31 60 60 0a 20 20 20 20 62 69 6e 61 72  1011``.    binar
0d50: 79 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  y integer value.
0d60: 0a 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20 74  .    Note that t
0d70: 68 69 73 20 69 73 20 73 69 7a 65 64 20 62 79 20  his is sized by 
0d80: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  the number of bi
0d90: 74 73 20 67 69 76 65 6e 20 61 6e 64 20 77 69 6c  ts given and wil
0da0: 6c 20 6e 6f 74 20 62 65 0a 20 20 20 20 73 69 6c  l not be.    sil
0db0: 65 6e 74 6c 79 20 65 78 74 65 6e 64 65 64 2f 74  ently extended/t
0dc0: 72 75 6e 63 61 74 65 64 2e 0a 0a 60 60 37 60 60  runcated...``7``
0dd0: 0a 20 20 20 20 64 65 63 69 6d 61 6c 20 69 6e 74  .    decimal int
0de0: 65 67 65 72 20 76 61 6c 75 65 0a 0a 60 60 30 78  eger value..``0x
0df0: 37 46 60 60 0a 20 20 20 20 68 65 78 61 64 65 63  7F``.    hexadec
0e00: 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 76 61 6c  imal integer val
0e10: 75 65 0a 0a 60 60 22 66 6f 6f 22 60 60 0a 20 20  ue..``"foo"``.  
0e20: 20 20 61 20 73 69 6e 67 6c 65 2d 6c 69 6e 65 20    a single-line 
0e30: 73 74 72 69 6e 67 20 76 61 6c 75 65 2c 20 63 61  string value, ca
0e40: 6e 20 62 65 20 61 73 73 69 67 6e 65 64 20 74 6f  n be assigned to
0e50: 20 60 60 73 74 72 69 6e 67 60 60 20 6f 72 20 60   ``string`` or `
0e60: 60 63 6f 64 65 60 60 20 76 61 72 69 61 62 6c 65  `code`` variable
0e70: 2e 0a 0a 60 60 5b 7b 20 2e 2e 2e 20 7d 5d 60 60  ...``[{ ... }]``
0e80: 0a 20 20 20 20 75 73 75 61 6c 6c 79 20 63 61 6c  .    usually cal
0e90: 6c 65 64 20 61 20 22 63 6f 64 65 20 66 72 61 67  led a "code frag
0ea0: 6d 65 6e 74 22 2c 20 62 75 74 20 69 73 20 6a 75  ment", but is ju
0eb0: 73 74 20 61 20 6d 75 6c 74 69 6c 69 6e 65 20 73  st a multiline s
0ec0: 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 0a 60  tring literal..`
0ed0: 60 5b 20 58 2c 20 59 2c 20 5a 20 5d 3c 74 79 70  `[ X, Y, Z ]<typ
0ee0: 65 3e 60 60 0a 20 20 20 20 6c 69 73 74 20 76 61  e>``.    list va
0ef0: 6c 75 65 2e 20 20 3c 74 79 70 65 3e 20 69 73 20  lue.  <type> is 
0f00: 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20  the type of the 
0f10: 6c 69 73 74 20 65 6c 65 6d 65 6e 74 20 61 6e 64  list element and
0f20: 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 70 74 69   is usually opti
0f30: 6f 6e 61 6c 2e 0a 20 20 20 20 49 6e 20 72 61 72  onal..    In rar
0f40: 65 20 63 61 73 65 73 2c 20 54 61 62 6c 65 47 65  e cases, TableGe
0f50: 6e 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 64  n is unable to d
0f60: 65 64 75 63 65 20 74 68 65 20 65 6c 65 6d 65 6e  educe the elemen
0f70: 74 20 74 79 70 65 20 69 6e 20 77 68 69 63 68 20  t type in which 
0f80: 63 61 73 65 0a 20 20 20 20 74 68 65 20 75 73 65  case.    the use
0f90: 72 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 69  r must specify i
0fa0: 74 20 65 78 70 6c 69 63 69 74 6c 79 2e 0a 0a 60  t explicitly...`
0fb0: 60 7b 20 61 2c 20 62 2c 20 30 62 31 30 20 7d 60  `{ a, b, 0b10 }`
0fc0: 60 0a 20 20 20 20 69 6e 69 74 69 61 6c 69 7a 65  `.    initialize
0fd0: 72 20 66 6f 72 20 61 20 22 62 69 74 73 3c 34 3e  r for a "bits<4>
0fe0: 22 20 76 61 6c 75 65 2e 0a 20 20 20 20 31 2d 62  " value..    1-b
0ff0: 69 74 20 66 72 6f 6d 20 22 61 22 2c 20 31 2d 62  it from "a", 1-b
1000: 69 74 20 66 72 6f 6d 20 22 62 22 2c 20 32 2d 62  it from "b", 2-b
1010: 69 74 73 20 66 72 6f 6d 20 30 62 31 30 2e 0a 0a  its from 0b10...
1020: 60 60 76 61 6c 75 65 60 60 0a 20 20 20 20 76 61  ``value``.    va
1030: 6c 75 65 20 72 65 66 65 72 65 6e 63 65 0a 0a 60  lue reference..`
1040: 60 76 61 6c 75 65 7b 31 37 7d 60 60 0a 20 20 20  `value{17}``.   
1050: 20 61 63 63 65 73 73 20 74 6f 20 6f 6e 65 20 62   access to one b
1060: 69 74 20 6f 66 20 61 20 76 61 6c 75 65 0a 0a 60  it of a value..`
1070: 60 76 61 6c 75 65 7b 31 35 2d 31 37 7d 60 60 0a  `value{15-17}``.
1080: 20 20 20 20 61 63 63 65 73 73 20 74 6f 20 61 6e      access to an
1090: 20 6f 72 64 65 72 65 64 20 73 65 71 75 65 6e 63   ordered sequenc
10a0: 65 20 6f 66 20 62 69 74 73 20 6f 66 20 61 20 76  e of bits of a v
10b0: 61 6c 75 65 2c 20 69 6e 20 70 61 72 74 69 63 75  alue, in particu
10c0: 6c 61 72 20 60 60 76 61 6c 75 65 7b 31 35 2d 31  lar ``value{15-1
10d0: 37 7d 60 60 0a 20 20 20 20 70 72 6f 64 75 63 65  7}``.    produce
10e0: 73 20 61 6e 20 6f 72 64 65 72 20 74 68 61 74 20  s an order that 
10f0: 69 73 20 74 68 65 20 72 65 76 65 72 73 65 20 6f  is the reverse o
1100: 66 20 60 60 76 61 6c 75 65 7b 31 37 2d 31 35 7d  f ``value{17-15}
1110: 60 60 2e 0a 0a 60 60 44 45 46 60 60 0a 20 20 20  ``...``DEF``.   
1120: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20   reference to a 
1130: 72 65 63 6f 72 64 20 64 65 66 69 6e 69 74 69 6f  record definitio
1140: 6e 0a 0a 60 60 43 4c 41 53 53 3c 76 61 6c 20 6c  n..``CLASS<val l
1150: 69 73 74 3e 60 60 0a 20 20 20 20 72 65 66 65 72  ist>``.    refer
1160: 65 6e 63 65 20 74 6f 20 61 20 6e 65 77 20 61 6e  ence to a new an
1170: 6f 6e 79 6d 6f 75 73 20 64 65 66 69 6e 69 74 69  onymous definiti
1180: 6f 6e 20 6f 66 20 43 4c 41 53 53 20 77 69 74 68  on of CLASS with
1190: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
11a0: 65 6d 70 6c 61 74 65 0a 20 20 20 20 61 72 67 75  emplate.    argu
11b0: 6d 65 6e 74 73 2e 0a 0a 60 60 58 2e 59 60 60 0a  ments...``X.Y``.
11c0: 20 20 20 20 72 65 66 65 72 65 6e 63 65 20 74 6f      reference to
11d0: 20 74 68 65 20 73 75 62 66 69 65 6c 64 20 6f 66   the subfield of
11e0: 20 61 20 76 61 6c 75 65 0a 0a 60 60 6c 69 73 74   a value..``list
11f0: 5b 34 2d 37 2c 31 37 2c 32 2d 33 5d 60 60 0a 20  [4-7,17,2-3]``. 
1200: 20 20 20 41 20 73 6c 69 63 65 20 6f 66 20 74 68     A slice of th
1210: 65 20 27 6c 69 73 74 27 20 6c 69 73 74 2c 20 69  e 'list' list, i
1220: 6e 63 6c 75 64 69 6e 67 20 65 6c 65 6d 65 6e 74  ncluding element
1230: 73 20 34 2c 35 2c 36 2c 37 2c 31 37 2c 32 2c 20  s 4,5,6,7,17,2, 
1240: 61 6e 64 20 33 20 66 72 6f 6d 20 69 74 2e 0a 20  and 3 from it.. 
1250: 20 20 20 45 6c 65 6d 65 6e 74 73 20 6d 61 79 20     Elements may 
1260: 62 65 20 69 6e 63 6c 75 64 65 64 20 6d 75 6c 74  be included mult
1270: 69 70 6c 65 20 74 69 6d 65 73 2e 0a 0a 60 60 66  iple times...``f
1280: 6f 72 65 61 63 68 20 3c 76 61 72 3e 20 3d 20 5b  oreach <var> = [
1290: 20 3c 6c 69 73 74 3e 20 5d 20 69 6e 20 7b 20 3c   <list> ] in { <
12a0: 62 6f 64 79 3e 20 7d 60 60 0a 0a 60 60 66 6f 72  body> }``..``for
12b0: 65 61 63 68 20 3c 76 61 72 3e 20 3d 20 5b 20 3c  each <var> = [ <
12c0: 6c 69 73 74 3e 20 5d 20 69 6e 20 3c 64 65 66 3e  list> ] in <def>
12d0: 60 60 0a 20 20 20 20 52 65 70 6c 69 63 61 74 65  ``.    Replicate
12e0: 20 3c 62 6f 64 79 3e 20 6f 72 20 3c 64 65 66 3e   <body> or <def>
12f0: 2c 20 72 65 70 6c 61 63 69 6e 67 20 69 6e 73 74  , replacing inst
1300: 61 6e 63 65 73 20 6f 66 20 3c 76 61 72 3e 20 77  ances of <var> w
1310: 69 74 68 20 65 61 63 68 20 76 61 6c 75 65 0a 20  ith each value. 
1320: 20 20 20 69 6e 20 3c 6c 69 73 74 3e 2e 20 20 3c     in <list>.  <
1330: 76 61 72 3e 20 69 73 20 73 63 6f 70 65 64 20 61  var> is scoped a
1340: 74 20 74 68 65 20 6c 65 76 65 6c 20 6f 66 20 74  t the level of t
1350: 68 65 20 60 60 66 6f 72 65 61 63 68 60 60 20 6c  he ``foreach`` l
1360: 6f 6f 70 20 61 6e 64 20 6d 75 73 74 0a 20 20 20  oop and must.   
1370: 20 6e 6f 74 20 63 6f 6e 66 6c 69 63 74 20 77 69   not conflict wi
1380: 74 68 20 61 6e 79 20 6f 74 68 65 72 20 6f 62 6a  th any other obj
1390: 65 63 74 20 69 6e 74 72 6f 64 75 63 65 64 20 69  ect introduced i
13a0: 6e 20 3c 62 6f 64 79 3e 20 6f 72 20 3c 64 65 66  n <body> or <def
13b0: 3e 2e 20 20 43 75 72 72 65 6e 74 6c 79 0a 20 20  >.  Currently.  
13c0: 20 20 6f 6e 6c 79 20 60 60 64 65 66 60 60 5c 73    only ``def``\s
13d0: 20 61 72 65 20 65 78 70 61 6e 64 65 64 20 77 69   are expanded wi
13e0: 74 68 69 6e 20 3c 62 6f 64 79 3e 2e 0a 0a 60 60  thin <body>...``
13f0: 66 6f 72 65 61 63 68 20 3c 76 61 72 3e 20 3d 20  foreach <var> = 
1400: 30 2d 31 35 20 69 6e 20 2e 2e 2e 60 60 0a 0a 60  0-15 in ...``..`
1410: 60 66 6f 72 65 61 63 68 20 3c 76 61 72 3e 20 3d  `foreach <var> =
1420: 20 7b 30 2d 31 35 2c 33 32 2d 34 37 7d 20 69 6e   {0-15,32-47} in
1430: 20 2e 2e 2e 60 60 0a 20 20 20 20 4c 6f 6f 70 20   ...``.    Loop 
1440: 6f 76 65 72 20 72 61 6e 67 65 73 20 6f 66 20 69  over ranges of i
1450: 6e 74 65 67 65 72 73 2e 20 54 68 65 20 62 72 61  ntegers. The bra
1460: 63 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64  ces are required
1470: 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 61   for multiple ra
1480: 6e 67 65 73 2e 0a 0a 60 60 28 44 45 46 20 61 2c  nges...``(DEF a,
1490: 20 62 29 60 60 0a 20 20 20 20 61 20 64 61 67 20   b)``.    a dag 
14a0: 76 61 6c 75 65 2e 20 20 54 68 65 20 66 69 72 73  value.  The firs
14b0: 74 20 65 6c 65 6d 65 6e 74 20 69 73 20 72 65 71  t element is req
14c0: 75 69 72 65 64 20 74 6f 20 62 65 20 61 20 72 65  uired to be a re
14d0: 63 6f 72 64 20 64 65 66 69 6e 69 74 69 6f 6e 2c  cord definition,
14e0: 20 74 68 65 0a 20 20 20 20 72 65 6d 61 69 6e 69   the.    remaini
14f0: 6e 67 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  ng elements in t
1500: 68 65 20 6c 69 73 74 20 6d 61 79 20 62 65 20 61  he list may be a
1510: 72 62 69 74 72 61 72 79 20 6f 74 68 65 72 20 76  rbitrary other v
1520: 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67  alues, including
1530: 0a 20 20 20 20 6e 65 73 74 65 64 20 60 60 60 64  .    nested ```d
1540: 61 67 60 60 27 20 76 61 6c 75 65 73 2e 0a 0a 60  ag``' values...`
1550: 60 21 6c 69 73 74 63 6f 6e 63 61 74 28 61 2c 20  `!listconcat(a, 
1560: 62 2c 20 2e 2e 2e 29 60 60 0a 20 20 20 20 41 20  b, ...)``.    A 
1570: 6c 69 73 74 20 76 61 6c 75 65 20 74 68 61 74 20  list value that 
1580: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  is the result of
1590: 20 63 6f 6e 63 61 74 65 6e 61 74 69 6e 67 20 74   concatenating t
15a0: 68 65 20 27 61 27 20 61 6e 64 20 27 62 27 20 6c  he 'a' and 'b' l
15b0: 69 73 74 73 2e 0a 20 20 20 20 54 68 65 20 6c 69  ists..    The li
15c0: 73 74 73 20 6d 75 73 74 20 68 61 76 65 20 74 68  sts must have th
15d0: 65 20 73 61 6d 65 20 65 6c 65 6d 65 6e 74 20 74  e same element t
15e0: 79 70 65 2e 0a 20 20 20 20 4d 6f 72 65 20 74 68  ype..    More th
15f0: 61 6e 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  an two arguments
1600: 20 61 72 65 20 61 63 63 65 70 74 65 64 20 77 69   are accepted wi
1610: 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 62 65  th the result be
1620: 69 6e 67 20 74 68 65 20 63 6f 6e 63 61 74 65 6e  ing the concaten
1630: 61 74 69 6f 6e 0a 20 20 20 20 6f 66 20 61 6c 6c  ation.    of all
1640: 20 74 68 65 20 6c 69 73 74 73 20 67 69 76 65 6e   the lists given
1650: 2e 0a 0a 60 60 21 73 74 72 63 6f 6e 63 61 74 28  ...``!strconcat(
1660: 61 2c 20 62 2c 20 2e 2e 2e 29 60 60 0a 20 20 20  a, b, ...)``.   
1670: 20 41 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20   A string value 
1680: 74 68 61 74 20 69 73 20 74 68 65 20 72 65 73 75  that is the resu
1690: 6c 74 20 6f 66 20 63 6f 6e 63 61 74 65 6e 61 74  lt of concatenat
16a0: 69 6e 67 20 74 68 65 20 27 61 27 20 61 6e 64 20  ing the 'a' and 
16b0: 27 62 27 20 73 74 72 69 6e 67 73 2e 0a 20 20 20  'b' strings..   
16c0: 20 4d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 61   More than two a
16d0: 72 67 75 6d 65 6e 74 73 20 61 72 65 20 61 63 63  rguments are acc
16e0: 65 70 74 65 64 20 77 69 74 68 20 74 68 65 20 72  epted with the r
16f0: 65 73 75 6c 74 20 62 65 69 6e 67 20 74 68 65 20  esult being the 
1700: 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 0a 20 20  concatenation.  
1710: 20 20 6f 66 20 61 6c 6c 20 74 68 65 20 73 74 72    of all the str
1720: 69 6e 67 73 20 67 69 76 65 6e 2e 0a 0a 60 60 73  ings given...``s
1730: 74 72 31 23 73 74 72 32 60 60 0a 20 20 20 20 22  tr1#str2``.    "
1740: 23 22 20 28 70 61 73 74 65 29 20 69 73 20 61 20  #" (paste) is a 
1750: 73 68 6f 72 74 68 61 6e 64 20 66 6f 72 20 21 73  shorthand for !s
1760: 74 72 63 6f 6e 63 61 74 2e 20 20 49 74 20 6d 61  trconcat.  It ma
1770: 79 20 63 6f 6e 63 61 74 65 6e 61 74 65 20 74 68  y concatenate th
1780: 69 6e 67 73 20 74 68 61 74 0a 20 20 20 20 61 72  ings that.    ar
1790: 65 20 6e 6f 74 20 71 75 6f 74 65 64 20 73 74 72  e not quoted str
17a0: 69 6e 67 73 2c 20 69 6e 20 77 68 69 63 68 20 63  ings, in which c
17b0: 61 73 65 20 61 6e 20 69 6d 70 6c 69 63 69 74 20  ase an implicit 
17c0: 21 63 61 73 74 3c 73 74 72 69 6e 67 3e 20 69 73  !cast<string> is
17d0: 20 64 6f 6e 65 20 6f 6e 0a 20 20 20 20 74 68 65   done on.    the
17e0: 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20   operand of the 
17f0: 70 61 73 74 65 2e 0a 0a 60 60 21 63 61 73 74 3c  paste...``!cast<
1800: 74 79 70 65 3e 28 61 29 60 60 0a 20 20 20 20 41  type>(a)``.    A
1810: 20 73 79 6d 62 6f 6c 20 6f 66 20 74 79 70 65 20   symbol of type 
1820: 2a 74 79 70 65 2a 20 6f 62 74 61 69 6e 65 64 20  *type* obtained 
1830: 62 79 20 6c 6f 6f 6b 69 6e 67 20 75 70 20 74 68  by looking up th
1840: 65 20 73 74 72 69 6e 67 20 27 61 27 20 69 6e 20  e string 'a' in 
1850: 74 68 65 20 73 79 6d 62 6f 6c 0a 20 20 20 20 74  the symbol.    t
1860: 61 62 6c 65 2e 20 20 49 66 20 74 68 65 20 74 79  able.  If the ty
1870: 70 65 20 6f 66 20 27 61 27 20 64 6f 65 73 20 6e  pe of 'a' does n
1880: 6f 74 20 6d 61 74 63 68 20 2a 74 79 70 65 2a 2c  ot match *type*,
1890: 20 54 61 62 6c 65 47 65 6e 20 61 62 6f 72 74 73   TableGen aborts
18a0: 20 77 69 74 68 20 61 6e 0a 20 20 20 20 65 72 72   with an.    err
18b0: 6f 72 2e 20 21 63 61 73 74 3c 73 74 72 69 6e 67  or. !cast<string
18c0: 3e 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 63  > is a special c
18d0: 61 73 65 20 69 6e 20 74 68 61 74 20 74 68 65 20  ase in that the 
18e0: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
18f0: 20 61 6e 0a 20 20 20 20 6f 62 6a 65 63 74 20 64   an.    object d
1900: 65 66 69 6e 65 64 20 62 79 20 61 20 27 64 65 66  efined by a 'def
1910: 27 20 63 6f 6e 73 74 72 75 63 74 2e 0a 0a 60 60  ' construct...``
1920: 21 73 75 62 73 74 28 61 2c 20 62 2c 20 63 29 60  !subst(a, b, c)`
1930: 60 0a 20 20 20 20 49 66 20 27 61 27 20 61 6e 64  `.    If 'a' and
1940: 20 27 62 27 20 61 72 65 20 6f 66 20 73 74 72 69   'b' are of stri
1950: 6e 67 20 74 79 70 65 20 6f 72 20 61 72 65 20 73  ng type or are s
1960: 79 6d 62 6f 6c 20 72 65 66 65 72 65 6e 63 65 73  ymbol references
1970: 2c 20 73 75 62 73 74 69 74 75 74 65 20 27 62 27  , substitute 'b'
1980: 0a 20 20 20 20 66 6f 72 20 27 61 27 20 69 6e 20  .    for 'a' in 
1990: 27 63 2e 27 20 20 54 68 69 73 20 6f 70 65 72 61  'c.'  This opera
19a0: 74 69 6f 6e 20 69 73 20 61 6e 61 6c 6f 67 6f 75  tion is analogou
19b0: 73 20 74 6f 20 24 28 73 75 62 73 74 29 20 69 6e  s to $(subst) in
19c0: 20 47 4e 55 20 6d 61 6b 65 2e 0a 0a 60 60 21 66   GNU make...``!f
19d0: 6f 72 65 61 63 68 28 61 2c 20 62 2c 20 63 29 60  oreach(a, b, c)`
19e0: 60 0a 20 20 20 20 46 6f 72 20 65 61 63 68 20 6d  `.    For each m
19f0: 65 6d 62 65 72 20 6f 66 20 64 61 67 20 6f 72 20  ember of dag or 
1a00: 6c 69 73 74 20 27 62 27 20 61 70 70 6c 79 20 6f  list 'b' apply o
1a10: 70 65 72 61 74 6f 72 20 27 63 2e 27 20 20 27 61  perator 'c.'  'a
1a20: 27 20 69 73 20 61 20 64 75 6d 6d 79 0a 20 20 20  ' is a dummy.   
1a30: 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 73   variable that s
1a40: 68 6f 75 6c 64 20 62 65 20 64 65 63 6c 61 72 65  hould be declare
1a50: 64 20 61 73 20 61 20 6d 65 6d 62 65 72 20 76 61  d as a member va
1a60: 72 69 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 73  riable of an ins
1a70: 74 61 6e 74 69 61 74 65 64 0a 20 20 20 20 63 6c  tantiated.    cl
1a80: 61 73 73 2e 20 20 54 68 69 73 20 6f 70 65 72 61  ass.  This opera
1a90: 74 69 6f 6e 20 69 73 20 61 6e 61 6c 6f 67 6f 75  tion is analogou
1aa0: 73 20 74 6f 20 24 28 66 6f 72 65 61 63 68 29 20  s to $(foreach) 
1ab0: 69 6e 20 47 4e 55 20 6d 61 6b 65 2e 0a 0a 60 60  in GNU make...``
1ac0: 21 68 65 61 64 28 61 29 60 60 0a 20 20 20 20 54  !head(a)``.    T
1ad0: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1ae0: 20 6f 66 20 6c 69 73 74 20 27 61 2e 27 0a 0a 60   of list 'a.'..`
1af0: 60 21 74 61 69 6c 28 61 29 60 60 0a 20 20 20 20  `!tail(a)``.    
1b00: 54 68 65 20 32 6e 64 2d 4e 20 65 6c 65 6d 65 6e  The 2nd-N elemen
1b10: 74 73 20 6f 66 20 6c 69 73 74 20 27 61 2e 27 0a  ts of list 'a.'.
1b20: 0a 60 60 21 65 6d 70 74 79 28 61 29 60 60 0a 20  .``!empty(a)``. 
1b30: 20 20 20 41 6e 20 69 6e 74 65 67 65 72 20 7b 30     An integer {0
1b40: 2c 31 7d 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ,1} indicating w
1b50: 68 65 74 68 65 72 20 6c 69 73 74 20 27 61 27 20  hether list 'a' 
1b60: 69 73 20 65 6d 70 74 79 2e 0a 0a 60 60 21 69 66  is empty...``!if
1b70: 28 61 2c 62 2c 63 29 60 60 0a 20 20 27 62 27 20  (a,b,c)``.  'b' 
1b80: 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
1b90: 20 27 69 6e 74 27 20 6f 72 20 27 62 69 74 27 20   'int' or 'bit' 
1ba0: 6f 70 65 72 61 74 6f 72 20 27 61 27 20 69 73 20  operator 'a' is 
1bb0: 6e 6f 6e 7a 65 72 6f 2c 20 27 63 27 20 6f 74 68  nonzero, 'c' oth
1bc0: 65 72 77 69 73 65 2e 0a 0a 60 60 21 65 71 28 61  erwise...``!eq(a
1bd0: 2c 62 29 60 60 0a 20 20 20 20 27 62 69 74 20 31  ,b)``.    'bit 1
1be0: 27 20 69 66 20 73 74 72 69 6e 67 20 61 20 69 73  ' if string a is
1bf0: 20 65 71 75 61 6c 20 74 6f 20 73 74 72 69 6e 67   equal to string
1c00: 20 62 2c 20 30 20 6f 74 68 65 72 77 69 73 65 2e   b, 0 otherwise.
1c10: 20 20 54 68 69 73 20 6f 6e 6c 79 20 6f 70 65 72    This only oper
1c20: 61 74 65 73 0a 20 20 20 20 6f 6e 20 73 74 72 69  ates.    on stri
1c30: 6e 67 2c 20 69 6e 74 20 61 6e 64 20 62 69 74 20  ng, int and bit 
1c40: 6f 62 6a 65 63 74 73 2e 20 20 55 73 65 20 21 63  objects.  Use !c
1c50: 61 73 74 3c 73 74 72 69 6e 67 3e 20 74 6f 20 63  ast<string> to c
1c60: 6f 6d 70 61 72 65 20 6f 74 68 65 72 20 74 79 70  ompare other typ
1c70: 65 73 20 6f 66 0a 20 20 20 20 6f 62 6a 65 63 74  es of.    object
1c80: 73 2e 0a 0a 60 60 21 73 68 6c 28 61 2c 62 29 60  s...``!shl(a,b)`
1c90: 60 20 60 60 21 73 72 6c 28 61 2c 62 29 60 60 20  ` ``!srl(a,b)`` 
1ca0: 60 60 21 73 72 61 28 61 2c 62 29 60 60 20 60 60  ``!sra(a,b)`` ``
1cb0: 21 61 64 64 28 61 2c 62 29 60 60 20 60 60 21 61  !add(a,b)`` ``!a
1cc0: 6e 64 28 61 2c 62 29 60 60 0a 20 20 20 20 54 68  nd(a,b)``.    Th
1cd0: 65 20 75 73 75 61 6c 20 62 69 6e 61 72 79 20 61  e usual binary a
1ce0: 6e 64 20 61 72 69 74 68 6d 65 74 69 63 20 6f 70  nd arithmetic op
1cf0: 65 72 61 74 6f 72 73 2e 0a 0a 4e 6f 74 65 20 74  erators...Note t
1d00: 68 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 76  hat all of the v
1d10: 61 6c 75 65 73 20 68 61 76 65 20 72 75 6c 65 73  alues have rules
1d20: 20 73 70 65 63 69 66 79 69 6e 67 20 68 6f 77 20   specifying how 
1d30: 74 68 65 79 20 63 6f 6e 76 65 72 74 20 74 6f 20  they convert to 
1d40: 76 61 6c 75 65 73 0a 66 6f 72 20 64 69 66 66 65  values.for diffe
1d50: 72 65 6e 74 20 74 79 70 65 73 2e 20 20 54 68 65  rent types.  The
1d60: 73 65 20 72 75 6c 65 73 20 61 6c 6c 6f 77 20 79  se rules allow y
1d70: 6f 75 20 74 6f 20 61 73 73 69 67 6e 20 61 20 76  ou to assign a v
1d80: 61 6c 75 65 20 6c 69 6b 65 20 22 60 60 37 60 60  alue like "``7``
1d90: 22 0a 74 6f 20 61 20 22 60 60 62 69 74 73 3c 34  ".to a "``bits<4
1da0: 3e 60 60 22 20 76 61 6c 75 65 2c 20 66 6f 72 20  >``" value, for 
1db0: 65 78 61 6d 70 6c 65 2e 0a 0a 43 6c 61 73 73 65  example...Classe
1dc0: 73 20 61 6e 64 20 64 65 66 69 6e 69 74 69 6f 6e  s and definition
1dd0: 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  s.--------------
1de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 41 73 20 6d 65  ---------..As me
1df0: 6e 74 69 6f 6e 65 64 20 69 6e 20 74 68 65 20 3a  ntioned in the :
1e00: 64 6f 63 3a 60 69 6e 74 72 6f 64 75 63 74 69 6f  doc:`introductio
1e10: 6e 20 3c 69 6e 64 65 78 3e 60 2c 20 63 6c 61 73  n <index>`, clas
1e20: 73 65 73 20 61 6e 64 20 64 65 66 69 6e 69 74 69  ses and definiti
1e30: 6f 6e 73 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c  ons (collectivel
1e40: 79 20 6b 6e 6f 77 6e 20 61 73 0a 27 72 65 63 6f  y known as.'reco
1e50: 72 64 73 27 29 20 69 6e 20 54 61 62 6c 65 47 65  rds') in TableGe
1e60: 6e 20 61 72 65 20 74 68 65 20 6d 61 69 6e 20 68  n are the main h
1e70: 69 67 68 2d 6c 65 76 65 6c 20 75 6e 69 74 20 6f  igh-level unit o
1e80: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  f information th
1e90: 61 74 20 54 61 62 6c 65 47 65 6e 0a 63 6f 6c 6c  at TableGen.coll
1ea0: 65 63 74 73 2e 20 20 52 65 63 6f 72 64 73 20 61  ects.  Records a
1eb0: 72 65 20 64 65 66 69 6e 65 64 20 77 69 74 68 20  re defined with 
1ec0: 61 20 60 60 64 65 66 60 60 20 6f 72 20 60 60 63  a ``def`` or ``c
1ed0: 6c 61 73 73 60 60 20 6b 65 79 77 6f 72 64 2c 20  lass`` keyword, 
1ee0: 74 68 65 20 72 65 63 6f 72 64 0a 6e 61 6d 65 2c  the record.name,
1ef0: 20 61 6e 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c   and an optional
1f00: 20 6c 69 73 74 20 6f 66 20 22 60 74 65 6d 70 6c   list of "`templ
1f10: 61 74 65 20 61 72 67 75 6d 65 6e 74 73 60 5f 22  ate arguments`_"
1f20: 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1f30: 20 68 61 73 0a 73 75 70 65 72 63 6c 61 73 73 65   has.superclasse
1f40: 73 2c 20 74 68 65 79 20 61 72 65 20 73 70 65 63  s, they are spec
1f50: 69 66 69 65 64 20 61 73 20 61 20 63 6f 6d 6d 61  ified as a comma
1f60: 20 73 65 70 61 72 61 74 65 64 20 6c 69 73 74 20   separated list 
1f70: 74 68 61 74 20 73 74 61 72 74 73 20 77 69 74 68  that starts with
1f80: 20 61 0a 63 6f 6c 6f 6e 20 63 68 61 72 61 63 74   a.colon charact
1f90: 65 72 20 28 22 60 60 3a 60 60 22 29 2e 20 20 49  er ("``:``").  I
1fa0: 66 20 60 76 61 6c 75 65 20 64 65 66 69 6e 69 74  f `value definit
1fb0: 69 6f 6e 73 60 5f 20 6f 72 20 60 6c 65 74 20 65  ions`_ or `let e
1fc0: 78 70 72 65 73 73 69 6f 6e 73 60 5f 20 61 72 65  xpressions`_ are
1fd0: 0a 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20  .needed for the 
1fe0: 63 6c 61 73 73 2c 20 74 68 65 79 20 61 72 65 20  class, they are 
1ff0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 63 75 72 6c  enclosed in curl
2000: 79 20 62 72 61 63 65 73 20 28 22 60 60 7b 7d 60  y braces ("``{}`
2010: 60 22 29 3b 20 6f 74 68 65 72 77 69 73 65 2c 0a  `"); otherwise,.
2020: 74 68 65 20 72 65 63 6f 72 64 20 65 6e 64 73 20  the record ends 
2030: 77 69 74 68 20 61 20 73 65 6d 69 63 6f 6c 6f 6e  with a semicolon
2040: 2e 0a 0a 48 65 72 65 20 69 73 20 61 20 73 69 6d  ...Here is a sim
2050: 70 6c 65 20 54 61 62 6c 65 47 65 6e 20 66 69 6c  ple TableGen fil
2060: 65 3a 0a 0a 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63  e:.... code-bloc
2070: 6b 3a 3a 20 74 65 78 74 0a 0a 20 20 63 6c 61 73  k:: text..  clas
2080: 73 20 43 20 7b 20 62 69 74 20 56 20 3d 20 31 3b  s C { bit V = 1;
2090: 20 7d 0a 20 20 64 65 66 20 58 20 3a 20 43 3b 0a   }.  def X : C;.
20a0: 20 20 64 65 66 20 59 20 3a 20 43 20 7b 0a 20 20    def Y : C {.  
20b0: 20 20 73 74 72 69 6e 67 20 47 72 65 65 74 69 6e    string Greetin
20c0: 67 20 3d 20 22 68 65 6c 6c 6f 22 3b 0a 20 20 7d  g = "hello";.  }
20d0: 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 64  ..This example d
20e0: 65 66 69 6e 65 73 20 74 77 6f 20 64 65 66 69 6e  efines two defin
20f0: 69 74 69 6f 6e 73 2c 20 60 60 58 60 60 20 61 6e  itions, ``X`` an
2100: 64 20 60 60 59 60 60 2c 20 62 6f 74 68 20 6f 66  d ``Y``, both of
2110: 20 77 68 69 63 68 20 64 65 72 69 76 65 20 66 72   which derive fr
2120: 6f 6d 0a 74 68 65 20 60 60 43 60 60 20 63 6c 61  om.the ``C`` cla
2130: 73 73 2e 20 20 42 65 63 61 75 73 65 20 6f 66 20  ss.  Because of 
2140: 74 68 69 73 2c 20 74 68 65 79 20 62 6f 74 68 20  this, they both 
2150: 67 65 74 20 74 68 65 20 60 60 56 60 60 20 62 69  get the ``V`` bi
2160: 74 20 76 61 6c 75 65 2e 20 20 54 68 65 20 60 60  t value.  The ``
2170: 59 60 60 0a 64 65 66 69 6e 69 74 69 6f 6e 20 61  Y``.definition a
2180: 6c 73 6f 20 67 65 74 73 20 74 68 65 20 47 72 65  lso gets the Gre
2190: 65 74 69 6e 67 20 6d 65 6d 62 65 72 20 61 73 20  eting member as 
21a0: 77 65 6c 6c 2e 0a 0a 49 6e 20 67 65 6e 65 72 61  well...In genera
21b0: 6c 2c 20 63 6c 61 73 73 65 73 20 61 72 65 20 75  l, classes are u
21c0: 73 65 66 75 6c 20 66 6f 72 20 63 6f 6c 6c 65 63  seful for collec
21d0: 74 69 6e 67 20 74 6f 67 65 74 68 65 72 20 74 68  ting together th
21e0: 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 20 62 65  e commonality be
21f0: 74 77 65 65 6e 20 61 0a 67 72 6f 75 70 20 6f 66  tween a.group of
2200: 20 72 65 63 6f 72 64 73 20 61 6e 64 20 69 73 6f   records and iso
2210: 6c 61 74 69 6e 67 20 69 74 20 69 6e 20 61 20 73  lating it in a s
2220: 69 6e 67 6c 65 20 70 6c 61 63 65 2e 20 20 41 6c  ingle place.  Al
2230: 73 6f 2c 20 63 6c 61 73 73 65 73 20 70 65 72 6d  so, classes perm
2240: 69 74 20 74 68 65 0a 73 70 65 63 69 66 69 63 61  it the.specifica
2250: 74 69 6f 6e 20 6f 66 20 64 65 66 61 75 6c 74 20  tion of default 
2260: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 69 72  values for their
2270: 20 73 75 62 63 6c 61 73 73 65 73 2c 20 61 6c 6c   subclasses, all
2280: 6f 77 69 6e 67 20 74 68 65 20 73 75 62 63 6c 61  owing the subcla
2290: 73 73 65 73 20 74 6f 0a 6f 76 65 72 72 69 64 65  sses to.override
22a0: 20 74 68 65 6d 20 61 73 20 74 68 65 79 20 77 69   them as they wi
22b0: 73 68 2e 0a 0a 2e 2e 20 5f 76 61 6c 75 65 20 64  sh..... _value d
22c0: 65 66 69 6e 69 74 69 6f 6e 3a 0a 2e 2e 20 5f 76  efinition:... _v
22d0: 61 6c 75 65 20 64 65 66 69 6e 69 74 69 6f 6e 73  alue definitions
22e0: 3a 0a 0a 56 61 6c 75 65 20 64 65 66 69 6e 69 74  :..Value definit
22f0: 69 6f 6e 73 0a 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e  ions.^^^^^^^^^^^
2300: 5e 5e 5e 5e 5e 5e 0a 0a 56 61 6c 75 65 20 64 65  ^^^^^^..Value de
2310: 66 69 6e 69 74 69 6f 6e 73 20 64 65 66 69 6e 65  finitions define
2320: 20 6e 61 6d 65 64 20 65 6e 74 72 69 65 73 20 69   named entries i
2330: 6e 20 72 65 63 6f 72 64 73 2e 20 20 41 20 76 61  n records.  A va
2340: 6c 75 65 20 6d 75 73 74 20 62 65 20 64 65 66 69  lue must be defi
2350: 6e 65 64 0a 62 65 66 6f 72 65 20 69 74 20 63 61  ned.before it ca
2360: 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f  n be referred to
2370: 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64 20   as the operand 
2380: 66 6f 72 20 61 6e 6f 74 68 65 72 20 76 61 6c 75  for another valu
2390: 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a  e definition or.
23a0: 62 65 66 6f 72 65 20 74 68 65 20 76 61 6c 75 65  before the value
23b0: 20 69 73 20 72 65 73 65 74 20 77 69 74 68 20 61   is reset with a
23c0: 20 60 6c 65 74 20 65 78 70 72 65 73 73 69 6f 6e   `let expression
23d0: 60 5f 2e 20 20 41 20 76 61 6c 75 65 20 69 73 20  `_.  A value is 
23e0: 64 65 66 69 6e 65 64 20 62 79 0a 73 70 65 63 69  defined by.speci
23f0: 66 79 69 6e 67 20 61 20 60 54 61 62 6c 65 47 65  fying a `TableGe
2400: 6e 20 74 79 70 65 60 5f 20 61 6e 64 20 61 20 6e  n type`_ and a n
2410: 61 6d 65 2e 20 20 49 66 20 61 6e 20 69 6e 69 74  ame.  If an init
2420: 69 61 6c 20 76 61 6c 75 65 20 69 73 20 61 76 61  ial value is ava
2430: 69 6c 61 62 6c 65 2c 20 69 74 0a 6d 61 79 20 62  ilable, it.may b
2440: 65 20 73 70 65 63 69 66 69 65 64 20 61 66 74 65  e specified afte
2450: 72 20 74 68 65 20 74 79 70 65 20 77 69 74 68 20  r the type with 
2460: 61 6e 20 65 71 75 61 6c 20 73 69 67 6e 2e 20 20  an equal sign.  
2470: 56 61 6c 75 65 20 64 65 66 69 6e 69 74 69 6f 6e  Value definition
2480: 73 20 72 65 71 75 69 72 65 0a 74 65 72 6d 69 6e  s require.termin
2490: 61 74 69 6e 67 20 73 65 6d 69 63 6f 6c 6f 6e 73  ating semicolons
24a0: 2e 0a 0a 2e 2e 20 5f 6c 65 74 20 65 78 70 72 65  ..... _let expre
24b0: 73 73 69 6f 6e 3a 0a 2e 2e 20 5f 6c 65 74 20 65  ssion:... _let e
24c0: 78 70 72 65 73 73 69 6f 6e 73 3a 0a 2e 2e 20 5f  xpressions:... _
24d0: 22 6c 65 74 22 20 65 78 70 72 65 73 73 69 6f 6e  "let" expression
24e0: 73 20 77 69 74 68 69 6e 20 61 20 72 65 63 6f 72  s within a recor
24f0: 64 3a 0a 0a 27 6c 65 74 27 20 65 78 70 72 65 73  d:..'let' expres
2500: 73 69 6f 6e 73 0a 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e  sions.^^^^^^^^^^
2510: 5e 5e 5e 5e 5e 5e 5e 0a 0a 41 20 72 65 63 6f 72  ^^^^^^^..A recor
2520: 64 2d 6c 65 76 65 6c 20 6c 65 74 20 65 78 70 72  d-level let expr
2530: 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 74  ession is used t
2540: 6f 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c  o change the val
2550: 75 65 20 6f 66 20 61 20 76 61 6c 75 65 20 64 65  ue of a value de
2560: 66 69 6e 69 74 69 6f 6e 0a 69 6e 20 61 20 72 65  finition.in a re
2570: 63 6f 72 64 2e 20 20 54 68 69 73 20 69 73 20 70  cord.  This is p
2580: 72 69 6d 61 72 69 6c 79 20 75 73 65 66 75 6c 20  rimarily useful 
2590: 77 68 65 6e 20 61 20 73 75 70 65 72 63 6c 61 73  when a superclas
25a0: 73 20 64 65 66 69 6e 65 73 20 61 20 76 61 6c 75  s defines a valu
25b0: 65 20 74 68 61 74 20 61 0a 64 65 72 69 76 65 64  e that a.derived
25c0: 20 63 6c 61 73 73 20 6f 72 20 64 65 66 69 6e 69   class or defini
25d0: 74 69 6f 6e 20 77 61 6e 74 73 20 74 6f 20 6f 76  tion wants to ov
25e0: 65 72 72 69 64 65 2e 20 20 4c 65 74 20 65 78 70  erride.  Let exp
25f0: 72 65 73 73 69 6f 6e 73 20 63 6f 6e 73 69 73 74  ressions consist
2600: 20 6f 66 20 74 68 65 0a 27 60 60 6c 65 74 60 60   of the.'``let``
2610: 27 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77  ' keyword follow
2620: 65 64 20 62 79 20 61 20 76 61 6c 75 65 20 6e 61  ed by a value na
2630: 6d 65 2c 20 61 6e 20 65 71 75 61 6c 20 73 69 67  me, an equal sig
2640: 6e 20 28 22 60 60 3d 60 60 22 29 2c 20 61 6e 64  n ("``=``"), and
2650: 20 61 20 6e 65 77 0a 76 61 6c 75 65 2e 20 20 46   a new.value.  F
2660: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 6e 65  or example, a ne
2670: 77 20 63 6c 61 73 73 20 63 6f 75 6c 64 20 62 65  w class could be
2680: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 65 78   added to the ex
2690: 61 6d 70 6c 65 20 61 62 6f 76 65 2c 20 72 65 64  ample above, red
26a0: 65 66 69 6e 69 6e 67 0a 74 68 65 20 60 60 56 60  efining.the ``V`
26b0: 60 20 66 69 65 6c 64 20 66 6f 72 20 61 6c 6c 20  ` field for all 
26c0: 6f 66 20 69 74 73 20 73 75 62 63 6c 61 73 73 65  of its subclasse
26d0: 73 3a 0a 0a 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63  s:.... code-bloc
26e0: 6b 3a 3a 20 74 65 78 74 0a 0a 20 20 63 6c 61 73  k:: text..  clas
26f0: 73 20 44 20 3a 20 43 20 7b 20 6c 65 74 20 56 20  s D : C { let V 
2700: 3d 20 30 3b 20 7d 0a 20 20 64 65 66 20 5a 20 3a  = 0; }.  def Z :
2710: 20 44 3b 0a 0a 49 6e 20 74 68 69 73 20 63 61 73   D;..In this cas
2720: 65 2c 20 74 68 65 20 60 60 5a 60 60 20 64 65 66  e, the ``Z`` def
2730: 69 6e 69 74 69 6f 6e 20 77 69 6c 6c 20 68 61 76  inition will hav
2740: 65 20 61 20 7a 65 72 6f 20 76 61 6c 75 65 20 66  e a zero value f
2750: 6f 72 20 69 74 73 20 60 60 56 60 60 20 76 61 6c  or its ``V`` val
2760: 75 65 2c 0a 64 65 73 70 69 74 65 20 74 68 65 20  ue,.despite the 
2770: 66 61 63 74 20 74 68 61 74 20 69 74 20 64 65 72  fact that it der
2780: 69 76 65 73 20 28 69 6e 64 69 72 65 63 74 6c 79  ives (indirectly
2790: 29 20 66 72 6f 6d 20 74 68 65 20 60 60 43 60 60  ) from the ``C``
27a0: 20 63 6c 61 73 73 2c 20 62 65 63 61 75 73 65 20   class, because 
27b0: 74 68 65 0a 60 60 44 60 60 20 63 6c 61 73 73 20  the.``D`` class 
27c0: 6f 76 65 72 72 6f 64 65 20 69 74 73 20 76 61 6c  overrode its val
27d0: 75 65 2e 0a 0a 2e 2e 20 5f 74 65 6d 70 6c 61 74  ue..... _templat
27e0: 65 20 61 72 67 75 6d 65 6e 74 73 3a 0a 0a 43 6c  e arguments:..Cl
27f0: 61 73 73 20 74 65 6d 70 6c 61 74 65 20 61 72 67  ass template arg
2800: 75 6d 65 6e 74 73 0a 5e 5e 5e 5e 5e 5e 5e 5e 5e  uments.^^^^^^^^^
2810: 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 0a  ^^^^^^^^^^^^^^^.
2820: 0a 54 61 62 6c 65 47 65 6e 20 70 65 72 6d 69 74  .TableGen permit
2830: 73 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  s the definition
2840: 20 6f 66 20 70 61 72 61 6d 65 74 65 72 69 7a 65   of parameterize
2850: 64 20 63 6c 61 73 73 65 73 20 61 73 20 77 65 6c  d classes as wel
2860: 6c 20 61 73 20 6e 6f 72 6d 61 6c 0a 63 6f 6e 63  l as normal.conc
2870: 72 65 74 65 20 63 6c 61 73 73 65 73 2e 20 20 50  rete classes.  P
2880: 61 72 61 6d 65 74 65 72 69 7a 65 64 20 54 61 62  arameterized Tab
2890: 6c 65 47 65 6e 20 63 6c 61 73 73 65 73 20 73 70  leGen classes sp
28a0: 65 63 69 66 79 20 61 20 6c 69 73 74 20 6f 66 20  ecify a list of 
28b0: 76 61 72 69 61 62 6c 65 0a 62 69 6e 64 69 6e 67  variable.binding
28c0: 73 20 28 77 68 69 63 68 20 6d 61 79 20 6f 70 74  s (which may opt
28d0: 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 64 65 66  ionally have def
28e0: 61 75 6c 74 73 29 20 74 68 61 74 20 61 72 65 20  aults) that are 
28f0: 62 6f 75 6e 64 20 77 68 65 6e 20 75 73 65 64 2e  bound when used.
2900: 20 20 48 65 72 65 20 69 73 0a 61 20 73 69 6d 70    Here is.a simp
2910: 6c 65 20 65 78 61 6d 70 6c 65 3a 0a 0a 2e 2e 20  le example:.... 
2920: 63 6f 64 65 2d 62 6c 6f 63 6b 3a 3a 20 74 65 78  code-block:: tex
2930: 74 0a 0a 20 20 63 6c 61 73 73 20 46 50 46 6f 72  t..  class FPFor
2940: 6d 61 74 3c 62 69 74 73 3c 33 3e 20 76 61 6c 3e  mat<bits<3> val>
2950: 20 7b 0a 20 20 20 20 62 69 74 73 3c 33 3e 20 56   {.    bits<3> V
2960: 61 6c 75 65 20 3d 20 76 61 6c 3b 0a 20 20 7d 0a  alue = val;.  }.
2970: 20 20 64 65 66 20 4e 6f 74 46 50 20 20 20 20 20    def NotFP     
2980: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 30 3e 3b 0a   : FPFormat<0>;.
2990: 20 20 64 65 66 20 5a 65 72 6f 41 72 67 46 50 20    def ZeroArgFP 
29a0: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 31 3e 3b 0a   : FPFormat<1>;.
29b0: 20 20 64 65 66 20 4f 6e 65 41 72 67 46 50 20 20    def OneArgFP  
29c0: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 32 3e 3b 0a   : FPFormat<2>;.
29d0: 20 20 64 65 66 20 4f 6e 65 41 72 67 46 50 52 57    def OneArgFPRW
29e0: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 33 3e 3b 0a   : FPFormat<3>;.
29f0: 20 20 64 65 66 20 54 77 6f 41 72 67 46 50 20 20    def TwoArgFP  
2a00: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 34 3e 3b 0a   : FPFormat<4>;.
2a10: 20 20 64 65 66 20 43 6f 6d 70 61 72 65 46 50 20    def CompareFP 
2a20: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 35 3e 3b 0a   : FPFormat<5>;.
2a30: 20 20 64 65 66 20 43 6f 6e 64 4d 6f 76 46 50 20    def CondMovFP 
2a40: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 36 3e 3b 0a   : FPFormat<6>;.
2a50: 20 20 64 65 66 20 53 70 65 63 69 61 6c 46 50 20    def SpecialFP 
2a60: 20 3a 20 46 50 46 6f 72 6d 61 74 3c 37 3e 3b 0a   : FPFormat<7>;.
2a70: 0a 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74  .In this case, t
2a80: 65 6d 70 6c 61 74 65 20 61 72 67 75 6d 65 6e 74  emplate argument
2a90: 73 20 61 72 65 20 75 73 65 64 20 61 73 20 61 20  s are used as a 
2aa0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20  space efficient 
2ab0: 77 61 79 20 74 6f 20 73 70 65 63 69 66 79 20 61  way to specify a
2ac0: 0a 6c 69 73 74 20 6f 66 20 22 65 6e 75 6d 65 72  .list of "enumer
2ad0: 61 74 69 6f 6e 20 76 61 6c 75 65 73 22 2c 20 65  ation values", e
2ae0: 61 63 68 20 77 69 74 68 20 61 20 22 60 60 56 61  ach with a "``Va
2af0: 6c 75 65 60 60 22 20 66 69 65 6c 64 20 73 65 74  lue``" field set
2b00: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
2b10: 64 0a 69 6e 74 65 67 65 72 2e 0a 0a 54 68 65 20  d.integer...The 
2b20: 6d 6f 72 65 20 65 73 6f 74 65 72 69 63 20 66 6f  more esoteric fo
2b30: 72 6d 73 20 6f 66 20 60 54 61 62 6c 65 47 65 6e  rms of `TableGen
2b40: 20 65 78 70 72 65 73 73 69 6f 6e 73 60 5f 20 61   expressions`_ a
2b50: 72 65 20 75 73 65 66 75 6c 20 69 6e 20 63 6f 6e  re useful in con
2b60: 6a 75 6e 63 74 69 6f 6e 0a 77 69 74 68 20 74 65  junction.with te
2b70: 6d 70 6c 61 74 65 20 61 72 67 75 6d 65 6e 74 73  mplate arguments
2b80: 2e 20 20 41 73 20 61 6e 20 65 78 61 6d 70 6c 65  .  As an example
2b90: 3a 0a 0a 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63 6b  :.... code-block
2ba0: 3a 3a 20 74 65 78 74 0a 0a 20 20 63 6c 61 73 73  :: text..  class
2bb0: 20 4d 6f 64 52 65 66 56 61 6c 3c 62 69 74 73 3c   ModRefVal<bits<
2bc0: 32 3e 20 76 61 6c 3e 20 7b 0a 20 20 20 20 62 69  2> val> {.    bi
2bd0: 74 73 3c 32 3e 20 56 61 6c 75 65 20 3d 20 76 61  ts<2> Value = va
2be0: 6c 3b 0a 20 20 7d 0a 0a 20 20 64 65 66 20 4e 6f  l;.  }..  def No
2bf0: 6e 65 20 20 20 3a 20 4d 6f 64 52 65 66 56 61 6c  ne   : ModRefVal
2c00: 3c 30 3e 3b 0a 20 20 64 65 66 20 4d 6f 64 20 20  <0>;.  def Mod  
2c10: 20 20 3a 20 4d 6f 64 52 65 66 56 61 6c 3c 31 3e    : ModRefVal<1>
2c20: 3b 0a 20 20 64 65 66 20 52 65 66 20 20 20 20 3a  ;.  def Ref    :
2c30: 20 4d 6f 64 52 65 66 56 61 6c 3c 32 3e 3b 0a 20   ModRefVal<2>;. 
2c40: 20 64 65 66 20 4d 6f 64 52 65 66 20 3a 20 4d 6f   def ModRef : Mo
2c50: 64 52 65 66 56 61 6c 3c 33 3e 3b 0a 0a 20 20 63  dRefVal<3>;..  c
2c60: 6c 61 73 73 20 56 61 6c 75 65 3c 4d 6f 64 52 65  lass Value<ModRe
2c70: 66 56 61 6c 20 4d 52 3e 20 7b 0a 20 20 20 20 2f  fVal MR> {.    /
2c80: 2f 20 44 65 63 6f 64 65 20 73 6f 6d 65 20 69 6e  / Decode some in
2c90: 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 74 6f 20 61  formation into a
2ca0: 20 6d 6f 72 65 20 63 6f 6e 76 65 6e 69 65 6e 74   more convenient
2cb0: 20 66 6f 72 6d 61 74 2c 20 77 68 69 6c 65 20 70   format, while p
2cc0: 72 6f 76 69 64 69 6e 67 0a 20 20 20 20 2f 2f 20  roviding.    // 
2cd0: 61 20 6e 69 63 65 20 69 6e 74 65 72 66 61 63 65  a nice interface
2ce0: 20 74 6f 20 74 68 65 20 75 73 65 72 20 6f 66 20   to the user of 
2cf0: 74 68 65 20 22 56 61 6c 75 65 22 20 63 6c 61 73  the "Value" clas
2d00: 73 2e 0a 20 20 20 20 62 69 74 20 69 73 4d 6f 64  s..    bit isMod
2d10: 20 3d 20 4d 52 2e 56 61 6c 75 65 7b 30 7d 3b 0a   = MR.Value{0};.
2d20: 20 20 20 20 62 69 74 20 69 73 52 65 66 20 3d 20      bit isRef = 
2d30: 4d 52 2e 56 61 6c 75 65 7b 31 7d 3b 0a 0a 20 20  MR.Value{1};..  
2d40: 20 20 2f 2f 20 6f 74 68 65 72 20 73 74 75 66 66    // other stuff
2d50: 2e 2e 2e 0a 20 20 7d 0a 0a 20 20 2f 2f 20 45 78  ....  }..  // Ex
2d60: 61 6d 70 6c 65 20 75 73 65 73 0a 20 20 64 65 66  ample uses.  def
2d70: 20 62 6f 72 6b 20 3a 20 56 61 6c 75 65 3c 4d 6f   bork : Value<Mo
2d80: 64 3e 3b 0a 20 20 64 65 66 20 7a 6f 72 6b 20 3a  d>;.  def zork :
2d90: 20 56 61 6c 75 65 3c 52 65 66 3e 3b 0a 20 20 64   Value<Ref>;.  d
2da0: 65 66 20 68 6f 72 6b 20 3a 20 56 61 6c 75 65 3c  ef hork : Value<
2db0: 4d 6f 64 52 65 66 3e 3b 0a 0a 54 68 69 73 20 69  ModRef>;..This i
2dc0: 73 20 6f 62 76 69 6f 75 73 6c 79 20 61 20 63 6f  s obviously a co
2dd0: 6e 74 72 69 76 65 64 20 65 78 61 6d 70 6c 65 2c  ntrived example,
2de0: 20 62 75 74 20 69 74 20 73 68 6f 77 73 20 68 6f   but it shows ho
2df0: 77 20 74 65 6d 70 6c 61 74 65 20 61 72 67 75 6d  w template argum
2e00: 65 6e 74 73 20 63 61 6e 0a 62 65 20 75 73 65 64  ents can.be used
2e10: 20 74 6f 20 64 65 63 6f 75 70 6c 65 20 74 68 65   to decouple the
2e20: 20 69 6e 74 65 72 66 61 63 65 20 70 72 6f 76 69   interface provi
2e30: 64 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 20  ded to the user 
2e40: 6f 66 20 74 68 65 20 63 6c 61 73 73 20 66 72 6f  of the class fro
2e50: 6d 20 74 68 65 0a 61 63 74 75 61 6c 20 69 6e 74  m the.actual int
2e60: 65 72 6e 61 6c 20 64 61 74 61 20 72 65 70 72 65  ernal data repre
2e70: 73 65 6e 74 61 74 69 6f 6e 20 65 78 70 65 63 74  sentation expect
2e80: 65 64 20 62 79 20 74 68 65 20 63 6c 61 73 73 2e  ed by the class.
2e90: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 0a    In this case,.
2ea0: 72 75 6e 6e 69 6e 67 20 60 60 6c 6c 76 6d 2d 74  running ``llvm-t
2eb0: 62 6c 67 65 6e 60 60 20 6f 6e 20 74 68 65 20 65  blgen`` on the e
2ec0: 78 61 6d 70 6c 65 20 70 72 69 6e 74 73 20 74 68  xample prints th
2ed0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 66 69  e following defi
2ee0: 6e 69 74 69 6f 6e 73 3a 0a 0a 2e 2e 20 63 6f 64  nitions:.... cod
2ef0: 65 2d 62 6c 6f 63 6b 3a 3a 20 74 65 78 74 0a 0a  e-block:: text..
2f00: 20 20 64 65 66 20 62 6f 72 6b 20 7b 20 20 20 20    def bork {    
2f10: 20 20 2f 2f 20 56 61 6c 75 65 0a 20 20 20 20 62    // Value.    b
2f20: 69 74 20 69 73 4d 6f 64 20 3d 20 31 3b 0a 20 20  it isMod = 1;.  
2f30: 20 20 62 69 74 20 69 73 52 65 66 20 3d 20 30 3b    bit isRef = 0;
2f40: 0a 20 20 7d 0a 20 20 64 65 66 20 68 6f 72 6b 20  .  }.  def hork 
2f50: 7b 20 20 20 20 20 20 2f 2f 20 56 61 6c 75 65 0a  {      // Value.
2f60: 20 20 20 20 62 69 74 20 69 73 4d 6f 64 20 3d 20      bit isMod = 
2f70: 31 3b 0a 20 20 20 20 62 69 74 20 69 73 52 65 66  1;.    bit isRef
2f80: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 64 65 66 20   = 1;.  }.  def 
2f90: 7a 6f 72 6b 20 7b 20 20 20 20 20 20 2f 2f 20 56  zork {      // V
2fa0: 61 6c 75 65 0a 20 20 20 20 62 69 74 20 69 73 4d  alue.    bit isM
2fb0: 6f 64 20 3d 20 30 3b 0a 20 20 20 20 62 69 74 20  od = 0;.    bit 
2fc0: 69 73 52 65 66 20 3d 20 31 3b 0a 20 20 7d 0a 0a  isRef = 1;.  }..
2fd0: 54 68 69 73 20 73 68 6f 77 73 20 74 68 61 74 20  This shows that 
2fe0: 54 61 62 6c 65 47 65 6e 20 77 61 73 20 61 62 6c  TableGen was abl
2ff0: 65 20 74 6f 20 64 69 67 20 69 6e 74 6f 20 74 68  e to dig into th
3000: 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 65  e argument and e
3010: 78 74 72 61 63 74 20 61 20 70 69 65 63 65 0a 6f  xtract a piece.o
3020: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  f information th
3030: 61 74 20 77 61 73 20 72 65 71 75 65 73 74 65 64  at was requested
3040: 20 62 79 20 74 68 65 20 64 65 73 69 67 6e 65 72   by the designer
3050: 20 6f 66 20 74 68 65 20 22 56 61 6c 75 65 22 20   of the "Value" 
3060: 63 6c 61 73 73 2e 20 20 46 6f 72 0a 6d 6f 72 65  class.  For.more
3070: 20 72 65 61 6c 69 73 74 69 63 20 65 78 61 6d 70   realistic examp
3080: 6c 65 73 2c 20 70 6c 65 61 73 65 20 73 65 65 20  les, please see 
3090: 65 78 69 73 74 69 6e 67 20 75 73 65 72 73 20 6f  existing users o
30a0: 66 20 54 61 62 6c 65 47 65 6e 2c 20 73 75 63 68  f TableGen, such
30b0: 20 61 73 20 74 68 65 20 58 38 36 0a 62 61 63 6b   as the X86.back
30c0: 65 6e 64 2e 0a 0a 4d 75 6c 74 69 63 6c 61 73 73  end...Multiclass
30d0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 61 6e 64   definitions and
30e0: 20 69 6e 73 74 61 6e 63 65 73 0a 5e 5e 5e 5e 5e   instances.^^^^^
30f0: 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e  ^^^^^^^^^^^^^^^^
3100: 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 0a  ^^^^^^^^^^^^^^^.
3110: 0a 57 68 69 6c 65 20 63 6c 61 73 73 65 73 20 77  .While classes w
3120: 69 74 68 20 74 65 6d 70 6c 61 74 65 20 61 72 67  ith template arg
3130: 75 6d 65 6e 74 73 20 61 72 65 20 61 20 67 6f 6f  uments are a goo
3140: 64 20 77 61 79 20 74 6f 20 66 61 63 74 6f 72 20  d way to factor 
3150: 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 62 65 74 77  commonality.betw
3160: 65 65 6e 20 74 77 6f 20 69 6e 73 74 61 6e 63 65  een two instance
3170: 73 20 6f 66 20 61 20 64 65 66 69 6e 69 74 69 6f  s of a definitio
3180: 6e 2c 20 6d 75 6c 74 69 63 6c 61 73 73 65 73 20  n, multiclasses 
3190: 61 6c 6c 6f 77 20 61 20 63 6f 6e 76 65 6e 69 65  allow a convenie
31a0: 6e 74 20 6e 6f 74 61 74 69 6f 6e 0a 66 6f 72 20  nt notation.for 
31b0: 64 65 66 69 6e 69 6e 67 20 6d 75 6c 74 69 70 6c  defining multipl
31c0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 61 74  e definitions at
31d0: 20 6f 6e 63 65 20 28 69 6e 73 74 61 6e 63 65 73   once (instances
31e0: 20 6f 66 20 69 6d 70 6c 69 63 69 74 6c 79 20 63   of implicitly c
31f0: 6f 6e 73 74 72 75 63 74 65 64 0a 63 6c 61 73 73  onstructed.class
3200: 65 73 29 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  es).  For exampl
3210: 65 2c 20 63 6f 6e 73 69 64 65 72 20 61 6e 20 33  e, consider an 3
3220: 2d 61 64 64 72 65 73 73 20 69 6e 73 74 72 75 63  -address instruc
3230: 74 69 6f 6e 20 73 65 74 20 77 68 6f 73 65 20 69  tion set whose i
3240: 6e 73 74 72 75 63 74 69 6f 6e 73 0a 63 6f 6d 65  nstructions.come
3250: 20 69 6e 20 74 77 6f 20 66 6f 72 6d 73 3a 20 22   in two forms: "
3260: 60 60 72 65 67 20 3d 20 72 65 67 20 6f 70 20 72  ``reg = reg op r
3270: 65 67 60 60 22 20 61 6e 64 20 22 60 60 72 65 67  eg``" and "``reg
3280: 20 3d 20 72 65 67 20 6f 70 20 69 6d 6d 60 60 22   = reg op imm``"
3290: 0a 28 65 2e 67 2e 20 53 50 41 52 43 29 2e 20 49  .(e.g. SPARC). I
32a0: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 79 6f 75  n this case, you
32b0: 27 64 20 6c 69 6b 65 20 74 6f 20 73 70 65 63 69  'd like to speci
32c0: 66 79 20 69 6e 20 6f 6e 65 20 70 6c 61 63 65 20  fy in one place 
32d0: 74 68 61 74 20 74 68 69 73 0a 63 6f 6d 6d 6f 6e  that this.common
32e0: 61 6c 69 74 79 20 65 78 69 73 74 73 2c 20 74 68  ality exists, th
32f0: 65 6e 20 69 6e 20 61 20 73 65 70 61 72 61 74 65  en in a separate
3300: 20 70 6c 61 63 65 20 69 6e 64 69 63 61 74 65 20   place indicate 
3310: 77 68 61 74 20 61 6c 6c 20 74 68 65 20 6f 70 73  what all the ops
3320: 20 61 72 65 2e 0a 0a 48 65 72 65 20 69 73 20 61   are...Here is a
3330: 6e 20 65 78 61 6d 70 6c 65 20 54 61 62 6c 65 47  n example TableG
3340: 65 6e 20 66 72 61 67 6d 65 6e 74 20 74 68 61 74  en fragment that
3350: 20 73 68 6f 77 73 20 74 68 69 73 20 69 64 65 61   shows this idea
3360: 3a 0a 0a 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63 6b  :.... code-block
3370: 3a 3a 20 74 65 78 74 0a 0a 20 20 64 65 66 20 6f  :: text..  def o
3380: 70 73 3b 0a 20 20 64 65 66 20 47 50 52 3b 0a 20  ps;.  def GPR;. 
3390: 20 64 65 66 20 49 6d 6d 3b 0a 20 20 63 6c 61 73   def Imm;.  clas
33a0: 73 20 69 6e 73 74 3c 69 6e 74 20 6f 70 63 2c 20  s inst<int opc, 
33b0: 73 74 72 69 6e 67 20 61 73 6d 73 74 72 2c 20 64  string asmstr, d
33c0: 61 67 20 6f 70 65 72 61 6e 64 6c 69 73 74 3e 3b  ag operandlist>;
33d0: 0a 0a 20 20 6d 75 6c 74 69 63 6c 61 73 73 20 72  ..  multiclass r
33e0: 69 5f 69 6e 73 74 3c 69 6e 74 20 6f 70 63 2c 20  i_inst<int opc, 
33f0: 73 74 72 69 6e 67 20 61 73 6d 73 74 72 3e 20 7b  string asmstr> {
3400: 0a 20 20 20 20 64 65 66 20 5f 72 72 20 3a 20 69  .    def _rr : i
3410: 6e 73 74 3c 6f 70 63 2c 20 21 73 74 72 63 6f 6e  nst<opc, !strcon
3420: 63 61 74 28 61 73 6d 73 74 72 2c 20 22 20 24 64  cat(asmstr, " $d
3430: 73 74 2c 20 24 73 72 63 31 2c 20 24 73 72 63 32  st, $src1, $src2
3440: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
3450: 20 20 20 20 20 20 20 28 6f 70 73 20 47 50 52 3a         (ops GPR:
3460: 24 64 73 74 2c 20 47 50 52 3a 24 73 72 63 31 2c  $dst, GPR:$src1,
3470: 20 47 50 52 3a 24 73 72 63 32 29 3e 3b 0a 20 20   GPR:$src2)>;.  
3480: 20 20 64 65 66 20 5f 72 69 20 3a 20 69 6e 73 74    def _ri : inst
3490: 3c 6f 70 63 2c 20 21 73 74 72 63 6f 6e 63 61 74  <opc, !strconcat
34a0: 28 61 73 6d 73 74 72 2c 20 22 20 24 64 73 74 2c  (asmstr, " $dst,
34b0: 20 24 73 72 63 31 2c 20 24 73 72 63 32 22 29 2c   $src1, $src2"),
34c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d0: 20 20 20 20 28 6f 70 73 20 47 50 52 3a 24 64 73      (ops GPR:$ds
34e0: 74 2c 20 47 50 52 3a 24 73 72 63 31 2c 20 49 6d  t, GPR:$src1, Im
34f0: 6d 3a 24 73 72 63 32 29 3e 3b 0a 20 20 7d 0a 0a  m:$src2)>;.  }..
3500: 20 20 2f 2f 20 49 6e 73 74 61 6e 74 69 61 74 69    // Instantiati
3510: 6f 6e 73 20 6f 66 20 74 68 65 20 72 69 5f 69 6e  ons of the ri_in
3520: 73 74 20 6d 75 6c 74 69 63 6c 61 73 73 2e 0a 20  st multiclass.. 
3530: 20 64 65 66 6d 20 41 44 44 20 3a 20 72 69 5f 69   defm ADD : ri_i
3540: 6e 73 74 3c 30 62 31 31 31 2c 20 22 61 64 64 22  nst<0b111, "add"
3550: 3e 3b 0a 20 20 64 65 66 6d 20 53 55 42 20 3a 20  >;.  defm SUB : 
3560: 72 69 5f 69 6e 73 74 3c 30 62 31 30 31 2c 20 22  ri_inst<0b101, "
3570: 73 75 62 22 3e 3b 0a 20 20 64 65 66 6d 20 4d 55  sub">;.  defm MU
3580: 4c 20 3a 20 72 69 5f 69 6e 73 74 3c 30 62 31 30  L : ri_inst<0b10
3590: 30 2c 20 22 6d 75 6c 22 3e 3b 0a 20 20 2e 2e 2e  0, "mul">;.  ...
35a0: 0a 0a 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  ..The name of th
35b0: 65 20 72 65 73 75 6c 74 61 6e 74 20 64 65 66 69  e resultant defi
35c0: 6e 69 74 69 6f 6e 73 20 68 61 73 20 74 68 65 20  nitions has the 
35d0: 6d 75 6c 74 69 64 65 66 20 66 72 61 67 6d 65 6e  multidef fragmen
35e0: 74 20 6e 61 6d 65 73 20 61 70 70 65 6e 64 65 64  t names appended
35f0: 0a 74 6f 20 74 68 65 6d 2c 20 73 6f 20 74 68 69  .to them, so thi
3600: 73 20 64 65 66 69 6e 65 73 20 60 60 41 44 44 5f  s defines ``ADD_
3610: 72 72 60 60 2c 20 60 60 41 44 44 5f 72 69 60 60  rr``, ``ADD_ri``
3620: 2c 20 60 60 53 55 42 5f 72 72 60 60 2c 20 65 74  , ``SUB_rr``, et
3630: 63 2e 20 20 41 20 64 65 66 6d 20 6d 61 79 0a 69  c.  A defm may.i
3640: 6e 68 65 72 69 74 20 66 72 6f 6d 20 6d 75 6c 74  nherit from mult
3650: 69 70 6c 65 20 6d 75 6c 74 69 63 6c 61 73 73 65  iple multiclasse
3660: 73 2c 20 69 6e 73 74 61 6e 74 69 61 74 69 6e 67  s, instantiating
3670: 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 66 72 6f   definitions fro
3680: 6d 20 65 61 63 68 0a 6d 75 6c 74 69 63 6c 61 73  m each.multiclas
3690: 73 2e 20 20 55 73 69 6e 67 20 61 20 6d 75 6c 74  s.  Using a mult
36a0: 69 63 6c 61 73 73 20 74 68 69 73 20 77 61 79 20  iclass this way 
36b0: 69 73 20 65 78 61 63 74 6c 79 20 65 71 75 69 76  is exactly equiv
36c0: 61 6c 65 6e 74 20 74 6f 20 69 6e 73 74 61 6e 74  alent to instant
36d0: 69 61 74 69 6e 67 0a 74 68 65 20 63 6c 61 73 73  iating.the class
36e0: 65 73 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  es multiple time
36f0: 73 20 79 6f 75 72 73 65 6c 66 2c 20 65 2e 67 2e  s yourself, e.g.
3700: 20 62 79 20 77 72 69 74 69 6e 67 3a 0a 0a 2e 2e   by writing:....
3710: 20 63 6f 64 65 2d 62 6c 6f 63 6b 3a 3a 20 74 65   code-block:: te
3720: 78 74 0a 0a 20 20 64 65 66 20 6f 70 73 3b 0a 20  xt..  def ops;. 
3730: 20 64 65 66 20 47 50 52 3b 0a 20 20 64 65 66 20   def GPR;.  def 
3740: 49 6d 6d 3b 0a 20 20 63 6c 61 73 73 20 69 6e 73  Imm;.  class ins
3750: 74 3c 69 6e 74 20 6f 70 63 2c 20 73 74 72 69 6e  t<int opc, strin
3760: 67 20 61 73 6d 73 74 72 2c 20 64 61 67 20 6f 70  g asmstr, dag op
3770: 65 72 61 6e 64 6c 69 73 74 3e 3b 0a 0a 20 20 63  erandlist>;..  c
3780: 6c 61 73 73 20 72 72 69 6e 73 74 3c 69 6e 74 20  lass rrinst<int 
3790: 6f 70 63 2c 20 73 74 72 69 6e 67 20 61 73 6d 73  opc, string asms
37a0: 74 72 3e 0a 20 20 20 20 3a 20 69 6e 73 74 3c 6f  tr>.    : inst<o
37b0: 70 63 2c 20 21 73 74 72 63 6f 6e 63 61 74 28 61  pc, !strconcat(a
37c0: 73 6d 73 74 72 2c 20 22 20 24 64 73 74 2c 20 24  smstr, " $dst, $
37d0: 73 72 63 31 2c 20 24 73 72 63 32 22 29 2c 0a 20  src1, $src2"),. 
37e0: 20 20 20 20 20 20 20 20 20 20 28 6f 70 73 20 47            (ops G
37f0: 50 52 3a 24 64 73 74 2c 20 47 50 52 3a 24 73 72  PR:$dst, GPR:$sr
3800: 63 31 2c 20 47 50 52 3a 24 73 72 63 32 29 3e 3b  c1, GPR:$src2)>;
3810: 0a 0a 20 20 63 6c 61 73 73 20 72 69 69 6e 73 74  ..  class riinst
3820: 3c 69 6e 74 20 6f 70 63 2c 20 73 74 72 69 6e 67  <int opc, string
3830: 20 61 73 6d 73 74 72 3e 0a 20 20 20 20 3a 20 69   asmstr>.    : i
3840: 6e 73 74 3c 6f 70 63 2c 20 21 73 74 72 63 6f 6e  nst<opc, !strcon
3850: 63 61 74 28 61 73 6d 73 74 72 2c 20 22 20 24 64  cat(asmstr, " $d
3860: 73 74 2c 20 24 73 72 63 31 2c 20 24 73 72 63 32  st, $src1, $src2
3870: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28  "),.           (
3880: 6f 70 73 20 47 50 52 3a 24 64 73 74 2c 20 47 50  ops GPR:$dst, GP
3890: 52 3a 24 73 72 63 31 2c 20 49 6d 6d 3a 24 73 72  R:$src1, Imm:$sr
38a0: 63 32 29 3e 3b 0a 0a 20 20 2f 2f 20 49 6e 73 74  c2)>;..  // Inst
38b0: 61 6e 74 69 61 74 69 6f 6e 73 20 6f 66 20 74 68  antiations of th
38c0: 65 20 72 69 5f 69 6e 73 74 20 6d 75 6c 74 69 63  e ri_inst multic
38d0: 6c 61 73 73 2e 0a 20 20 64 65 66 20 41 44 44 5f  lass..  def ADD_
38e0: 72 72 20 3a 20 72 72 69 6e 73 74 3c 30 62 31 31  rr : rrinst<0b11
38f0: 31 2c 20 22 61 64 64 22 3e 3b 0a 20 20 64 65 66  1, "add">;.  def
3900: 20 41 44 44 5f 72 69 20 3a 20 72 69 69 6e 73 74   ADD_ri : riinst
3910: 3c 30 62 31 31 31 2c 20 22 61 64 64 22 3e 3b 0a  <0b111, "add">;.
3920: 20 20 64 65 66 20 53 55 42 5f 72 72 20 3a 20 72    def SUB_rr : r
3930: 72 69 6e 73 74 3c 30 62 31 30 31 2c 20 22 73 75  rinst<0b101, "su
3940: 62 22 3e 3b 0a 20 20 64 65 66 20 53 55 42 5f 72  b">;.  def SUB_r
3950: 69 20 3a 20 72 69 69 6e 73 74 3c 30 62 31 30 31  i : riinst<0b101
3960: 2c 20 22 73 75 62 22 3e 3b 0a 20 20 64 65 66 20  , "sub">;.  def 
3970: 4d 55 4c 5f 72 72 20 3a 20 72 72 69 6e 73 74 3c  MUL_rr : rrinst<
3980: 30 62 31 30 30 2c 20 22 6d 75 6c 22 3e 3b 0a 20  0b100, "mul">;. 
3990: 20 64 65 66 20 4d 55 4c 5f 72 69 20 3a 20 72 69   def MUL_ri : ri
39a0: 69 6e 73 74 3c 30 62 31 30 30 2c 20 22 6d 75 6c  inst<0b100, "mul
39b0: 22 3e 3b 0a 20 20 2e 2e 2e 0a 0a 41 20 60 60 64  ">;.  .....A ``d
39c0: 65 66 6d 60 60 20 63 61 6e 20 61 6c 73 6f 20 62  efm`` can also b
39d0: 65 20 75 73 65 64 20 69 6e 73 69 64 65 20 61 20  e used inside a 
39e0: 6d 75 6c 74 69 63 6c 61 73 73 20 70 72 6f 76 69  multiclass provi
39f0: 64 69 6e 67 20 73 65 76 65 72 61 6c 20 6c 65 76  ding several lev
3a00: 65 6c 73 20 6f 66 0a 6d 75 6c 74 69 63 6c 61 73  els of.multiclas
3a10: 73 20 69 6e 73 74 61 6e 74 69 61 74 69 6f 6e 73  s instantiations
3a20: 2e 0a 0a 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63 6b  ..... code-block
3a30: 3a 3a 20 74 65 78 74 0a 0a 20 20 63 6c 61 73 73  :: text..  class
3a40: 20 49 6e 73 74 72 75 63 74 69 6f 6e 3c 62 69 74   Instruction<bit
3a50: 73 3c 34 3e 20 6f 70 63 2c 20 73 74 72 69 6e 67  s<4> opc, string
3a60: 20 4e 61 6d 65 3e 20 7b 0a 20 20 20 20 62 69 74   Name> {.    bit
3a70: 73 3c 34 3e 20 6f 70 63 6f 64 65 20 3d 20 6f 70  s<4> opcode = op
3a80: 63 3b 0a 20 20 20 20 73 74 72 69 6e 67 20 6e 61  c;.    string na
3a90: 6d 65 20 3d 20 4e 61 6d 65 3b 0a 20 20 7d 0a 0a  me = Name;.  }..
3aa0: 20 20 6d 75 6c 74 69 63 6c 61 73 73 20 62 61 73    multiclass bas
3ab0: 69 63 5f 72 3c 62 69 74 73 3c 34 3e 20 6f 70 63  ic_r<bits<4> opc
3ac0: 3e 20 7b 0a 20 20 20 20 64 65 66 20 72 72 20 3a  > {.    def rr :
3ad0: 20 49 6e 73 74 72 75 63 74 69 6f 6e 3c 6f 70 63   Instruction<opc
3ae0: 2c 20 22 72 72 22 3e 3b 0a 20 20 20 20 64 65 66  , "rr">;.    def
3af0: 20 72 6d 20 3a 20 49 6e 73 74 72 75 63 74 69 6f   rm : Instructio
3b00: 6e 3c 6f 70 63 2c 20 22 72 6d 22 3e 3b 0a 20 20  n<opc, "rm">;.  
3b10: 7d 0a 0a 20 20 6d 75 6c 74 69 63 6c 61 73 73 20  }..  multiclass 
3b20: 62 61 73 69 63 5f 73 3c 62 69 74 73 3c 34 3e 20  basic_s<bits<4> 
3b30: 6f 70 63 3e 20 7b 0a 20 20 20 20 64 65 66 6d 20  opc> {.    defm 
3b40: 53 53 20 3a 20 62 61 73 69 63 5f 72 3c 6f 70 63  SS : basic_r<opc
3b50: 3e 3b 0a 20 20 20 20 64 65 66 6d 20 53 44 20 3a  >;.    defm SD :
3b60: 20 62 61 73 69 63 5f 72 3c 6f 70 63 3e 3b 0a 20   basic_r<opc>;. 
3b70: 20 20 20 64 65 66 20 58 20 3a 20 49 6e 73 74 72     def X : Instr
3b80: 75 63 74 69 6f 6e 3c 6f 70 63 2c 20 22 78 22 3e  uction<opc, "x">
3b90: 3b 0a 20 20 7d 0a 0a 20 20 6d 75 6c 74 69 63 6c  ;.  }..  multicl
3ba0: 61 73 73 20 62 61 73 69 63 5f 70 3c 62 69 74 73  ass basic_p<bits
3bb0: 3c 34 3e 20 6f 70 63 3e 20 7b 0a 20 20 20 20 64  <4> opc> {.    d
3bc0: 65 66 6d 20 50 53 20 3a 20 62 61 73 69 63 5f 72  efm PS : basic_r
3bd0: 3c 6f 70 63 3e 3b 0a 20 20 20 20 64 65 66 6d 20  <opc>;.    defm 
3be0: 50 44 20 3a 20 62 61 73 69 63 5f 72 3c 6f 70 63  PD : basic_r<opc
3bf0: 3e 3b 0a 20 20 20 20 64 65 66 20 59 20 3a 20 49  >;.    def Y : I
3c00: 6e 73 74 72 75 63 74 69 6f 6e 3c 6f 70 63 2c 20  nstruction<opc, 
3c10: 22 79 22 3e 3b 0a 20 20 7d 0a 0a 20 20 64 65 66  "y">;.  }..  def
3c20: 6d 20 41 44 44 20 3a 20 62 61 73 69 63 5f 73 3c  m ADD : basic_s<
3c30: 30 78 66 3e 2c 20 62 61 73 69 63 5f 70 3c 30 78  0xf>, basic_p<0x
3c40: 66 3e 3b 0a 20 20 2e 2e 2e 0a 0a 20 20 2f 2f 20  f>;.  .....  // 
3c50: 52 65 73 75 6c 74 73 0a 20 20 64 65 66 20 41 44  Results.  def AD
3c60: 44 50 44 72 6d 20 7b 20 2e 2e 2e 0a 20 20 64 65  DPDrm { ....  de
3c70: 66 20 41 44 44 50 44 72 72 20 7b 20 2e 2e 2e 0a  f ADDPDrr { ....
3c80: 20 20 64 65 66 20 41 44 44 50 53 72 6d 20 7b 20    def ADDPSrm { 
3c90: 2e 2e 2e 0a 20 20 64 65 66 20 41 44 44 50 53 72  ....  def ADDPSr
3ca0: 72 20 7b 20 2e 2e 2e 0a 20 20 64 65 66 20 41 44  r { ....  def AD
3cb0: 44 53 44 72 6d 20 7b 20 2e 2e 2e 0a 20 20 64 65  DSDrm { ....  de
3cc0: 66 20 41 44 44 53 44 72 72 20 7b 20 2e 2e 2e 0a  f ADDSDrr { ....
3cd0: 20 20 64 65 66 20 41 44 44 59 20 7b 20 2e 2e 2e    def ADDY { ...
3ce0: 0a 20 20 64 65 66 20 41 44 44 58 20 7b 20 2e 2e  .  def ADDX { ..
3cf0: 2e 0a 0a 60 60 64 65 66 6d 60 60 20 64 65 63 6c  ...``defm`` decl
3d00: 61 72 61 74 69 6f 6e 73 20 63 61 6e 20 69 6e 68  arations can inh
3d10: 65 72 69 74 20 66 72 6f 6d 20 63 6c 61 73 73 65  erit from classe
3d20: 73 20 74 6f 6f 2c 20 74 68 65 20 72 75 6c 65 20  s too, the rule 
3d30: 74 6f 20 66 6f 6c 6c 6f 77 20 69 73 20 74 68 61  to follow is tha
3d40: 74 0a 74 68 65 20 63 6c 61 73 73 20 6c 69 73 74  t.the class list
3d50: 20 6d 75 73 74 20 73 74 61 72 74 20 61 66 74 65   must start afte
3d60: 72 20 74 68 65 20 6c 61 73 74 20 6d 75 6c 74 69  r the last multi
3d70: 63 6c 61 73 73 2c 20 61 6e 64 20 74 68 65 72 65  class, and there
3d80: 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   must be at leas
3d90: 74 0a 6f 6e 65 20 6d 75 6c 74 69 63 6c 61 73 73  t.one multiclass
3da0: 20 62 65 66 6f 72 65 20 74 68 65 6d 2e 0a 0a 2e   before them....
3db0: 2e 20 63 6f 64 65 2d 62 6c 6f 63 6b 3a 3a 20 74  . code-block:: t
3dc0: 65 78 74 0a 0a 20 20 63 6c 61 73 73 20 58 44 20  ext..  class XD 
3dd0: 7b 20 62 69 74 73 3c 34 3e 20 50 72 65 66 69 78  { bits<4> Prefix
3de0: 20 3d 20 31 31 3b 20 7d 0a 20 20 63 6c 61 73 73   = 11; }.  class
3df0: 20 58 53 20 7b 20 62 69 74 73 3c 34 3e 20 50 72   XS { bits<4> Pr
3e00: 65 66 69 78 20 3d 20 31 32 3b 20 7d 0a 0a 20 20  efix = 12; }..  
3e10: 63 6c 61 73 73 20 49 3c 62 69 74 73 3c 34 3e 20  class I<bits<4> 
3e20: 6f 70 3e 20 7b 0a 20 20 20 20 62 69 74 73 3c 34  op> {.    bits<4
3e30: 3e 20 6f 70 63 6f 64 65 20 3d 20 6f 70 3b 0a 20  > opcode = op;. 
3e40: 20 7d 0a 0a 20 20 6d 75 6c 74 69 63 6c 61 73 73   }..  multiclass
3e50: 20 52 20 7b 0a 20 20 20 20 64 65 66 20 72 72 20   R {.    def rr 
3e60: 3a 20 49 3c 34 3e 3b 0a 20 20 20 20 64 65 66 20  : I<4>;.    def 
3e70: 72 6d 20 3a 20 49 3c 32 3e 3b 0a 20 20 7d 0a 0a  rm : I<2>;.  }..
3e80: 20 20 6d 75 6c 74 69 63 6c 61 73 73 20 59 20 7b    multiclass Y {
3e90: 0a 20 20 20 20 64 65 66 6d 20 53 53 20 3a 20 52  .    defm SS : R
3ea0: 2c 20 58 44 3b 0a 20 20 20 20 64 65 66 6d 20 53  , XD;.    defm S
3eb0: 44 20 3a 20 52 2c 20 58 53 3b 0a 20 20 7d 0a 0a  D : R, XS;.  }..
3ec0: 20 20 64 65 66 6d 20 49 6e 73 74 72 20 3a 20 59    defm Instr : Y
3ed0: 3b 0a 0a 20 20 2f 2f 20 52 65 73 75 6c 74 73 0a  ;..  // Results.
3ee0: 20 20 64 65 66 20 49 6e 73 74 72 53 44 72 6d 20    def InstrSDrm 
3ef0: 7b 0a 20 20 20 20 62 69 74 73 3c 34 3e 20 6f 70  {.    bits<4> op
3f00: 63 6f 64 65 20 3d 20 7b 20 30 2c 20 30 2c 20 31  code = { 0, 0, 1
3f10: 2c 20 30 20 7d 3b 0a 20 20 20 20 62 69 74 73 3c  , 0 };.    bits<
3f20: 34 3e 20 50 72 65 66 69 78 20 3d 20 7b 20 31 2c  4> Prefix = { 1,
3f30: 20 31 2c 20 30 2c 20 30 20 7d 3b 0a 20 20 7d 0a   1, 0, 0 };.  }.
3f40: 20 20 2e 2e 2e 0a 20 20 64 65 66 20 49 6e 73 74    ....  def Inst
3f50: 72 53 53 72 72 20 7b 0a 20 20 20 20 62 69 74 73  rSSrr {.    bits
3f60: 3c 34 3e 20 6f 70 63 6f 64 65 20 3d 20 7b 20 30  <4> opcode = { 0
3f70: 2c 20 31 2c 20 30 2c 20 30 20 7d 3b 0a 20 20 20  , 1, 0, 0 };.   
3f80: 20 62 69 74 73 3c 34 3e 20 50 72 65 66 69 78 20   bits<4> Prefix 
3f90: 3d 20 7b 20 31 2c 20 30 2c 20 31 2c 20 31 20 7d  = { 1, 0, 1, 1 }
3fa0: 3b 0a 20 20 7d 0a 0a 46 69 6c 65 20 73 63 6f 70  ;.  }..File scop
3fb0: 65 20 65 6e 74 69 74 69 65 73 0a 2d 2d 2d 2d 2d  e entities.-----
3fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
3fd0: 46 69 6c 65 20 69 6e 63 6c 75 73 69 6f 6e 0a 5e  File inclusion.^
3fe0: 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 0a 0a 54  ^^^^^^^^^^^^^..T
3ff0: 61 62 6c 65 47 65 6e 20 73 75 70 70 6f 72 74 73  ableGen supports
4000: 20 74 68 65 20 27 60 60 69 6e 63 6c 75 64 65 60   the '``include`
4010: 60 27 20 74 6f 6b 65 6e 2c 20 77 68 69 63 68 20  `' token, which 
4020: 74 65 78 74 75 61 6c 6c 79 20 73 75 62 73 74 69  textually substi
4030: 74 75 74 65 73 20 74 68 65 0a 73 70 65 63 69 66  tutes the.specif
4040: 69 65 64 20 66 69 6c 65 20 69 6e 20 70 6c 61 63  ied file in plac
4050: 65 20 6f 66 20 74 68 65 20 69 6e 63 6c 75 64 65  e of the include
4060: 20 64 69 72 65 63 74 69 76 65 2e 20 20 54 68 65   directive.  The
4070: 20 66 69 6c 65 6e 61 6d 65 20 73 68 6f 75 6c 64   filename should
4080: 20 62 65 0a 73 70 65 63 69 66 69 65 64 20 61 73   be.specified as
4090: 20 61 20 64 6f 75 62 6c 65 20 71 75 6f 74 65 64   a double quoted
40a0: 20 73 74 72 69 6e 67 20 69 6d 6d 65 64 69 61 74   string immediat
40b0: 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 27 60  ely after the '`
40c0: 60 69 6e 63 6c 75 64 65 60 60 27 20 6b 65 79 77  `include``' keyw
40d0: 6f 72 64 2e 0a 45 78 61 6d 70 6c 65 3a 0a 0a 2e  ord..Example:...
40e0: 2e 20 63 6f 64 65 2d 62 6c 6f 63 6b 3a 3a 20 74  . code-block:: t
40f0: 65 78 74 0a 0a 20 20 69 6e 63 6c 75 64 65 20 22  ext..  include "
4100: 66 6f 6f 2e 74 64 22 0a 0a 27 6c 65 74 27 20 65  foo.td"..'let' e
4110: 78 70 72 65 73 73 69 6f 6e 73 0a 5e 5e 5e 5e 5e  xpressions.^^^^^
4120: 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 5e 0a 0a 22 4c  ^^^^^^^^^^^^.."L
4130: 65 74 22 20 65 78 70 72 65 73 73 69 6f 6e 73 20  et" expressions 
4140: 61 74 20 66 69 6c 65 20 73 63 6f 70 65 20 61 72  at file scope ar
4150: 65 20 73 69 6d 69 6c 61 72 20 74 6f 20 60 22 6c  e similar to `"l
4160: 65 74 22 20 65 78 70 72 65 73 73 69 6f 6e 73 20  et" expressions 
4170: 77 69 74 68 69 6e 20 61 0a 72 65 63 6f 72 64 60  within a.record`
4180: 5f 2c 20 65 78 63 65 70 74 20 74 68 65 79 20 63  _, except they c
4190: 61 6e 20 73 70 65 63 69 66 79 20 61 20 76 61 6c  an specify a val
41a0: 75 65 20 62 69 6e 64 69 6e 67 20 66 6f 72 20 6d  ue binding for m
41b0: 75 6c 74 69 70 6c 65 20 72 65 63 6f 72 64 73 20  ultiple records 
41c0: 61 74 20 61 0a 74 69 6d 65 2c 20 61 6e 64 20 6d  at a.time, and m
41d0: 61 79 20 62 65 20 75 73 65 66 75 6c 20 69 6e 20  ay be useful in 
41e0: 63 65 72 74 61 69 6e 20 6f 74 68 65 72 20 63 61  certain other ca
41f0: 73 65 73 2e 20 20 46 69 6c 65 2d 73 63 6f 70 65  ses.  File-scope
4200: 20 6c 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73   let expressions
4210: 20 61 72 65 0a 72 65 61 6c 6c 79 20 6a 75 73 74   are.really just
4220: 20 61 6e 6f 74 68 65 72 20 77 61 79 20 74 68 61   another way tha
4230: 74 20 54 61 62 6c 65 47 65 6e 20 61 6c 6c 6f 77  t TableGen allow
4240: 73 20 74 68 65 20 65 6e 64 2d 75 73 65 72 20 74  s the end-user t
4250: 6f 20 66 61 63 74 6f 72 20 6f 75 74 0a 63 6f 6d  o factor out.com
4260: 6d 6f 6e 61 6c 69 74 79 20 66 72 6f 6d 20 74 68  monality from th
4270: 65 20 72 65 63 6f 72 64 73 2e 0a 0a 46 69 6c 65  e records...File
4280: 2d 73 63 6f 70 65 20 22 6c 65 74 22 20 65 78 70  -scope "let" exp
4290: 72 65 73 73 69 6f 6e 73 20 74 61 6b 65 20 61 20  ressions take a 
42a0: 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
42b0: 6c 69 73 74 20 6f 66 20 62 69 6e 64 69 6e 67 73  list of bindings
42c0: 20 74 6f 20 61 70 70 6c 79 2c 0a 61 6e 64 20 6f   to apply,.and o
42d0: 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 63 6f 72  ne or more recor
42e0: 64 73 20 74 6f 20 62 69 6e 64 20 74 68 65 20 76  ds to bind the v
42f0: 61 6c 75 65 73 20 69 6e 2e 20 20 48 65 72 65 20  alues in.  Here 
4300: 61 72 65 20 73 6f 6d 65 20 65 78 61 6d 70 6c 65  are some example
4310: 73 3a 0a 0a 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63  s:.... code-bloc
4320: 6b 3a 3a 20 74 65 78 74 0a 0a 20 20 6c 65 74 20  k:: text..  let 
4330: 69 73 54 65 72 6d 69 6e 61 74 6f 72 20 3d 20 31  isTerminator = 1
4340: 2c 20 69 73 52 65 74 75 72 6e 20 3d 20 31 2c 20  , isReturn = 1, 
4350: 69 73 42 61 72 72 69 65 72 20 3d 20 31 2c 20 68  isBarrier = 1, h
4360: 61 73 43 74 72 6c 44 65 70 20 3d 20 31 20 69 6e  asCtrlDep = 1 in
4370: 0a 20 20 20 20 64 65 66 20 52 45 54 20 3a 20 49  .    def RET : I
4380: 3c 30 78 43 33 2c 20 52 61 77 46 72 6d 2c 20 28  <0xC3, RawFrm, (
4390: 6f 75 74 73 29 2c 20 28 69 6e 73 29 2c 20 22 72  outs), (ins), "r
43a0: 65 74 22 2c 20 5b 28 58 38 36 72 65 74 66 6c 61  et", [(X86retfla
43b0: 67 20 30 29 5d 3e 3b 0a 0a 20 20 6c 65 74 20 69  g 0)]>;..  let i
43c0: 73 43 61 6c 6c 20 3d 20 31 20 69 6e 0a 20 20 20  sCall = 1 in.   
43d0: 20 2f 2f 20 41 6c 6c 20 63 61 6c 6c 73 20 63 6c   // All calls cl
43e0: 6f 62 62 65 72 20 74 68 65 20 6e 6f 6e 2d 63 61  obber the non-ca
43f0: 6c 6c 65 65 20 73 61 76 65 64 20 72 65 67 69 73  llee saved regis
4400: 74 65 72 73 2e 2e 2e 0a 20 20 20 20 6c 65 74 20  ters....    let 
4410: 44 65 66 73 20 3d 20 5b 45 41 58 2c 20 45 43 58  Defs = [EAX, ECX
4420: 2c 20 45 44 58 2c 20 46 50 30 2c 20 46 50 31 2c  , EDX, FP0, FP1,
4430: 20 46 50 32 2c 20 46 50 33 2c 20 46 50 34 2c 20   FP2, FP3, FP4, 
4440: 46 50 35 2c 20 46 50 36 2c 20 53 54 30 2c 0a 20  FP5, FP6, ST0,. 
4450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
4460: 4d 30 2c 20 4d 4d 31 2c 20 4d 4d 32 2c 20 4d 4d  M0, MM1, MM2, MM
4470: 33 2c 20 4d 4d 34 2c 20 4d 4d 35 2c 20 4d 4d 36  3, MM4, MM5, MM6
4480: 2c 20 4d 4d 37 2c 0a 20 20 20 20 20 20 20 20 20  , MM7,.         
4490: 20 20 20 20 20 20 20 58 4d 4d 30 2c 20 58 4d 4d         XMM0, XMM
44a0: 31 2c 20 58 4d 4d 32 2c 20 58 4d 4d 33 2c 20 58  1, XMM2, XMM3, X
44b0: 4d 4d 34 2c 20 58 4d 4d 35 2c 20 58 4d 4d 36 2c  MM4, XMM5, XMM6,
44c0: 20 58 4d 4d 37 2c 20 45 46 4c 41 47 53 5d 20 69   XMM7, EFLAGS] i
44d0: 6e 20 7b 0a 20 20 20 20 20 20 64 65 66 20 43 41  n {.      def CA
44e0: 4c 4c 70 63 72 65 6c 33 32 20 3a 20 49 69 33 32  LLpcrel32 : Ii32
44f0: 3c 30 78 45 38 2c 20 52 61 77 46 72 6d 2c 20 28  <0xE8, RawFrm, (
4500: 6f 75 74 73 29 2c 20 28 69 6e 73 20 69 33 32 69  outs), (ins i32i
4510: 6d 6d 3a 24 64 73 74 2c 76 61 72 69 61 62 6c 65  mm:$dst,variable
4520: 5f 6f 70 73 29 2c 0a 20 20 20 20 20 20 20 20 20  _ops),.         
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 22 63 61 6c 6c 5c 74 24 7b 64 73 74      "call\t${dst
4550: 3a 63 61 6c 6c 7d 22 2c 20 5b 5d 3e 3b 0a 20 20  :call}", []>;.  
4560: 20 20 20 20 64 65 66 20 43 41 4c 4c 33 32 72 20      def CALL32r 
4570: 20 20 20 20 3a 20 49 3c 30 78 46 46 2c 20 4d 52      : I<0xFF, MR
4580: 4d 32 72 2c 20 28 6f 75 74 73 29 2c 20 28 69 6e  M2r, (outs), (in
4590: 73 20 47 52 33 32 3a 24 64 73 74 2c 20 76 61 72  s GR32:$dst, var
45a0: 69 61 62 6c 65 5f 6f 70 73 29 2c 0a 20 20 20 20  iable_ops),.    
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45c0: 20 20 20 20 20 20 22 63 61 6c 6c 5c 74 7b 2a 7d        "call\t{*}
45d0: 24 64 73 74 22 2c 20 5b 28 58 38 36 63 61 6c 6c  $dst", [(X86call
45e0: 20 47 52 33 32 3a 24 64 73 74 29 5d 3e 3b 0a 20   GR32:$dst)]>;. 
45f0: 20 20 20 20 20 64 65 66 20 43 41 4c 4c 33 32 6d       def CALL32m
4600: 20 20 20 20 20 3a 20 49 3c 30 78 46 46 2c 20 4d       : I<0xFF, M
4610: 52 4d 32 6d 2c 20 28 6f 75 74 73 29 2c 20 28 69  RM2m, (outs), (i
4620: 6e 73 20 69 33 32 6d 65 6d 3a 24 64 73 74 2c 20  ns i32mem:$dst, 
4630: 76 61 72 69 61 62 6c 65 5f 6f 70 73 29 2c 0a 20  variable_ops),. 
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4650: 20 20 20 20 20 20 20 20 20 22 63 61 6c 6c 5c 74           "call\t
4660: 7b 2a 7d 24 64 73 74 22 2c 20 5b 5d 3e 3b 0a 20  {*}$dst", []>;. 
4670: 20 20 20 7d 0a 0a 46 69 6c 65 2d 73 63 6f 70 65     }..File-scope
4680: 20 22 6c 65 74 22 20 65 78 70 72 65 73 73 69 6f   "let" expressio
4690: 6e 73 20 61 72 65 20 6f 66 74 65 6e 20 75 73 65  ns are often use
46a0: 66 75 6c 20 77 68 65 6e 20 61 20 63 6f 75 70 6c  ful when a coupl
46b0: 65 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 73  e of definitions
46c0: 20 6e 65 65 64 0a 74 6f 20 62 65 20 61 64 64 65   need.to be adde
46d0: 64 20 74 6f 20 73 65 76 65 72 61 6c 20 72 65 63  d to several rec
46e0: 6f 72 64 73 2c 20 61 6e 64 20 74 68 65 20 72 65  ords, and the re
46f0: 63 6f 72 64 73 20 64 6f 20 6e 6f 74 20 6f 74 68  cords do not oth
4700: 65 72 77 69 73 65 20 6e 65 65 64 20 74 6f 20 62  erwise need to b
4710: 65 0a 6f 70 65 6e 65 64 2c 20 61 73 20 69 6e 20  e.opened, as in 
4720: 74 68 65 20 63 61 73 65 20 77 69 74 68 20 74 68  the case with th
4730: 65 20 60 60 43 41 4c 4c 2a 60 60 20 69 6e 73 74  e ``CALL*`` inst
4740: 72 75 63 74 69 6f 6e 73 20 61 62 6f 76 65 2e 0a  ructions above..
4750: 0a 49 74 27 73 20 61 6c 73 6f 20 70 6f 73 73 69  .It's also possi
4760: 62 6c 65 20 74 6f 20 75 73 65 20 22 6c 65 74 22  ble to use "let"
4770: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 73   expressions ins
4780: 69 64 65 20 6d 75 6c 74 69 63 6c 61 73 73 65 73  ide multiclasses
4790: 2c 20 70 72 6f 76 69 64 69 6e 67 20 6d 6f 72 65  , providing more
47a0: 0a 77 61 79 73 20 74 6f 20 66 61 63 74 6f 72 20  .ways to factor 
47b0: 6f 75 74 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 20  out commonality 
47c0: 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 73  from the records
47d0: 2c 20 73 70 65 63 69 61 6c 6c 79 20 69 66 20 75  , specially if u
47e0: 73 69 6e 67 20 73 65 76 65 72 61 6c 0a 6c 65 76  sing several.lev
47f0: 65 6c 73 20 6f 66 20 6d 75 6c 74 69 63 6c 61 73  els of multiclas
4800: 73 20 69 6e 73 74 61 6e 74 69 61 74 69 6f 6e 73  s instantiations
4810: 2e 20 54 68 69 73 20 61 6c 73 6f 20 61 76 6f 69  . This also avoi
4820: 64 73 20 74 68 65 20 6e 65 65 64 20 6f 66 20 75  ds the need of u
4830: 73 69 6e 67 20 22 6c 65 74 22 0a 65 78 70 72 65  sing "let".expre
4840: 73 73 69 6f 6e 73 20 77 69 74 68 69 6e 20 73 75  ssions within su
4850: 62 73 65 71 75 65 6e 74 20 72 65 63 6f 72 64 73  bsequent records
4860: 20 69 6e 73 69 64 65 20 61 20 6d 75 6c 74 69 63   inside a multic
4870: 6c 61 73 73 2e 0a 0a 2e 2e 20 63 6f 64 65 2d 62  lass..... code-b
4880: 6c 6f 63 6b 3a 3a 20 74 65 78 74 0a 0a 20 20 6d  lock:: text..  m
4890: 75 6c 74 69 63 6c 61 73 73 20 62 61 73 69 63 5f  ulticlass basic_
48a0: 72 3c 62 69 74 73 3c 34 3e 20 6f 70 63 3e 20 7b  r<bits<4> opc> {
48b0: 0a 20 20 20 20 6c 65 74 20 50 72 65 64 69 63 61  .    let Predica
48c0: 74 65 73 20 3d 20 5b 48 61 73 53 53 45 32 5d 20  tes = [HasSSE2] 
48d0: 69 6e 20 7b 0a 20 20 20 20 20 20 64 65 66 20 72  in {.      def r
48e0: 72 20 3a 20 49 6e 73 74 72 75 63 74 69 6f 6e 3c  r : Instruction<
48f0: 6f 70 63 2c 20 22 72 72 22 3e 3b 0a 20 20 20 20  opc, "rr">;.    
4900: 20 20 64 65 66 20 72 6d 20 3a 20 49 6e 73 74 72    def rm : Instr
4910: 75 63 74 69 6f 6e 3c 6f 70 63 2c 20 22 72 6d 22  uction<opc, "rm"
4920: 3e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6c 65 74  >;.    }.    let
4930: 20 50 72 65 64 69 63 61 74 65 73 20 3d 20 5b 48   Predicates = [H
4940: 61 73 53 53 45 33 5d 20 69 6e 0a 20 20 20 20 20  asSSE3] in.     
4950: 20 64 65 66 20 72 78 20 3a 20 49 6e 73 74 72 75   def rx : Instru
4960: 63 74 69 6f 6e 3c 6f 70 63 2c 20 22 72 78 22 3e  ction<opc, "rx">
4970: 3b 0a 20 20 7d 0a 0a 20 20 6d 75 6c 74 69 63 6c  ;.  }..  multicl
4980: 61 73 73 20 62 61 73 69 63 5f 73 73 3c 62 69 74  ass basic_ss<bit
4990: 73 3c 34 3e 20 6f 70 63 3e 20 7b 0a 20 20 20 20  s<4> opc> {.    
49a0: 6c 65 74 20 49 73 44 6f 75 62 6c 65 20 3d 20 30  let IsDouble = 0
49b0: 20 69 6e 0a 20 20 20 20 20 20 64 65 66 6d 20 53   in.      defm S
49c0: 53 20 3a 20 62 61 73 69 63 5f 72 3c 6f 70 63 3e  S : basic_r<opc>
49d0: 3b 0a 0a 20 20 20 20 6c 65 74 20 49 73 44 6f 75  ;..    let IsDou
49e0: 62 6c 65 20 3d 20 31 20 69 6e 0a 20 20 20 20 20  ble = 1 in.     
49f0: 20 64 65 66 6d 20 53 44 20 3a 20 62 61 73 69 63   defm SD : basic
4a00: 5f 72 3c 6f 70 63 3e 3b 0a 20 20 7d 0a 0a 20 20  _r<opc>;.  }..  
4a10: 64 65 66 6d 20 41 44 44 20 3a 20 62 61 73 69 63  defm ADD : basic
4a20: 5f 73 73 3c 30 78 66 3e 3b 0a 0a 4c 6f 6f 70 69  _ss<0xf>;..Loopi
4a30: 6e 67 0a 5e 5e 5e 5e 5e 5e 5e 0a 0a 54 61 62 6c  ng.^^^^^^^..Tabl
4a40: 65 47 65 6e 20 73 75 70 70 6f 72 74 73 20 74 68  eGen supports th
4a50: 65 20 27 60 60 66 6f 72 65 61 63 68 60 60 27 20  e '``foreach``' 
4a60: 62 6c 6f 63 6b 2c 20 77 68 69 63 68 20 74 65 78  block, which tex
4a70: 74 75 61 6c 6c 79 20 72 65 70 6c 69 63 61 74 65  tually replicate
4a80: 73 20 74 68 65 20 6c 6f 6f 70 0a 62 6f 64 79 2c  s the loop.body,
4a90: 20 73 75 62 73 74 69 74 75 74 69 6e 67 20 69 74   substituting it
4aa0: 65 72 61 74 6f 72 20 76 61 6c 75 65 73 20 66 6f  erator values fo
4ab0: 72 20 69 74 65 72 61 74 6f 72 20 72 65 66 65 72  r iterator refer
4ac0: 65 6e 63 65 73 20 69 6e 20 74 68 65 20 62 6f 64  ences in the bod
4ad0: 79 2e 0a 45 78 61 6d 70 6c 65 3a 0a 0a 2e 2e 20  y..Example:.... 
4ae0: 63 6f 64 65 2d 62 6c 6f 63 6b 3a 3a 20 74 65 78  code-block:: tex
4af0: 74 0a 0a 20 20 66 6f 72 65 61 63 68 20 69 20 3d  t..  foreach i =
4b00: 20 5b 30 2c 20 31 2c 20 32 2c 20 33 5d 20 69 6e   [0, 1, 2, 3] in
4b10: 20 7b 0a 20 20 20 20 64 65 66 20 52 23 69 20 3a   {.    def R#i :
4b20: 20 52 65 67 69 73 74 65 72 3c 2e 2e 2e 3e 3b 0a   Register<...>;.
4b30: 20 20 20 20 64 65 66 20 46 23 69 20 3a 20 52 65      def F#i : Re
4b40: 67 69 73 74 65 72 3c 2e 2e 2e 3e 3b 0a 20 20 7d  gister<...>;.  }
4b50: 0a 0a 54 68 69 73 20 77 69 6c 6c 20 63 72 65 61  ..This will crea
4b60: 74 65 20 6f 62 6a 65 63 74 73 20 60 60 52 30 60  te objects ``R0`
4b70: 60 2c 20 60 60 52 31 60 60 2c 20 60 60 52 32 60  `, ``R1``, ``R2`
4b80: 60 20 61 6e 64 20 60 60 52 33 60 60 2e 20 20 60  ` and ``R3``.  `
4b90: 60 66 6f 72 65 61 63 68 60 60 20 62 6c 6f 63 6b  `foreach`` block
4ba0: 73 0a 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e  s.may be nested.
4bb0: 20 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e 6c   If there is onl
4bc0: 79 20 6f 6e 65 20 69 74 65 6d 20 69 6e 20 74 68  y one item in th
4bd0: 65 20 62 6f 64 79 20 74 68 65 20 62 72 61 63 65  e body the brace
4be0: 73 20 6d 61 79 20 62 65 0a 65 6c 69 64 65 64 3a  s may be.elided:
4bf0: 0a 0a 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63 6b 3a  .... code-block:
4c00: 3a 20 74 65 78 74 0a 0a 20 20 66 6f 72 65 61 63  : text..  foreac
4c10: 68 20 69 20 3d 20 5b 30 2c 20 31 2c 20 32 2c 20  h i = [0, 1, 2, 
4c20: 33 5d 20 69 6e 0a 20 20 20 20 64 65 66 20 52 23  3] in.    def R#
4c30: 69 20 3a 20 52 65 67 69 73 74 65 72 3c 2e 2e 2e  i : Register<...
4c40: 3e 3b 0a 0a 43 6f 64 65 20 47 65 6e 65 72 61 74  >;..Code Generat
4c50: 6f 72 20 62 61 63 6b 65 6e 64 20 69 6e 66 6f 0a  or backend info.
4c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 45 78 70  ===========..Exp
4c80: 72 65 73 73 69 6f 6e 73 20 75 73 65 64 20 62 79  ressions used by
4c90: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
4ca0: 74 6f 20 64 65 73 63 72 69 62 65 20 69 6e 73 74  to describe inst
4cb0: 72 75 63 74 69 6f 6e 73 20 61 6e 64 20 69 73 65  ructions and ise
4cc0: 6c 20 70 61 74 74 65 72 6e 73 3a 0a 0a 60 60 28  l patterns:..``(
4cd0: 69 6d 70 6c 69 63 69 74 20 61 29 60 60 0a 20 20  implicit a)``.  
4ce0: 20 20 61 6e 20 69 6d 70 6c 69 63 69 74 6c 79 20    an implicitly 
4cf0: 64 65 66 69 6e 65 64 20 70 68 79 73 69 63 61 6c  defined physical
4d00: 20 72 65 67 69 73 74 65 72 2e 20 20 54 68 69 73   register.  This
4d10: 20 74 65 6c 6c 73 20 74 68 65 20 64 61 67 20 69   tells the dag i
4d20: 6e 73 74 72 75 63 74 69 6f 6e 0a 20 20 20 20 73  nstruction.    s
4d30: 65 6c 65 63 74 69 6f 6e 20 65 6d 69 74 74 65 72  election emitter
4d40: 20 74 68 65 20 69 6e 70 75 74 20 70 61 74 74 65   the input patte
4d50: 72 6e 27 73 20 65 78 74 72 61 20 64 65 66 69 6e  rn's extra defin
4d60: 69 74 69 6f 6e 73 20 6d 61 74 63 68 65 73 20 69  itions matches i
4d70: 6d 70 6c 69 63 69 74 0a 20 20 20 20 70 68 79 73  mplicit.    phys
4d80: 69 63 61 6c 20 72 65 67 69 73 74 65 72 20 64 65  ical register de
4d90: 66 69 6e 69 74 69 6f 6e 73 2e 0a 0a              finitions...