package org.reasm.m68k.assembly.internal; import java.util.Map; import java.util.TreeMap; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import org.reasm.Symbol; import org.reasm.SymbolReference; import org.reasm.SymbolResolutionFallback; /** * Exposes constants for the instructions and directives supported by the M68000 Family assembler. * * @author Francis Gagné */ @SuppressWarnings("javadoc") public final class Mnemonics { static final class MnemonicMap { private final Map<String, MnemonicSymbol> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); @CheckForNull MnemonicSymbol get(@Nonnull String mnemonicName) { return this.map.get(mnemonicName); } void put(@Nonnull String mnemonicName, @Nonnull Mnemonic mnemonicHandler) { this.map.put(mnemonicName, new MnemonicSymbol(mnemonicName, mnemonicHandler)); } } public static final String ABCD = "ABCD"; public static final String ADD = "ADD"; public static final String ADDA = "ADDA"; public static final String ADDI = "ADDI"; public static final String ADDQ = "ADDQ"; public static final String ADDX = "ADDX"; public static final String AND = "AND"; public static final String ANDI = "ANDI"; public static final String ASL = "ASL"; public static final String ASR = "ASR"; public static final String BCC = "BCC"; public static final String BCHG = "BCHG"; public static final String BCLR = "BCLR"; public static final String BCS = "BCS"; public static final String BEQ = "BEQ"; public static final String BGE = "BGE"; public static final String BGND = "BGND"; public static final String BGT = "BGT"; public static final String BHI = "BHI"; public static final String BHS = "BHS"; public static final String BKPT = "BKPT"; public static final String BLE = "BLE"; public static final String BLO = "BLO"; public static final String BLS = "BLS"; public static final String BLT = "BLT"; public static final String BMI = "BMI"; public static final String BNE = "BNE"; public static final String BPL = "BPL"; public static final String BRA = "BRA"; public static final String BSET = "BSET"; public static final String BSR = "BSR"; public static final String BTST = "BTST"; public static final String BVC = "BVC"; public static final String BVS = "BVS"; public static final String CHK = "CHK"; public static final String CLR = "CLR"; public static final String CMP = "CMP"; public static final String CMPA = "CMPA"; public static final String CMPI = "CMPI"; public static final String CMPM = "CMPM"; public static final String DBCC = "DBCC"; public static final String DBCS = "DBCS"; public static final String DBEQ = "DBEQ"; public static final String DBF = "DBF"; public static final String DBGE = "DBGE"; public static final String DBGT = "DBGT"; public static final String DBHI = "DBHI"; public static final String DBHS = "DBHS"; public static final String DBLE = "DBLE"; public static final String DBLO = "DBLO"; public static final String DBLS = "DBLS"; public static final String DBLT = "DBLT"; public static final String DBMI = "DBMI"; public static final String DBNE = "DBNE"; public static final String DBPL = "DBPL"; public static final String DBRA = "DBRA"; public static final String DBT = "DBT"; public static final String DBVC = "DBVC"; public static final String DBVS = "DBVS"; public static final String DIVS = "DIVS"; public static final String DIVSL = "DIVSL"; public static final String DIVU = "DIVU"; public static final String DIVUL = "DIVUL"; public static final String EOR = "EOR"; public static final String EORI = "EORI"; public static final String EXG = "EXG"; public static final String EXT = "EXT"; public static final String EXTB = "EXTB"; public static final String ILLEGAL = "ILLEGAL"; public static final String JMP = "JMP"; public static final String JSR = "JSR"; public static final String LEA = "LEA"; public static final String LINK = "LINK"; public static final String LPSTOP = "LPSTOP"; public static final String LSL = "LSL"; public static final String LSR = "LSR"; public static final String MOVE = "MOVE"; public static final String MOVEA = "MOVEA"; public static final String MOVEM = "MOVEM"; public static final String MOVEP = "MOVEP"; public static final String MOVEQ = "MOVEQ"; public static final String MULS = "MULS"; public static final String MULU = "MULU"; public static final String NBCD = "NBCD"; public static final String NEG = "NEG"; public static final String NEGX = "NEGX"; public static final String NOP = "NOP"; public static final String NOT = "NOT"; public static final String OR = "OR"; public static final String ORI = "ORI"; public static final String PEA = "PEA"; public static final String RESET = "RESET"; public static final String ROL = "ROL"; public static final String ROR = "ROR"; public static final String ROXL = "ROXL"; public static final String ROXR = "ROXR"; public static final String RTD = "RTD"; public static final String RTE = "RTE"; public static final String RTM = "RTM"; public static final String RTR = "RTR"; public static final String RTS = "RTS"; public static final String SBCD = "SBCD"; public static final String SCC = "SCC"; public static final String SCS = "SCS"; public static final String SEQ = "SEQ"; public static final String SF = "SF"; public static final String SGE = "SGE"; public static final String SGT = "SGT"; public static final String SHI = "SHI"; public static final String SHS = "SHS"; public static final String SLE = "SLE"; public static final String SLO = "SLO"; public static final String SLS = "SLS"; public static final String SLT = "SLT"; public static final String SMI = "SMI"; public static final String SNE = "SNE"; public static final String SPL = "SPL"; public static final String ST = "ST"; public static final String STOP = "STOP"; public static final String SUB = "SUB"; public static final String SUBA = "SUBA"; public static final String SUBI = "SUBI"; public static final String SUBQ = "SUBQ"; public static final String SUBX = "SUBX"; public static final String SVC = "SVC"; public static final String SVS = "SVS"; public static final String SWAP = "SWAP"; public static final String TAS = "TAS"; public static final String TRAP = "TRAP"; public static final String TRAPV = "TRAPV"; public static final String TST = "TST"; public static final String UNLK = "UNLK"; public static final String ALIGN = "ALIGN"; public static final String BINCLUDE = "BINCLUDE"; public static final String CNOP = "CNOP"; public static final String DC = "DC"; public static final String DCB = "DCB"; public static final String DEPHASE = "DEPHASE"; public static final String DO = "DO"; public static final String DS = "DS"; public static final String ELSE = "ELSE"; public static final String ELSEIF = "ELSEIF"; public static final String ENCODING = "ENCODING"; public static final String END = "END"; public static final String ENDC = "ENDC"; public static final String ENDIF = "ENDIF"; public static final String ENDM = "ENDM"; public static final String ENDNS = "ENDNS"; public static final String ENDR = "ENDR"; public static final String ENDTRANSFORM = "ENDTRANSFORM"; public static final String ENDW = "ENDW"; public static final String EQU = "EQU"; /** The string <code>"="</code>. */ public static final String EQUALS = "="; public static final String EQUR = "EQUR"; public static final String EVEN = "EVEN"; public static final String FOR = "FOR"; public static final String FUNCTION = "FUNCTION"; public static final String HEX = "HEX"; public static final String IF = "IF"; public static final String INCBIN = "INCBIN"; public static final String INCLUDE = "INCLUDE"; public static final String MACRO = "MACRO"; public static final String NAMESPACE = "NAMESPACE"; public static final String NEXT = "NEXT"; public static final String OBJ = "OBJ"; public static final String OBJEND = "OBJEND"; public static final String ORG = "ORG"; public static final String PHASE = "PHASE"; public static final String REG = "REG"; public static final String REPT = "REPT"; public static final String RS = "RS"; public static final String RSRESET = "RSRESET"; public static final String RSSET = "RSSET"; public static final String SET = "SET"; public static final String TRANSFORM = "TRANSFORM"; public static final String UNTIL = "UNTIL"; public static final String WHILE = "WHILE"; @Nonnull static final MnemonicMap MAP; @Nonnull static final SymbolResolutionFallback SYMBOL_RESOLUTION_FALLBACK; static { final MnemonicMap map = new MnemonicMap(); // Put the instructions in the dispatch map. map.put(ABCD, AddSubWithExtendInstruction.ABCD); map.put(ADD, AddSubInstruction.ADD); map.put(ADDA, AddaCmpaSubaInstruction.ADDA); map.put(ADDI, AddiCmpiSubiInstruction.ADDI); map.put(ADDQ, AddqSubqInstruction.ADDQ); map.put(ADDX, AddSubWithExtendInstruction.ADDX); map.put(AND, AndOrInstruction.AND); map.put(ANDI, AndiEoriOriInstruction.ANDI); map.put(ASL, ShiftRotateInstruction.ASL); map.put(ASR, ShiftRotateInstruction.ASR); map.put(BCC, BranchInstruction.BCC); map.put(BCHG, BitManipulationInstruction.BCHG); map.put(BCLR, BitManipulationInstruction.BCLR); map.put(BCS, BranchInstruction.BCS); map.put(BEQ, BranchInstruction.BEQ); map.put(BGE, BranchInstruction.BGE); map.put(BGND, SimpleInstruction.BGND); map.put(BGT, BranchInstruction.BGT); map.put(BHI, BranchInstruction.BHI); map.put(BHS, BranchInstruction.BHS); map.put(BKPT, OneEaInstruction.BKPT); map.put(BLE, BranchInstruction.BLE); map.put(BLO, BranchInstruction.BLO); map.put(BLS, BranchInstruction.BLS); map.put(BLT, BranchInstruction.BLT); map.put(BMI, BranchInstruction.BMI); map.put(BNE, BranchInstruction.BNE); map.put(BPL, BranchInstruction.BPL); map.put(BRA, BranchInstruction.BRA); map.put(BSET, BitManipulationInstruction.BSET); map.put(BSR, BranchInstruction.BSR); map.put(BTST, BitManipulationInstruction.BTST); map.put(BVC, BranchInstruction.BVC); map.put(BVS, BranchInstruction.BVS); map.put(CHK, ChkInstruction.CHK); map.put(CLR, OneEaInstruction.CLR); map.put(CMP, CmpInstruction.CMP); map.put(CMPA, AddaCmpaSubaInstruction.CMPA); map.put(CMPI, AddiCmpiSubiInstruction.CMPI); map.put(CMPM, CmpmInstruction.CMPM); map.put(DBCC, DecrementAndBranchInstruction.DBCC); map.put(DBCS, DecrementAndBranchInstruction.DBCS); map.put(DBEQ, DecrementAndBranchInstruction.DBEQ); map.put(DBF, DecrementAndBranchInstruction.DBF); map.put(DBGE, DecrementAndBranchInstruction.DBGE); map.put(DBGT, DecrementAndBranchInstruction.DBGT); map.put(DBHI, DecrementAndBranchInstruction.DBHI); map.put(DBHS, DecrementAndBranchInstruction.DBHS); map.put(DBLE, DecrementAndBranchInstruction.DBLE); map.put(DBLO, DecrementAndBranchInstruction.DBLO); map.put(DBLS, DecrementAndBranchInstruction.DBLS); map.put(DBLT, DecrementAndBranchInstruction.DBLT); map.put(DBMI, DecrementAndBranchInstruction.DBMI); map.put(DBNE, DecrementAndBranchInstruction.DBNE); map.put(DBPL, DecrementAndBranchInstruction.DBPL); map.put(DBRA, DecrementAndBranchInstruction.DBRA); map.put(DBT, DecrementAndBranchInstruction.DBT); map.put(DBVC, DecrementAndBranchInstruction.DBVC); map.put(DBVS, DecrementAndBranchInstruction.DBVS); map.put(DIVS, MultiplyDivideInstruction.DIVS); map.put(DIVSL, MultiplyDivideInstruction.DIVSL); map.put(DIVU, MultiplyDivideInstruction.DIVU); map.put(DIVUL, MultiplyDivideInstruction.DIVUL); map.put(EOR, EorInstruction.EOR); map.put(EORI, AndiEoriOriInstruction.EORI); map.put(EXG, ExgInstruction.EXG); map.put(EXT, OneEaInstruction.EXT); map.put(EXTB, OneEaInstruction.EXTB); map.put(ILLEGAL, SimpleInstruction.ILLEGAL); map.put(JMP, OneEaInstruction.JMP); map.put(JSR, OneEaInstruction.JSR); map.put(LEA, LeaInstruction.LEA); map.put(LINK, LinkInstruction.LINK); map.put(LPSTOP, OneEaInstruction.LPSTOP); map.put(LSL, ShiftRotateInstruction.LSL); map.put(LSR, ShiftRotateInstruction.LSR); map.put(MOVE, MoveInstruction.MOVE); map.put(MOVEA, MoveaInstruction.MOVEA); map.put(MOVEM, MovemInstruction.MOVEM); map.put(MOVEP, MovepInstruction.MOVEP); map.put(MOVEQ, MoveqInstruction.MOVEQ); map.put(MULS, MultiplyDivideInstruction.MULS); map.put(MULU, MultiplyDivideInstruction.MULU); map.put(NBCD, OneEaInstruction.NBCD); map.put(NEG, OneEaInstruction.NEG); map.put(NEGX, OneEaInstruction.NEGX); map.put(NOP, SimpleInstruction.NOP); map.put(NOT, OneEaInstruction.NOT); map.put(OR, AndOrInstruction.OR); map.put(ORI, AndiEoriOriInstruction.ORI); map.put(PEA, OneEaInstruction.PEA); map.put(RESET, SimpleInstruction.RESET); map.put(ROL, ShiftRotateInstruction.ROL); map.put(ROR, ShiftRotateInstruction.ROR); map.put(ROXL, ShiftRotateInstruction.ROXL); map.put(ROXR, ShiftRotateInstruction.ROXR); map.put(RTD, OneEaInstruction.RTD); map.put(RTE, SimpleInstruction.RTE); map.put(RTM, OneEaInstruction.RTM); map.put(RTR, SimpleInstruction.RTR); map.put(RTS, SimpleInstruction.RTS); map.put(SBCD, AddSubWithExtendInstruction.SBCD); map.put(SCC, OneEaInstruction.SCC); map.put(SCS, OneEaInstruction.SCS); map.put(SEQ, OneEaInstruction.SEQ); map.put(SF, OneEaInstruction.SF); map.put(SGE, OneEaInstruction.SGE); map.put(SGT, OneEaInstruction.SGT); map.put(SHI, OneEaInstruction.SHI); map.put(SHS, OneEaInstruction.SHS); map.put(SLE, OneEaInstruction.SLE); map.put(SLO, OneEaInstruction.SLO); map.put(SLS, OneEaInstruction.SLS); map.put(SLT, OneEaInstruction.SLT); map.put(SMI, OneEaInstruction.SMI); map.put(SNE, OneEaInstruction.SNE); map.put(SPL, OneEaInstruction.SPL); map.put(ST, OneEaInstruction.ST); map.put(STOP, OneEaInstruction.STOP); map.put(SUB, AddSubInstruction.SUB); map.put(SUBA, AddaCmpaSubaInstruction.SUBA); map.put(SUBI, AddiCmpiSubiInstruction.SUBI); map.put(SUBQ, AddqSubqInstruction.SUBQ); map.put(SUBX, AddSubWithExtendInstruction.SUBX); map.put(SVC, OneEaInstruction.SVC); map.put(SVS, OneEaInstruction.SVS); map.put(SWAP, OneEaInstruction.SWAP); map.put(TAS, OneEaInstruction.TAS); map.put(TRAP, OneEaInstruction.TRAP); map.put(TRAPV, SimpleInstruction.TRAPV); map.put(TST, OneEaInstruction.TST); map.put(UNLK, OneEaInstruction.UNLK); // Put the directives in the dispatch map. map.put(ALIGN, AlignDirective.ALIGN); map.put(BINCLUDE, IncbinDirective.INCBIN); map.put(CNOP, CnopDirective.CNOP); map.put(DC, DcDirective.DC); map.put(DCB, DcbDirective.DCB); map.put(DEPHASE, ObjendDirective.DEPHASE); map.put(DO, DoDirective.DO); map.put(DS, DsRsDirective.DS); map.put(ELSEIF, IfElseifDirective.ELSEIF); map.put(ELSE, ElseDirective.ELSE); map.put(ENCODING, EncodingDirective.ENCODING); map.put(END, EndDirective.END); map.put(ENDC, EndifDirective.ENDIF); map.put(ENDIF, EndifDirective.ENDIF); map.put(ENDM, EndmDirective.ENDM); map.put(ENDNS, EndnsDirective.ENDNS); map.put(ENDR, EndrDirective.ENDR); map.put(ENDTRANSFORM, EndtransformDirective.ENDTRANSFORM); map.put(ENDW, EndwDirective.ENDW); map.put(EQU, EquSetDirective.EQU); map.put(EQUALS, EquSetDirective.EQUALS); map.put(EQUR, EqurDirective.EQUR); map.put(EVEN, EvenDirective.EVEN); map.put(FOR, ForDirective.FOR); map.put(FUNCTION, FunctionDirective.FUNCTION); map.put(HEX, HexDirective.HEX); map.put(IF, IfElseifDirective.IF); map.put(INCBIN, IncbinDirective.INCBIN); map.put(INCLUDE, IncludeDirective.INCLUDE); map.put(MACRO, MacroDirective.MACRO); map.put(NAMESPACE, NamespaceDirective.NAMESPACE); map.put(NEXT, NextDirective.NEXT); map.put(OBJ, ObjDirective.OBJ); map.put(OBJEND, ObjendDirective.OBJEND); map.put(ORG, OrgDirective.ORG); map.put(PHASE, ObjDirective.OBJ); map.put(REG, RegDirective.REG); map.put(REPT, ReptDirective.REPT); map.put(RS, DsRsDirective.RS); map.put(RSRESET, RsresetRssetDirective.RSRESET); map.put(RSSET, RsresetRssetDirective.RSSET); map.put(SET, EquSetDirective.SET); map.put(TRANSFORM, TransformDirective.TRANSFORM); map.put(UNTIL, UntilDirective.UNTIL); map.put(WHILE, WhileDirective.WHILE); MAP = map; SYMBOL_RESOLUTION_FALLBACK = new SymbolResolutionFallback() { @Override public Symbol resolve(SymbolReference symbolReference) { return MAP.get(symbolReference.getName()); } }; } // This class is not meant to be instantiated. private Mnemonics() { } }