Mercurial > hg-old > index.cgi
comparison lwasm/instab.c @ 346:a82c55070624
Added expression parsing infrastructure and misc fixes
author | lost@starbug |
---|---|
date | Sat, 27 Mar 2010 19:04:03 -0600 |
parents | 7416c3f9c321 |
children | 1649bc7bda5a |
comparison
equal
deleted
inserted
replaced
345:7416c3f9c321 | 346:a82c55070624 |
---|---|
24 | 24 |
25 #include <stdlib.h> | 25 #include <stdlib.h> |
26 #define __instab_c_seen__ | 26 #define __instab_c_seen__ |
27 #include "instab.h" | 27 #include "instab.h" |
28 | 28 |
29 // don't need to parse anything for inh | 29 // inherent |
30 // so it can just be NULL | 30 extern PARSEFUNC(insn_parse_inh); |
31 #define insn_parse_inh NULL | |
32 | |
33 extern RESOLVEFUNC(insn_resolve_inh); | 31 extern RESOLVEFUNC(insn_resolve_inh); |
32 | |
33 // MACRO pseudo op | |
34 extern PARSEFUNC(pseudo_parse_macro); | |
35 #define pseudo_resolve_macro NULL | |
36 | |
37 // ENDM pseudo op | |
38 extern PARSEFUNC(pseudo_parse_endm); | |
39 #define pseudo_resolve_endm NULL | |
40 | |
41 | |
34 extern PARSEFUNC(insn_parse_gen8); | 42 extern PARSEFUNC(insn_parse_gen8); |
35 extern RESOLVEFUNC(insn_resolve_gen8); | 43 extern RESOLVEFUNC(insn_resolve_gen8); |
36 extern PARSEFUNC(insn_parse_gen16); | 44 extern PARSEFUNC(insn_parse_gen16); |
37 extern RESOLVEFUNC(insn_resolve_gen16); | 45 extern RESOLVEFUNC(insn_resolve_gen16); |
38 extern PARSEFUNC(insn_parse_gen32); | 46 extern PARSEFUNC(insn_parse_gen32); |
114 extern RESOLVEFUNC(pseudo_resolve_ifp2); | 122 extern RESOLVEFUNC(pseudo_resolve_ifp2); |
115 extern PARSEFUNC(pseudo_parse_else); | 123 extern PARSEFUNC(pseudo_parse_else); |
116 extern RESOLVEFUNC(pseudo_resolve_else); | 124 extern RESOLVEFUNC(pseudo_resolve_else); |
117 extern PARSEFUNC(pseudo_parse_endc); | 125 extern PARSEFUNC(pseudo_parse_endc); |
118 extern RESOLVEFUNC(pseudo_resolve_endc); | 126 extern RESOLVEFUNC(pseudo_resolve_endc); |
119 extern PARSEFUNC(pseudo_parse_macro); | |
120 extern RESOLVEFUNC(pseudo_resolve_macro); | |
121 extern PARSEFUNC(pseudo_parse_endm); | |
122 extern RESOLVEFUNC(pseudo_resolve_endm); | |
123 extern PARSEFUNC(pseudo_parse_setdp); | 127 extern PARSEFUNC(pseudo_parse_setdp); |
124 extern RESOLVEFUNC(pseudo_resolve_setdp); | 128 extern RESOLVEFUNC(pseudo_resolve_setdp); |
125 extern PARSEFUNC(pseudo_parse_set); | 129 extern PARSEFUNC(pseudo_parse_set); |
126 extern RESOLVEFUNC(pseudo_resolve_set); | 130 extern RESOLVEFUNC(pseudo_resolve_set); |
127 extern PARSEFUNC(pseudo_parse_section); | 131 extern PARSEFUNC(pseudo_parse_section); |
319 | 323 |
320 { "neg", { 0x00, 0x60, 0x70, -1 }, insn_parse_gen0, insn_resolve_gen0, lwasm_insn_normal}, | 324 { "neg", { 0x00, 0x60, 0x70, -1 }, insn_parse_gen0, insn_resolve_gen0, lwasm_insn_normal}, |
321 { "nega", { 0x40, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_normal}, | 325 { "nega", { 0x40, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_normal}, |
322 { "negb", { 0x50, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_normal}, | 326 { "negb", { 0x50, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_normal}, |
323 { "negd", { 0x1040, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_is6309}, | 327 { "negd", { 0x1040, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_is6309}, |
328 */ | |
324 { "nop", { 0x12, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_normal}, | 329 { "nop", { 0x12, -1, -1, -1 }, insn_parse_inh, insn_resolve_inh, lwasm_insn_normal}, |
325 | 330 /* |
326 { "oim", { 0x01, 0x61, 0x71, -1 }, insn_parse_logicmem, insn_resolve_logicmem, lwasm_insn_is6309}, | 331 { "oim", { 0x01, 0x61, 0x71, -1 }, insn_parse_logicmem, insn_resolve_logicmem, lwasm_insn_is6309}, |
327 { "ora", { 0x9a, 0xaa, 0xba, 0x8a}, insn_parse_gen8, insn_resolve_gen8, lwasm_insn_normal}, | 332 { "ora", { 0x9a, 0xaa, 0xba, 0x8a}, insn_parse_gen8, insn_resolve_gen8, lwasm_insn_normal}, |
328 { "orb", { 0xda, 0xea, 0xfa, 0xca}, insn_parse_gen8, insn_resolve_gen8, lwasm_insn_normal}, | 333 { "orb", { 0xda, 0xea, 0xfa, 0xca}, insn_parse_gen8, insn_resolve_gen8, lwasm_insn_normal}, |
329 { "orcc", { 0x1a, -1, -1, 0x1a }, insn_parse_imm8, insn_resolve_imm8, lwasm_insn_normal}, | 334 { "orcc", { 0x1a, -1, -1, 0x1a }, insn_parse_imm8, insn_resolve_imm8, lwasm_insn_normal}, |
330 { "ord", { 0x109a, 0x10aa, 0x10ba, 0x108a},insn_parse_gen16, insn_resolve_gen16, lwasm_insn_is6309}, | 335 { "ord", { 0x109a, 0x10aa, 0x10ba, 0x108a},insn_parse_gen16, insn_resolve_gen16, lwasm_insn_is6309}, |
461 { "endc", { -1, -1, -1, -1}, pseudo_parse_endc, pseudo_resolve_endc, lwasm_insn_cond}, | 466 { "endc", { -1, -1, -1, -1}, pseudo_parse_endc, pseudo_resolve_endc, lwasm_insn_cond}, |
462 { "else", { -1, -1, -1, -1}, pseudo_parse_else, pseudo_resolve_else, lwasm_insn_cond}, | 467 { "else", { -1, -1, -1, -1}, pseudo_parse_else, pseudo_resolve_else, lwasm_insn_cond}, |
463 { "ifdef", { -1, -1, -1, -1}, pseudo_parse_ifdef, pseudo_resolve_ifdef, lwasm_insn_cond}, | 468 { "ifdef", { -1, -1, -1, -1}, pseudo_parse_ifdef, pseudo_resolve_ifdef, lwasm_insn_cond}, |
464 { "ifndef", { -1, -1, -1, -1}, pseudo_parse_ifndef, pseudo_resolve_ifndef, lwasm_insn_cond}, | 469 { "ifndef", { -1, -1, -1, -1}, pseudo_parse_ifndef, pseudo_resolve_ifndef, lwasm_insn_cond}, |
465 | 470 |
471 */ | |
466 { "macro", { -1, -1, -1, -1}, pseudo_parse_macro, pseudo_resolve_macro, lwasm_insn_cond | lwasm_insn_setsym}, | 472 { "macro", { -1, -1, -1, -1}, pseudo_parse_macro, pseudo_resolve_macro, lwasm_insn_cond | lwasm_insn_setsym}, |
467 { "endm", { -1, -1, -1, -1}, pseudo_parse_endm, pseudo_resolve_endm, lwasm_insn_cond | lwasm_insn_setsym | lwasm_insn_endm}, | 473 { "endm", { -1, -1, -1, -1}, pseudo_parse_endm, pseudo_resolve_endm, lwasm_insn_cond | lwasm_insn_setsym | lwasm_insn_endm}, |
468 | 474 /* |
469 { "setdp", { -1, -1, -1, -1}, pseudo_parse_setdp, pseudo_resolve_setdp, lwasm_insn_normal}, | 475 { "setdp", { -1, -1, -1, -1}, pseudo_parse_setdp, pseudo_resolve_setdp, lwasm_insn_normal}, |
470 { "set", { -1, -1, -1, -1}, pseudo_parse_set, pseudo_resolve_set, lwasm_insn_setsym}, | 476 { "set", { -1, -1, -1, -1}, pseudo_parse_set, pseudo_resolve_set, lwasm_insn_setsym}, |
471 | 477 |
472 { "section", { -1, -1, -1, -1}, pseudo_parse_section, pseudo_resolve_section, lwasm_insn_normal}, | 478 { "section", { -1, -1, -1, -1}, pseudo_parse_section, pseudo_resolve_section, lwasm_insn_normal}, |
473 { "sect", { -1, -1, -1, -1}, pseudo_parse_section, pseudo_resolve_section, lwasm_insn_normal}, | 479 { "sect", { -1, -1, -1, -1}, pseudo_parse_section, pseudo_resolve_section, lwasm_insn_normal}, |