Skip to content

Commit de53581

Browse files
committed
Refactor Table to separate assembler and disassembler
1 parent 1d6b050 commit de53581

File tree

104 files changed

+1066
-1182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+1066
-1182
lines changed

src/asm_cdp1802.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_cdp1802.h"
18-
1918
#include "reg_cdp1802.h"
2019
#include "table_cdp1802.h"
2120
#include "text_common.h"
@@ -195,8 +194,8 @@ Error AsmCdp1802::encodeImpl(StrScanner &scan, Insn &_insn) const {
195194
scan.skipSpaces();
196195
}
197196

198-
if (_insn.setErrorIf(insn.op1, TABLE.searchName(cpuType(), insn)))
199-
return _insn.getError();
197+
if (searchName(cpuType(), insn))
198+
return _insn.setError(insn.op1, insn);
200199

201200
emitOperand(insn, insn.mode1(), insn.op1);
202201
if (insn.mode2() == M_ADDR) {

src/asm_f3850.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_f3850.h"
18-
1918
#include "reg_f3850.h"
2019
#include "table_f3850.h"
2120
#include "text_common.h"
@@ -163,7 +162,7 @@ void AsmF3850::encodeOperand(AsmInsn &insn, const Operand &op, AddrMode mode) co
163162

164163
Error AsmF3850::encodeImpl(StrScanner &scan, Insn &_insn) const {
165164
AsmInsn insn(_insn);
166-
if (TABLE.hasOperand(cpuType(), insn)) {
165+
if (hasOperand(cpuType(), insn)) {
167166
if (parseOperand(scan, insn.op1) && insn.op1.hasError())
168167
return _insn.setError(insn.op1);
169168
if (scan.skipSpaces().expect(',')) {
@@ -173,8 +172,8 @@ Error AsmF3850::encodeImpl(StrScanner &scan, Insn &_insn) const {
173172
}
174173
scan.skipSpaces();
175174

176-
if (_insn.setErrorIf(insn.op1, TABLE.searchName(cpuType(), insn)))
177-
return _insn.getError();
175+
if (searchName(cpuType(), insn))
176+
return _insn.setError(insn.op1, insn);
178177

179178
encodeOperand(insn, insn.op1, insn.mode1());
180179
encodeOperand(insn, insn.op2, insn.mode2());

src/asm_i8048.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_i8048.h"
18-
1918
#include "table_i8048.h"
2019
#include "text_common.h"
2120

@@ -241,8 +240,8 @@ Error AsmI8048::encodeImpl(StrScanner &scan, Insn &_insn) const {
241240
scan.skipSpaces();
242241
}
243242

244-
if (_insn.setErrorIf(insn.dstOp, TABLE.searchName(cpuType(), insn)))
245-
return _insn.getError();
243+
if (searchName(cpuType(), insn))
244+
return _insn.setError(insn.dstOp, insn);
246245

247246
encodeOperand(insn, insn.dst(), insn.dstOp);
248247
encodeOperand(insn, insn.src(), insn.srcOp);

src/asm_i8051.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_i8051.h"
18-
1918
#include "table_i8051.h"
2019
#include "text_common.h"
2120

@@ -245,7 +244,7 @@ void AsmI8051::encodeOperand(AsmInsn &insn, AddrMode mode, const Operand &op) co
245244
case M_NOTAD:
246245
if (op.val.overflow(UINT8_MAX))
247246
insn.setErrorIf(op, mode == M_ADR8 ? OVERFLOW_RANGE : NOT_BIT_ADDRESSABLE);
248-
if (TABLE.invalidDirect(insn.opCode(), op.val.getUnsigned()))
247+
if (invalidDirect(insn.opCode(), op.val.getUnsigned()))
249248
insn.setErrorIf(op, OPERAND_NOT_ALLOWED);
250249
insn.emitOperand8(op.val.getUnsigned());
251250
break;
@@ -269,8 +268,8 @@ Error AsmI8051::encodeImpl(StrScanner &scan, Insn &_insn) const {
269268
scan.skipSpaces();
270269
}
271270

272-
if (_insn.setErrorIf(insn.dstOp, TABLE.searchName(cpuType(), insn)))
273-
return _insn.getError();
271+
if (searchName(cpuType(), insn))
272+
return _insn.setError(insn.dstOp, insn);
274273

275274
const auto dst = insn.dst();
276275
const auto src = insn.src();

src/asm_i8080.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ Error AsmI8080::encodeImpl(StrScanner &scan, Insn &_insn) const {
265265
scan.skipSpaces();
266266
}
267267

268-
if (_insn.setErrorIf(insn.dstOp, TABLE.searchName(cpuType(), insn, _zilogSyntax)))
269-
return _insn.getError();
268+
if (searchName(cpuType(), insn, _zilogSyntax))
269+
return _insn.setError(insn.dstOp, insn);
270270

271271
encodeOperand(insn, insn.dstOp, insn.dst());
272272
encodeOperand(insn, insn.srcOp, insn.src());

src/asm_i8086.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ Error AsmI8086::parseStringInst(StrScanner &scan, Operand &op) const {
107107
Insn _insn(0);
108108
AsmInsn insn(_insn);
109109
insn.nameBuffer().text(opr);
110-
if (TABLE.searchName(_cpuSpec, insn))
110+
if (searchName(_cpuSpec, insn))
111111
return UNKNOWN_INSTRUCTION;
112112
if (!insn.stringInst())
113113
return UNKNOWN_INSTRUCTION;
@@ -435,7 +435,7 @@ uint8_t Operand::encodeR_m() const {
435435
Config::opcode_t AsmI8086::encodeSegmentOverride(RegName seg, RegName base) const {
436436
if (seg == REG_UNDEF)
437437
return 0;
438-
const Config::opcode_t segPrefix = TABLE.segOverridePrefix(seg);
438+
const Config::opcode_t segPrefix = segOverridePrefix(seg);
439439
if (_optimizeSegment) {
440440
if (base == REG_BP || base == REG_SP)
441441
return seg == REG_SS ? 0 : segPrefix;
@@ -587,7 +587,7 @@ void AsmI8086::emitStringOperand(
587587
if (seg == REG_ES && op.seg != REG_ES)
588588
insn.setErrorIf(op, ILLEGAL_SEGMENT);
589589
if (seg == REG_DS && op.seg != REG_UNDEF && op.seg != REG_DS)
590-
insn.setSegment(TABLE.segOverridePrefix(op.seg));
590+
insn.setSegment(segOverridePrefix(op.seg));
591591
}
592592

593593
void AsmI8086::emitStringInst(AsmInsn &insn, const Operand &dst, const Operand &src) const {
@@ -759,8 +759,8 @@ Error AsmI8086::encodeImpl(StrScanner &scan, Insn &_insn) const {
759759
scan.skipSpaces();
760760
}
761761

762-
if (_insn.setErrorIf(insn.dstOp, TABLE.searchName(_cpuSpec, insn)))
763-
return _insn.getError();
762+
if (searchName(_cpuSpec, insn))
763+
return _insn.setError(insn.dstOp, insn);
764764
insn.prepairModReg();
765765

766766
if (insn.stringInst()) {

src/asm_i8096.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_i8096.h"
18-
1918
#include "reg_i8096.h"
2019
#include "table_i8096.h"
2120
#include "text_common.h"
@@ -270,8 +269,8 @@ Error AsmI8096::encodeImpl(StrScanner &scan, Insn &_insn) const {
270269
scan.skipSpaces();
271270
}
272271

273-
if (_insn.setErrorIf(insn.dstOp, TABLE.searchName(cpuType(), insn)))
274-
return _insn.getError();
272+
if (searchName(cpuType(), insn))
273+
return _insn.setError(insn.dstOp, insn);
275274

276275
const auto jbx_djnz = insn.src2() == M_REL8 || insn.src1() == M_REL8;
277276
if (!jbx_djnz) {

src/asm_ins8060.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_ins8060.h"
18-
1918
#include "table_ins8060.h"
2019
#include "text_common.h"
2120

@@ -179,8 +178,8 @@ Error AsmIns8060::encodeImpl(StrScanner &scan, Insn &_insn) const {
179178
return _insn.setError(insn.op);
180179
scan.skipSpaces();
181180

182-
if (_insn.setErrorIf(insn.op, TABLE.searchName(cpuType(), insn)))
183-
return _insn.getError();
181+
if (searchName(cpuType(), insn))
182+
return _insn.setError(insn.op, insn);
184183

185184
insn.setErrorIf(insn.op);
186185
switch (insn.addrMode()) {

src/asm_ins8070.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_ins8070.h"
18-
1918
#include "table_ins8070.h"
2019
#include "text_common.h"
2120

@@ -248,8 +247,8 @@ Error AsmIns8070::encodeImpl(StrScanner &scan, Insn &_insn) const {
248247
scan.skipSpaces();
249248
}
250249

251-
if (_insn.setErrorIf(insn.dstOp, TABLE.searchName(cpuType(), insn)))
252-
return _insn.getError();
250+
if (searchName(cpuType(), insn))
251+
return _insn.setError(insn.dstOp, insn);
253252

254253
emitOperand(insn, insn.dst(), insn.dstOp);
255254
emitOperand(insn, insn.src(), insn.srcOp);

src/asm_mc6800.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_mc6800.h"
18-
1918
#include "reg_mc6800.h"
2019
#include "table_mc6800.h"
2120
#include "text_common.h"
@@ -186,7 +185,7 @@ void AsmMc6800::emitOperand(AsmInsn &insn, AddrMode mode, const Operand &op) con
186185

187186
Error AsmMc6800::encodeImpl(StrScanner &scan, Insn &_insn) const {
188187
AsmInsn insn(_insn);
189-
if (TABLE.hasOperand(cpuType(), insn)) {
188+
if (hasOperand(cpuType(), insn)) {
190189
if (parseOperand(scan, insn.op1) && insn.op1.hasError())
191190
return _insn.setError(insn.op1);
192191
if (scan.skipSpaces().expect(',')) {
@@ -200,8 +199,8 @@ Error AsmMc6800::encodeImpl(StrScanner &scan, Insn &_insn) const {
200199
}
201200
scan.skipSpaces();
202201

203-
if (_insn.setErrorIf(insn.op1, TABLE.searchName(cpuType(), insn)))
204-
return _insn.getError();
202+
if (searchName(cpuType(), insn))
203+
return _insn.setError(insn.op1, insn);
205204

206205
emitOperand(insn, insn.mode1(), insn.op1);
207206
emitOperand(insn, insn.mode2(), insn.op2);

src/asm_mc68000.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -972,7 +972,7 @@ Error AsmMc68000::encodeImpl(StrScanner &scan, Insn &_insn) const {
972972
if (isize == ISZ_ERROR)
973973
return _insn.setError(scan, ILLEGAL_SIZE);
974974

975-
if (TABLE.hasOperand(_cpuSpec, insn)) {
975+
if (hasOperand(_cpuSpec, insn)) {
976976
if (parseOperand(scan, insn.srcOp) && insn.srcOp.hasError())
977977
return _insn.setError(insn.srcOp);
978978
if (scan.skipSpaces().expect(',')) {
@@ -986,8 +986,8 @@ Error AsmMc68000::encodeImpl(StrScanner &scan, Insn &_insn) const {
986986
}
987987
scan.skipSpaces();
988988

989-
if (_insn.setErrorIf(insn.srcOp, TABLE.searchName(_cpuSpec, insn)))
990-
return _insn.getError();
989+
if (searchName(_cpuSpec, insn))
990+
return _insn.setError(insn.srcOp, insn);
991991

992992
insn.setErrorIf(insn.srcOp);
993993
insn.setErrorIf(insn.dstOp);

src/asm_mc6805.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ void AsmMc6805::emitOperand(AsmInsn &insn, AddrMode mode, const Operand &op) con
259259

260260
Error AsmMc6805::encodeImpl(StrScanner &scan, Insn &_insn) const {
261261
AsmInsn insn(_insn);
262-
if (TABLE.hasOperand(cpuType(), insn)) {
262+
if (hasOperand(cpuType(), insn)) {
263263
if (parseOperand(scan, insn.op1) && insn.op1.hasError())
264264
return _insn.setError(insn.op1);
265265
if (scan.skipSpaces().expect(',')) {
@@ -273,8 +273,8 @@ Error AsmMc6805::encodeImpl(StrScanner &scan, Insn &_insn) const {
273273
}
274274
scan.skipSpaces();
275275

276-
if (_insn.setErrorIf(insn.op1, TABLE.searchName(cpuType(), insn)))
277-
return _insn.getError();
276+
if (searchName(cpuType(), insn))
277+
return _insn.setError(insn.op1, insn);
278278

279279
if (insn.mode1() == M_BNO)
280280
insn.embed((insn.op1.val.getUnsigned() & 7) << 1);

src/asm_mc6809.cpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_mc6809.h"
18-
1918
#include "table_mc6809.h"
2019
#include "text_common.h"
2120

@@ -182,10 +181,9 @@ void AsmMc6809::encodeIndexed(AsmInsn &insn, const Operand &op) const {
182181
}
183182
spec.size = size;
184183
}
185-
const auto postSpec = TABLE.searchPostSpec(cpuType(), spec);
186-
if (postSpec < 0)
184+
if (searchPostSpec(cpuType(), spec))
187185
insn.setErrorIf(op, UNKNOWN_OPERAND);
188-
uint8_t post = postSpec;
186+
uint8_t post = spec.post;
189187
const auto size = spec.size;
190188
if (size == 5)
191189
post |= disp & 0x1F;
@@ -587,7 +585,7 @@ Error AsmMc6809::processPseudo(StrScanner &scan, Insn &insn) {
587585

588586
Error AsmMc6809::encodeImpl(StrScanner &scan, Insn &_insn) const {
589587
AsmInsn insn(_insn);
590-
auto error = TABLE.hasName(cpuType(), insn);
588+
auto error = hasName(cpuType(), insn);
591589
if (error)
592590
return _insn.setError(error);
593591

@@ -601,8 +599,8 @@ Error AsmMc6809::encodeImpl(StrScanner &scan, Insn &_insn) const {
601599
}
602600
scan.skipSpaces();
603601

604-
if (_insn.setErrorIf(insn.op1, TABLE.searchName(cpuType(), insn)))
605-
return _insn.getError();
602+
if (searchName(cpuType(), insn))
603+
return _insn.setError(insn.op1, insn);
606604

607605
const auto mode1 = insn.mode1();
608606
if (mode1 == M_RTFM) {

src/asm_mn1610.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ Error AsmMn1610::processPseudo(StrScanner &scan, Insn &_insn) {
402402

403403
Error AsmMn1610::encodeImpl(StrScanner &scan, Insn &_insn) const {
404404
AsmInsn insn(_insn);
405-
if (TABLE.hasOperand(cpuType(), insn)) {
405+
if (hasOperand(cpuType(), insn)) {
406406
if (parseOperand(scan, insn.op1) && insn.op1.hasError())
407407
return _insn.setError(insn.op1);
408408
if (scan.skipSpaces().expect(',')) {
@@ -420,8 +420,8 @@ Error AsmMn1610::encodeImpl(StrScanner &scan, Insn &_insn) const {
420420
}
421421
scan.skipSpaces();
422422

423-
if (_insn.setErrorIf(insn.op1, TABLE.searchName(cpuType(), insn)))
424-
return _insn.getError();
423+
if (searchName(cpuType(), insn))
424+
return _insn.setError(insn.op1, insn);
425425

426426
encodeOperand(insn, insn.op1, insn.mode1());
427427
encodeOperand(insn, insn.op2, insn.mode2());

src/asm_mos6502.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616

1717
#include "asm_mos6502.h"
18-
1918
#include "reg_mos6502.h"
2019
#include "table_mos6502.h"
2120
#include "text_mos6502.h"
@@ -346,7 +345,7 @@ bool maybeStackRelativeIndirect(CpuType cpuType, AddrMode mode3) {
346345
Error AsmMos6502::encodeImpl(StrScanner &scan, Insn &_insn) const {
347346
AsmInsn insn(_insn);
348347
char indirect = 0;
349-
if (TABLE.hasOperand(cpuType(), insn)) {
348+
if (hasOperand(cpuType(), insn)) {
350349
if (parseOperand(scan, insn.op1, indirect) && insn.op1.hasError())
351350
return _insn.setError(insn.op1);
352351
if (scan.skipSpaces().expect(',')) {
@@ -363,7 +362,7 @@ Error AsmMos6502::encodeImpl(StrScanner &scan, Insn &_insn) const {
363362
}
364363
scan.skipSpaces();
365364

366-
const auto error = TABLE.searchName(cpuType(), insn);
365+
const auto error = searchName(cpuType(), insn);
367366
if (error == OPERAND_NOT_ALLOWED) {
368367
if (hasRegister(insn.op1.mode))
369368
return _insn.setError(insn.op1, REGISTER_NOT_ALLOWED);

src/asm_ns32000.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -727,8 +727,8 @@ Error AsmNs32000::encodeImpl(StrScanner &scan, Insn &_insn) const {
727727
scan.skipSpaces();
728728
}
729729

730-
if (_insn.setErrorIf(insn.srcOp, TABLE.searchName(_cpuSpec, insn)))
731-
return _insn.getError();
730+
if (searchName(_cpuSpec, insn))
731+
return _insn.setError(insn.srcOp, insn);
732732

733733
insn.setErrorIf(insn.srcOp);
734734
insn.setErrorIf(insn.dstOp);

src/asm_pdp11.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ Error AsmPdp11::processPseudo(StrScanner &scan, Insn &_insn) {
510510

511511
Error AsmPdp11::encodeImpl(StrScanner &scan, Insn &_insn) const {
512512
AsmInsn insn(_insn);
513-
const auto error = TABLE.hasName(cpuType(), insn);
513+
const auto error = hasName(cpuType(), insn);
514514
if (_implicitWord && error != OK) {
515515
StrScanner p = _insn.errorAt();
516516
insn.setOK(); // clear UNKNOWN_INSTRUCTION
@@ -531,8 +531,8 @@ Error AsmPdp11::encodeImpl(StrScanner &scan, Insn &_insn) const {
531531
scan.skipSpaces();
532532
}
533533

534-
if (_insn.setErrorIf(insn.srcOp, TABLE.searchName(cpuType(), insn)))
535-
return _insn.getError();
534+
if (searchName(cpuType(), insn))
535+
return _insn.setError(insn.srcOp, insn);
536536
insn.setErrorIf(insn.srcOp);
537537
insn.setErrorIf(insn.dstOp);
538538
encodeOperand(insn, insn.srcOp, insn.src(), insn.srcPos());

0 commit comments

Comments
 (0)