[otbn,doc] Re-organise ISA rendering Add some headings and generally re-order things a bit to make the rendered documentation a bit more readable. Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
diff --git a/hw/ip/otbn/util/yaml_to_doc.py b/hw/ip/otbn/util/yaml_to_doc.py index e7ffa9a..7630dd1 100755 --- a/hw/ip/otbn/util/yaml_to_doc.py +++ b/hw/ip/otbn/util/yaml_to_doc.py
@@ -243,10 +243,11 @@ assert heading_level > 0 parts = [] + mnem = insn.mnemonic.upper() + subhead = '#' * (heading_level + 1) + ' ' # Heading, based on mnemonic (upper-cased) - parts.append('{} {}\n'.format('#' * heading_level, - insn.mnemonic.upper())) + parts.append('{} {}\n'.format('#' * heading_level, mnem)) # If there's a note, render it as a callout if insn.note is not None: @@ -263,18 +264,20 @@ # Optional documentation (using existing markdown formatting). Add a blank # line afterwards to separate from the syntax and operand table. if insn.doc is not None: - parts.append(insn.doc + '\n\n') - - # Syntax example: either given explicitly or figured out from operands - parts.append("```\n") - parts.append(insn.mnemonic.upper() + ('' if insn.glued_ops else ' ')) - parts.append(insn.syntax.render_doc()) - parts.append("\n```\n\n") + parts.append(insn.doc + '\n') + parts.append('\n') # If this came from the RV32I instruction set, say so. if insn.rv32i: parts.append('This instruction is defined in the RV32I instruction set.\n\n') + # Syntax example: either given explicitly or figured out from operands + parts.append(subhead + 'Syntax\n') + parts.append("```\n") + parts.append(insn.mnemonic.upper() + ('' if insn.glued_ops else ' ')) + parts.append(insn.syntax.render_doc()) + parts.append("\n```\n\n") + is_pseudo = insn.literal_pseudo_op or insn.python_pseudo_op # If we have an encoding, match up encoding fields with operands @@ -287,10 +290,12 @@ # Show the operand table if there is at least one operand and this isn't a # pseudo-op. if insn.operands and not is_pseudo: + parts.append(subhead + 'Operands\n') parts.append(render_operand_table(insn.operands, o2e)) # Show encoding if we have one if e2o is not None: + parts.append(subhead + 'Encoding\n') assert insn.encoding is not None parts.append(render_encoding(insn.mnemonic, insn.encoding, e2o)) @@ -299,8 +304,7 @@ parts.append(render_literal_pseudo_op(insn.literal_pseudo_op)) if impl is not None: - parts.append('{} Operation\n\n' - .format('#' * (heading_level + 1))) + parts.append(subhead + 'Operation\n') # Add a handy header to remind readers that enum operands and option # operands are referred to by their integer values.