68kcounter
Version:
68000 ASM source code cycle counter
63 lines (62 loc) • 1.78 kB
JavaScript
;
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,
];