-<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>Now, for static code generation you also need to write an instruction
-selector for your platform: see <tt>lib/Target/*/*ISelSimple.cpp</tt> which
-is no longer "simple" but it gives you the idea: you have to be able to create
-MachineInstrs for any given LLVM instruction using the <tt>InstVisitor</tt>
-pattern, and produce a <tt>MachineFunction</tt> with
-<tt>MachineBasicBlock</tt>s full of <tt><a
-href="CodeGenerator.html#machineinstr">MachineInstr</a></tt>s for a
-corresponding LLVM Function. 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.