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},