+<p>TableGen permits the definition of parameterized classes as well as normal
+concrete classes. Parameterized TableGen classes specify a list of variable
+bindings (which may optionally have defaults) that are bound when used. Here is
+a simple example:</p>
+
+<pre>
+<b>class</b> FPFormat<<b>bits</b><3> val> {
+ <b>bits</b><3> Value = val;
+}
+<b>def</b> NotFP : FPFormat<0>;
+<b>def</b> ZeroArgFP : FPFormat<1>;
+<b>def</b> OneArgFP : FPFormat<2>;
+<b>def</b> OneArgFPRW : FPFormat<3>;
+<b>def</b> TwoArgFP : FPFormat<4>;
+<b>def</b> SpecialFP : FPFormat<5>;
+</pre>
+
+<p>In this case, template arguments are used as a space efficient way to specify
+a list of "enumeration values", each with a "Value" field set to the specified
+integer.</p>
+
+<p>The more esoteric forms of <a href="#values">TableGen expressions</a> are
+useful in conjunction with template arguments. As an example:</p>
+
+<pre>
+<b>class</b> ModRefVal<<b>bits</b><2> val> {
+ <b>bits</b><2> Value = val;
+}
+
+<b>def</b> None : ModRefVal<0>;
+<b>def</b> Mod : ModRefVal<1>;
+<b>def</b> Ref : ModRefVal<2>;
+<b>def</b> ModRef : ModRefVal<3>;
+
+<b>class</b> Value<ModRefVal MR> {
+ <i>// decode some information into a more convenient format, while providing
+ // a nice interface to the user of the "Value" class.</i>
+ <b>bit</b> isMod = MR.Value{0};
+ <b>bit</b> isRef = MR.Value{1};
+
+ <i>// other stuff...</i>
+}
+
+<i>// Example uses</i>
+<b>def</b> bork : Value<Mod>;
+<b>def</b> zork : Value<Ref>;
+<b>def</b> hork : Value<ModRef>;
+</pre>
+
+<p>This is obviously a contrived example, but it shows how template arguments
+can be used to decouple the interface provided to the user of the class from the
+actual internal data representation expected by the class. In this case,
+running <tt>tblgen</tt> on the example prints the following definitions:</p>
+
+<pre>
+<b>def</b> bork { <i>// Value</i>
+ <b>bit</b> isMod = 1;
+ <b>bit</b> isRef = 0;
+}
+<b>def</b> hork { <i>// Value</i>
+ <b>bit</b> isMod = 1;
+ <b>bit</b> isRef = 1;
+}
+<b>def</b> zork { <i>// Value</i>
+ <b>bit</b> isMod = 0;
+ <b>bit</b> isRef = 1;
+}
+</pre>
+
+<p> This shows that TableGen was able to dig into the argument and extract a
+piece of information that was requested by the designer of the "Value" class.
+For more realistic examples, please see existing users of TableGen, such as the
+X86 backend.</p>
+