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)