changeset 355:3afb809c7add

Make 8 bit immediate operands flag a byte overflow if not in 8 bit range. 8 bit immediate operands should flag a byte overflow if they are out of range. The acceptable range is -128 <= x <= 255 to cover both signed and unsigned values.
author William Astle <lost@l-w.ca>
date Tue, 19 May 2015 12:26:35 -0600
parents 433851a26794
children c6bd6e9bc6df
files lwasm/insn_gen.c
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lwasm/insn_gen.c	Fri May 15 15:47:26 2015 -0600
+++ b/lwasm/insn_gen.c	Tue May 19 12:26:35 2015 -0600
@@ -369,6 +369,16 @@
 	{
 		lw_expr_t e;
 		e = lwasm_fetch_expr(l, 0);
+		if (lw_expr_istype(e, lw_expr_type_int))
+		{
+			int i;
+			i = lw_expr_intval(e);
+			if (i < -128 || i > 255)
+			{
+				lwasm_register_error(as, l, "Byte overflow");
+			}
+		}
+
 		lwasm_emitop(l, instab[l -> insn].ops[3]);
 		lwasm_emitexpr(l, e, 1);
 		return;
@@ -528,5 +538,14 @@
 	
 	lwasm_emitop(l, instab[l -> insn].ops[0]);
 	e = lwasm_fetch_expr(l, 0);
+	if (lw_expr_istype(e, lw_expr_type_int))
+	{
+		int i;
+		i = lw_expr_intval(e);
+		if (i < -128 || i > 255)
+		{
+			lwasm_register_error(as, l, "Byte overflow");
+		}
+	}
 	lwasm_emitexpr(l, e, 1);
 }