UNPKG

68kcounter

Version:
63 lines (62 loc) 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const syntax_1 = require("../syntax"); /** * Gets the size qualifier of an instruction, applying defaults where not specified */ function instructionQualifier({ opcode: { op, qualifier }, operands, }) { if (qualifier) { return qualifier.name; } else if (longDefault.includes(op.name)) { return syntax_1.Qualifiers.L; } else if (byteDefault.includes(op.name)) { return syntax_1.Qualifiers.B; } else if (bitOps.includes(op.name)) { return operands[1] && operands[1].mode === syntax_1.AddressingModes.Dn ? syntax_1.Qualifiers.L : syntax_1.Qualifiers.B; } else if (unsized.includes(op.name)) { return null; } return syntax_1.Qualifiers.W; } exports.default = instructionQualifier; // Default to word size for instructions apart from these exceptions: const unsized = [ syntax_1.Mnemonics.JMP, syntax_1.Mnemonics.JSR, syntax_1.Mnemonics.NOP, syntax_1.Mnemonics.RESET, syntax_1.Mnemonics.RTE, syntax_1.Mnemonics.RTR, syntax_1.Mnemonics.RTS, syntax_1.Mnemonics.STOP, syntax_1.Mnemonics.TRAP, syntax_1.Mnemonics.TRAPV, syntax_1.Mnemonics.UNLK, syntax_1.Mnemonics.ILLEGAL, ]; const longDefault = [ syntax_1.Mnemonics.MOVEQ, syntax_1.Mnemonics.EXG, syntax_1.Mnemonics.LEA, syntax_1.Mnemonics.PEA, ]; const byteDefault = [ syntax_1.Mnemonics.NBCD, syntax_1.Mnemonics.ABCD, syntax_1.Mnemonics.SBCD, syntax_1.Mnemonics.SCC, syntax_1.Mnemonics.TAS, ...syntax_1.mnemonicGroups.SCC, ]; const bitOps = [ syntax_1.Mnemonics.BCHG, syntax_1.Mnemonics.BSET, syntax_1.Mnemonics.BCLR, syntax_1.Mnemonics.BTST, ];