diff src/insn_gen.c @ 65:31d8e85706e7

Implemented setdp and corrected handling of direct page detection in insn_gen_aux()
author lost
date Mon, 05 Jan 2009 01:40:01 +0000
parents da1337724ecd
children a338d496350e
line wrap: on
line diff
--- a/src/insn_gen.c	Mon Jan 05 01:27:08 2009 +0000
+++ b/src/insn_gen.c	Mon Jan 05 01:40:01 2009 +0000
@@ -38,7 +38,8 @@
 	lwasm_expr_stack_t *s;
 	int f8 = 0;
 	int f16 = 0;
-	
+	int isdp = 0;
+		
 	optr2 = *optr;
 	while (*optr2 && !isspace(*optr2) && *optr2 != ',') optr2++
 		/* do nothing */ ;
@@ -67,7 +68,7 @@
 			register_error(as, l, 1, "Bad expression");
 			return;
 		}
-		if (!lwasm_expr_is_constant(s))
+		if (!lwasm_expr_is_constant(s) && as -> passnum == 1)
 		{
 			f16 = 1;
 			l -> fsize = 2;
@@ -75,8 +76,11 @@
 		}
 		v1 = lwasm_expr_get_value(s);
 		lwasm_expr_stack_free(s);
+
+		if (((v1 >> 8) & 0xff) == (as -> dpval & 0xff))
+			isdp = 1;
 		
-		if (f8 || (!f16 && v1 >= -128 && v1 <= 255))
+		if (f8 || (!f16 && isdp))
 		{
 			v1 = v1 & 0xffff;
 			tv = v1 - ((as -> dpval) << 8);