Mercurial > hg-old > index.cgi
diff lwasm/insn_gen.c @ 382:eacdae8a1575
Various bugfixes
author | lost@starbug |
---|---|
date | Sat, 15 May 2010 13:39:21 -0600 |
parents | 4867f18c872f |
children | 848d3cca8078 |
line wrap: on
line diff
--- a/lwasm/insn_gen.c Mon Apr 26 19:56:10 2010 -0600 +++ b/lwasm/insn_gen.c Sat May 15 13:39:21 2010 -0600 @@ -30,7 +30,7 @@ #include "instab.h" extern void insn_indexed_parse_aux(asmstate_t *as, line_t *l, char **p); -extern void insn_indexed_resolve_aux(asmstate_t *as, line_t *l, int force); +extern void insn_indexed_resolve_aux(asmstate_t *as, line_t *l, int force, int elen); extern void insn_indexed_emit_aux(asmstate_t *as, line_t *l); // "extra" is required due to the way OIM, EIM, TIM, and AIM work @@ -124,14 +124,14 @@ } } -void insn_resolve_gen_aux(asmstate_t *as, line_t *l, int force) +void insn_resolve_gen_aux(asmstate_t *as, line_t *l, int force, int elen) { lw_expr_t *e; if (l -> lint2 == 1) { // indexed - insn_resolve_indexed_aux(as, l, force); + insn_resolve_indexed_aux(as, l, force, elen); goto out; } @@ -187,10 +187,11 @@ if (extra != -1) lwasm_emit(l, extra); - if (l, l -> lint2 == 1) + if (l -> lint2 == 1) { lwasm_emit(l, l -> pb); - lwasm_emitexpr(l, e, l -> lint); + if (l -> lint > 0) + lwasm_emitexpr(l, e, l -> lint); return; } @@ -219,7 +220,7 @@ return; // handle non-immediate - insn_resolve_gen_aux(as, l, force); + insn_resolve_gen_aux(as, l, force, 0); } EMITFUNC(insn_emit_gen0) @@ -271,7 +272,7 @@ return; // handle non-immediate - insn_resolve_gen_aux(as, l, force); + insn_resolve_gen_aux(as, l, force, 0); } EMITFUNC(insn_emit_gen8) @@ -332,7 +333,7 @@ return; // handle non-immediate - insn_resolve_gen_aux(as, l, force); + insn_resolve_gen_aux(as, l, force, 0); } EMITFUNC(insn_emit_gen16) @@ -393,7 +394,7 @@ return; // handle non-immediate - insn_resolve_gen_aux(as, l, force); + insn_resolve_gen_aux(as, l, force, 0); } EMITFUNC(insn_emit_gen32)