From 2faba4ce1a6c404d9b97b521efa2ffc3125cfaab Mon Sep 17 00:00:00 2001 From: Benjamin Landers Date: Fri, 10 Jul 2020 14:30:56 -0700 Subject: [PATCH] Add separate 64 bit instruction table to documentation --- src/rars/extras/Documentation.java | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/rars/extras/Documentation.java b/src/rars/extras/Documentation.java index 1daef325..c62a9868 100644 --- a/src/rars/extras/Documentation.java +++ b/src/rars/extras/Documentation.java @@ -1,12 +1,14 @@ package rars.extras; import rars.Globals; +import rars.Settings; import rars.assembler.Directives; import rars.riscv.*; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; /** * Small class for automatically generating documentation. @@ -23,6 +25,8 @@ public static void main(String[] args){ System.out.println(createSyscallMarkdown()); System.out.println(createInstructionMarkdown(BasicInstruction.class)); System.out.println(createInstructionMarkdown(ExtendedInstruction.class)); + System.out.println(createInstructionMarkdown64Only(BasicInstruction.class)); + System.out.println(createInstructionMarkdown64Only(ExtendedInstruction.class)); } public static String createDirectiveMarkdown(){ @@ -61,8 +65,13 @@ public static String createSyscallMarkdown(){ } public static String createInstructionMarkdown(Class instructionClass){ + Globals.getSettings().setBooleanSettingNonPersistent(Settings.Bool.RV64_ENABLED,false); + InstructionSet.rv64 = false; + Globals.instructionSet.populate(); + ArrayList instructionList = Globals.instructionSet.getInstructionList(); instructionList.sort(Comparator.comparing(Instruction::getExampleFormat)); + StringBuilder output = new StringBuilder("| Example Usage | Description |\n|---------------|-------------|"); for (Instruction instr : instructionList) { if (instructionClass.isInstance(instr)) { @@ -75,4 +84,33 @@ public static String createInstructionMarkdown(Class inst } return output.toString(); } + public static String createInstructionMarkdown64Only(Class instructionClass){ + + Globals.getSettings().setBooleanSettingNonPersistent(Settings.Bool.RV64_ENABLED,false); + InstructionSet.rv64 = false; + Globals.instructionSet.populate(); + + HashSet set = new HashSet<>(); + for (Instruction i : Globals.instructionSet.getInstructionList()){ + set.add(i.getExampleFormat()); + } + + Globals.getSettings().setBooleanSettingNonPersistent(Settings.Bool.RV64_ENABLED,true); + InstructionSet.rv64 = true; + Globals.instructionSet.populate(); + + ArrayList instructionList64 = Globals.instructionSet.getInstructionList(); + instructionList64.sort(Comparator.comparing(Instruction::getExampleFormat)); + StringBuilder output = new StringBuilder("| Example Usage | Description |\n|---------------|-------------|"); + for (Instruction instr : instructionList64) { + if (instructionClass.isInstance(instr) && !set.contains(instr.getExampleFormat())) { + output.append("\n|"); + output.append(instr.getExampleFormat()); + output.append('|'); + output.append(instr.getDescription()); + output.append('|'); + } + } + return output.toString(); + } }