pre-calculate mnemonic hashes.

This commit is contained in:
Kelvin Sherlock 2019-05-05 16:59:24 -04:00
parent 379784c757
commit 391681fb96
2 changed files with 98 additions and 98 deletions

View File

@ -56,7 +56,7 @@ enum {
enum {
MNEMONIC_NONE,
#define x(a) a,
#define x(a, b) a,
#include "mnemonics.x"
#undef x
MNEMONIC_LAST
@ -69,7 +69,6 @@ enum {
LONG_SHORT,
};
#define CC3(a) ((a[0] << 16) | (a[1] << 8) | a[2])
struct mnemonic_entry {
const char *name;
int value;
@ -77,7 +76,7 @@ struct mnemonic_entry {
};
struct mnemonic_entry mnemonic_table[] = {
{ NULL, 0 },
#define x(a) { #a, CC3(#a), a },
#define x(a, b) { #a, b, a },
#include "mnemonics.x"
#undef x
};
@ -536,7 +535,8 @@ static int mnemonic_cmp(const void *a, const void *b) {
return key - e->value;
}
#define kBLT 0x424c54
#define kBGE 0x424745
static const char *parse_opcode(const char *cp, struct cookie *cookie) {
const char *YYCURSOR = cp;
@ -592,8 +592,8 @@ static const char *parse_opcode(const char *cp, struct cookie *cookie) {
sizeof(mnemonic_table) / sizeof(mnemonic_table[0]),
sizeof(mnemonic_table[0]), mnemonic_cmp);
if (e == NULL) {
if (tmp == CC3("BLT")) e = &mnemonic_table[BCC];
if (tmp == CC3("BGE")) e = &mnemonic_table[BCS];
if (tmp == kBLT) e = &mnemonic_table[BCC];
if (tmp == kBGE) e = &mnemonic_table[BCS];
}
if (!e) return NULL;
cookie->mnemonic = e->mnemonic;

View File

@ -1,92 +1,92 @@
x(ADC)
x(AND)
x(ASL)
x(BCC)
x(BCS)
x(BEQ)
x(BIT)
x(BMI)
x(BNE)
x(BPL)
x(BRA)
x(BRK)
x(BRL)
x(BVC)
x(BVS)
x(CLC)
x(CLD)
x(CLI)
x(CLV)
x(CMP)
x(COP)
x(CPX)
x(CPY)
x(DEC)
x(DEX)
x(DEY)
x(EOR)
x(INC)
x(INX)
x(INY)
x(JML)
x(JMP)
x(JSL)
x(JSR)
x(LDA)
x(LDX)
x(LDY)
x(LSR)
x(MVN)
x(MVP)
x(NOP)
x(ORA)
x(PEA)
x(PEI)
x(PER)
x(PHA)
x(PHB)
x(PHD)
x(PHK)
x(PHP)
x(PHX)
x(PHY)
x(PLA)
x(PLB)
x(PLD)
x(PLP)
x(PLX)
x(PLY)
x(REP)
x(ROL)
x(ROR)
x(RTI)
x(RTL)
x(RTS)
x(SBC)
x(SEC)
x(SED)
x(SEI)
x(SEP)
x(STA)
x(STP)
x(STX)
x(STY)
x(STZ)
x(TAX)
x(TAY)
x(TCD)
x(TCS)
x(TDC)
x(TRB)
x(TSB)
x(TSC)
x(TSX)
x(TXA)
x(TXS)
x(TXY)
x(TYA)
x(TYX)
x(WAI)
x(WDM)
x(XBA)
x(XCE)
x(ADC, 0x414443)
x(AND, 0x414e44)
x(ASL, 0x41534c)
x(BCC, 0x424343)
x(BCS, 0x424353)
x(BEQ, 0x424551)
x(BIT, 0x424954)
x(BMI, 0x424d49)
x(BNE, 0x424e45)
x(BPL, 0x42504c)
x(BRA, 0x425241)
x(BRK, 0x42524b)
x(BRL, 0x42524c)
x(BVC, 0x425643)
x(BVS, 0x425653)
x(CLC, 0x434c43)
x(CLD, 0x434c44)
x(CLI, 0x434c49)
x(CLV, 0x434c56)
x(CMP, 0x434d50)
x(COP, 0x434f50)
x(CPX, 0x435058)
x(CPY, 0x435059)
x(DEC, 0x444543)
x(DEX, 0x444558)
x(DEY, 0x444559)
x(EOR, 0x454f52)
x(INC, 0x494e43)
x(INX, 0x494e58)
x(INY, 0x494e59)
x(JML, 0x4a4d4c)
x(JMP, 0x4a4d50)
x(JSL, 0x4a534c)
x(JSR, 0x4a5352)
x(LDA, 0x4c4441)
x(LDX, 0x4c4458)
x(LDY, 0x4c4459)
x(LSR, 0x4c5352)
x(MVN, 0x4d564e)
x(MVP, 0x4d5650)
x(NOP, 0x4e4f50)
x(ORA, 0x4f5241)
x(PEA, 0x504541)
x(PEI, 0x504549)
x(PER, 0x504552)
x(PHA, 0x504841)
x(PHB, 0x504842)
x(PHD, 0x504844)
x(PHK, 0x50484b)
x(PHP, 0x504850)
x(PHX, 0x504858)
x(PHY, 0x504859)
x(PLA, 0x504c41)
x(PLB, 0x504c42)
x(PLD, 0x504c44)
x(PLP, 0x504c50)
x(PLX, 0x504c58)
x(PLY, 0x504c59)
x(REP, 0x524550)
x(ROL, 0x524f4c)
x(ROR, 0x524f52)
x(RTI, 0x525449)
x(RTL, 0x52544c)
x(RTS, 0x525453)
x(SBC, 0x534243)
x(SEC, 0x534543)
x(SED, 0x534544)
x(SEI, 0x534549)
x(SEP, 0x534550)
x(STA, 0x535441)
x(STP, 0x535450)
x(STX, 0x535458)
x(STY, 0x535459)
x(STZ, 0x53545a)
x(TAX, 0x544158)
x(TAY, 0x544159)
x(TCD, 0x544344)
x(TCS, 0x544353)
x(TDC, 0x544443)
x(TRB, 0x545242)
x(TSB, 0x545342)
x(TSC, 0x545343)
x(TSX, 0x545358)
x(TXA, 0x545841)
x(TXS, 0x545853)
x(TXY, 0x545859)
x(TYA, 0x545941)
x(TYX, 0x545958)
x(WAI, 0x574149)
x(WDM, 0x57444d)
x(XBA, 0x584241)
x(XCE, 0x584345)