From a14401b261d8f38f30676f993acbc1def7482c22 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Wed, 2 Feb 2022 15:14:31 -0400 Subject: sux.c, sux.h: Add code for using the new instruction handler. --- sux.h | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'sux.h') diff --git a/sux.h b/sux.h index aa579fd..079750c 100644 --- a/sux.h +++ b/sux.h @@ -1,3 +1,5 @@ +#ifndef SUX_H +#define SUX_H #include "opcode.h" #include #include @@ -1891,6 +1893,72 @@ static /*inline*/ void inst_##op(struct sux *cpu, uint8_t prefix, uint8_t size, t(0, 0x07660376, 0x03660376, 0x16361776, 0x06761776, 0x16760576, 0x04760576, 0x04760576, 0x04760576) { setflag(tmp >> (msb-1), N); } /* Update negative flag. */ \ } +typedef void (inst_func)(struct sux *cpu, uint8_t prefix, uint8_t size, int inc_pc, int inc_clk, uint8_t thread); + +#define inst_func(op) inst_##op + +#define INST \ + o(00) o(01) o(02) o(03) o(04) o(05) o(06) o(07) \ + o(08) o(09) o(0A) o(0B) o(0C) o(0D) o(0E) o(0F) \ + o(10) o(11) o(12) o(13) o(14) o(15) o(16) o(17) \ + o(18) o(19) o(1A) o(1B) o(1C) o(1D) o(1E) o(1F) \ + o(20) o(21) o(22) o(23) o(24) o(25) o(26) o(27) \ + o(28) o(29) o(2A) o(2B) o(2C) o(2D) o(2E) o(2F) \ + o(30) o(31) o(32) o(33) o(34) o(35) o(36) o(37) \ + o(38) o(39) o(3A) o(3B) o(3C) o(3D) o(3E) o(3F) \ + o(40) o(41) o(42) o(43) o(44) o(45) o(46) o(47) \ + o(48) o(49) o(4A) o(4B) o(4C) o(4D) o(4E) o(4F) \ + o(50) o(51) o(52) o(53) o(54) o(55) o(56) o(57) \ + o(58) o(59) o(5A) o(5B) o(5C) o(5D) o(5E) o(5F) \ + o(60) o(61) o(62) o(63) o(64) o(65) o(66) o(67) \ + o(68) o(69) o(6A) o(6B) o(6C) o(6D) o(6E) o(6F) \ + o(70) o(71) o(72) o(73) o(74) o(75) o(76) o(77) \ + o(78) o(79) o(7A) o(7B) o(7C) o(7D) o(7E) o(7F) \ + o(80) o(81) o(82) o(83) o(84) o(85) o(86) o(87) \ + o(88) o(89) o(8A) o(8B) o(8C) o(8D) o(8E) o(8F) \ + o(90) o(91) o(92) o(93) o(94) o(95) o(96) o(97) \ + o(98) o(99) o(9A) o(9B) o(9C) o(9D) o(9E) o(9F) \ + o(A0) o(A1) o(A2) o(A3) o(A4) o(A5) o(A6) o(A7) \ + o(A8) o(A9) o(AA) o(AB) o(AC) o(AD) o(AE) o(AF) \ + o(B0) o(B1) o(B2) o(B3) o(B4) o(B5) o(B6) o(B7) \ + o(B8) o(B9) o(BA) o(BB) o(BC) o(BD) o(BE) o(BF) \ + o(C0) o(C1) o(C2) o(C3) o(C4) o(C5) o(C6) o(C7) \ + o(C8) o(C9) o(CA) o(CB) o(CC) o(CD) o(CE) o(CF) \ + o(D0) o(D1) o(D2) o(D3) o(D4) o(D5) o(D6) o(D7) \ + o(D8) o(D9) o(DA) o(DB) o(DC) o(DD) o(DE) o(DF) \ + o(E0) o(E1) o(E2) o(E3) o(E4) o(E5) o(E6) o(E7) \ + o(E8) o(E9) o(EA) o(EB) o(EC) o(ED) o(EE) o(EF) \ + o(F0) o(F1) o(F2) o(F3) o(F4) o(F5) o(F6) o(F7) \ + o(F8) o(F9) o(FA) o(FB) o(FC) o(FD) o(FE) o(FF) \ + i(100) i(101) i(102) + +#if 1 +#define i(n) inst(n, 0) +#define o(n) inst(n, 0) +INST +#undef o +#undef i +#else +#include "inst_funcs.h" +#endif + +#if 0 +#define i(n) (/*const*/ inst_func *const)inst_func(n), +#define o(n) (/*const*/ inst_func *const)inst_func(n), +#else +#define i(n) inst_func(n), +#define o(n) inst_func(n), +#endif + +static inst_func *const i[] = { + INST +}; +#undef o +#undef i + + + #undef ORTHO_1CC #undef ORTHO_1OP #undef ORTHO_2OP +#endif -- cgit v1.2.3-13-gbd6f