-<li>Implement the assembly printer for the architecture. Usually, if you have
-described the instruction set with the assembly printer generator in mind, that
-step can be almost automated.</li>
-</ul>
-
-<p>You also need to write an instruction selector for your platform. The
-recommended method is the <a
-href="CodeGenerator.html#instselect">pattern-matching instruction selector</a>,
-examples of which you can see in other targets:
-<tt>lib/Target/*/*ISelPattern.cpp</tt>. The former method for writing
-instruction selectors (<b>not</b> recommended for new targets) is evident in
-<tt>lib/Target/*/*ISelSimple.cpp</tt>, which are <tt>InstVisitor</tt>-based
-translators, generating code for an LLVM instruction at a time. Creating an
-instruction selector is perhaps the most time-consuming part of creating a
-back-end.</p>
-
-<p>To create a JIT for your platform:</p>
-
+<li>Implement the assembly printer for the architecture.
+ <ul>
+ <li>Define all of the assembly strings for your target, adding them to the
+ instructions in your *InstrInfo.td file.</li>
+ <li>Implement the <tt>llvm::AsmPrinter</tt> interface.</li>
+ </ul>
+</li>
+<li>Implement an instruction selector for the architecture.
+ <ul>
+ <li>The recommended method is the <a href="CodeGenerator.html#instselect">
+ pattern-matching DAG-to-DAG instruction selector</a> (for example, see
+ the PowerPC backend in PPCISelDAGtoDAG.cpp). Parts of instruction
+ selector creation can be performed by adding patterns to the instructions
+ in your <tt>.td</tt> file.</li>
+ </ul>
+</li>
+<li>Optionally, add subtarget support.